[68HC11] Blocage sur une boucle
Bonjour, je suis débutant ( en fait , j'apprend en electronique en cours )
Le problème est dû à la modification d'un programme. J'explique le project : des feux de signalisation (lumières) qu'il faut faire allumer et 2 programmes (jour et nuit) .
Celui qui fonctionne
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| **************** CONSTANTES ***********
PortC equ $1003 ;Port C
DDRC equ $1007 ;Direction du port C
NT1 equ $34C9 ;Valeur tempo
NT2 equ $0005 ;
ORG $F000 ; programme en EPROM
DEBUT Lds #$00FF ;Pile à la fin de la RAM
LDAA #$003F
STAA DDRC ;envoi de la config du portc
JOUR LDX #SEQ1
LDAA ,X ;Prend donnée pointée N1
SUIT1 STAA PortC ;COMMANDE DES DELS
INX
LDAB ,X ;LECTURE DE LA DUREE N2
PSHX ;sauvegarde de X car utilisé dans TEMPO
JSR TEMPO
PULX ;rappel du pointeur de donnée X
INX
LDAA $0,X
BNE SUIT1 ;FIN DE SEQUENCE SI OCTET NUL
BRA JOUR
***********************************************
TEMPO LDX #NT1 ;TEMPO DE DUREE (B = N2 secondes)
Bouc1 LDY #NT2
Bouc2 DEY
CPY #$0000
BNE Bouc2
DEX
CPX #$0000
BNE Bouc1
DECB
BNE TEMPO
RTS
;***********************************************************
SEQ1 fdb $2402 ;SEQUENCE DE JOUR
fdb $0C20
fdb $1403
fdb $2402
fdb $2120
fdb $2203
fcb $0000
;****************** vecteurs interruptions **************
RESET ORG $FFFE
FDB DEBUT
end |
PC7 et PC6 servent pour sélectionner le programme jour ou nuit .
port C = 01000000 JOUR
port C = 10000000 Nuit
Le programme est le suivant (mais il bloque à la boucle debut 2)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| **************** CONSTANTES ***********
PortC equ $1003 ;Port C
DDRC equ $1007 ;Direction du port C
NT1 equ $34C9 ;Valeur tempo
NT2 equ $0005 ;
************** PROGRAMME PRINCIPAL *********************
ORG $F000 ; programme en EPROM
DEBUT Lds #$00FF ;Pile à la fin de la RAM
LDAA #$003F
STAA DDRC ;envoi de la config du portc
************************Programme ajout ********************
DEBUT2 LDAA PortC
ANDA #%11000000
CMPA #%01000000
BEQ JOUR
CMPA #%10000000
BEQ NUIT
BRA DEBUT2
************************ programme jour **********************
JOUR LDX #SEQ1
LDAA ,X ;Prend donnée pointée N1
SUIT1 STAA PortC ;COMMANDE DES DELS
INX
LDAB ,X ;LECTURE DE LA DUREE N2
PSHX ;sauvegarde de X car utilisé dans TEMPO
JSR TEMPO
PULX ;rappel du pointeur de donnée X
INX
LDAA $0,X
BNE SUIT1 ;FIN DE SEQUENCE SI OCTET NUL
BRA JOUR
***********************************************************
NUIT BRA JOUR
***CEci n'est pas réaliser car , le choix ne fonctionne pas ...
***********************************************
TEMPO LDX #NT1 ;TEMPO DE DUREE (B = N2 secondes)
Bouc1 LDY #NT2
Bouc2 DEY
CPY #$0000
BNE Bouc2
DEX
CPX #$0000
BNE Bouc1
DECB
BNE TEMPO
RTS
;***********************************************************
SEQ1 fdb $2402 ;SEQUENCE DE JOUR
fdb $0C20
fdb $1403
fdb $2402
fdb $2120
fdb $2203
fcb $0000
;****************** vecteurs interruptions **************
RESET ORG $FFFE
FDB DEBUT
end |
Logiciel utilisé : DEVMIC11acps , et isis ( simulateur )
Merci d'avance