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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
**************** CONSTANTES ***********
PortA equ $1000 ;Port A
PortC equ $1003 ;Port C
DDRC equ $1007 ;configuration du port C
NT1 equ $80 ;Valeur tempo
NT2 equ $80 ;
org $0000 ;A ne pas métre normalement , c'est pour que isis aille plus vite
jmp DEBUT
***********programme******************
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 de selection du sous programme ********************
DEBUT2 LDAA PortA ;charger le contenu du port A dans l'acu A ( PORTA >> ACU A)
ANDA #%00000011 ;on concerve les bits de poid faible
CMPA #%00000001 ;comparaison du portA avec la valeur $01
BEQ JOUR ;Si portA == $01 aller a jour
CMPA #%00000010 ;comparaison du portA avec la valeur $02
BEQ NUIT ;Si portA == $02 aller a nuit
CMPA #%00000011 ;comparaison du portA avec la valeur $03
BEQ PASAPAS ;Si portA == $03 aller a pasapas
BRA DEBUT2 ;Aller a debut2
************************ programme jour **********************
JOUR LDX #SEQ1 ;Métre la valeur de la sequance1 dans l'acuX
LDAA ,X ;Charger la valeur du poid fort de X et le placer dans l'acu A
SEI ;Desactive les interuption (IRQ) pour que l'interuption soit desactivée
BRA FEU ;Aller a feu
*************************Programme nuit **********************
NUIT LDX #SEQ2 ;Métre la valeur de la sequance2 dans l'acuX
LDAA ,X ;Charger la valeur du poid fort de X et le placer dans l'acu A
SEI ;Desactive les interuption (IRQ) pour que l'interuption soit desactivée
BRA FEU ;Aller a feu
**********************Programme manuel*********************
PASAPAS CLI ;Active les interuption (IRQ)
LDX $0003 ;Placer la valeur contenu dans la mémoire a l'addresse $0003 dans l'acu X
BRA DEBUT2
************************Pogramme d'interuption*******************
IRQ SEI ;Desactive les interuption (IRQ) , pour que on ne puisse pas relancer d'interuption
LDAA ,X
BNE FIN
LDX #SEQ1
LDAA ,X
FIN STAA PortC
LDAB #$01
PSHX
JSR TEMPO ;peandant 1 segonde le cycle TEMP0 est en cours
PULX
INX ;on incrémante 2 fois la valeur de X car ,dans la Eprom , on a : 1 case mémoire pour les led allumés et la seconde le temps
INX
STX $0003
RTI
******************Le programme des feux *********************************
FEU STAA PortC ;Entre la valeur de l'acu A dans le port c
INX ;incrémante de 1 X
LDAB ,X ;LECTURE DE LA DUREE N2
PSHX ;sauvegarde de X car utilisé dans TEMPO
JSR TEMPO ;lancer le sousprogramme temp0
PULX ;rappel du pointeur de donnée X
INX ;incrémante de 1 X
LDAA $0,X ;Charger la valeur du poid faible de X et le placer dans l'acu A
BNE FEU ;FIN DE SEQUENCE SI OCTET NUL
BRA DEBUT2
*********************Cycle machine pour que le temps soit de 1 segonde*************************
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
;***********************Valeur pour les séquence de jours et de nuit .************************************
;********** $XXYY XX exprime les leds allumer sur le port c , le YY le temps en segonde ******************
SEQ1 fdb $2402 ;SEQUENCE DE JOUR
fdb $0C20
fdb $1403
fdb $2402
fdb $2120
fdb $2203
fcb $0000
SEQ2 fdb $0210 ;SEQUENCE DE NUIT
fdb $1010
fcb $0000
;****************** vecteurs interruptions **************
RESET ORG $FFFE ;Quand on as un reset
FDB DEBUT ;Aller a debut
ORG $FFF2 ;Quand on as un front décendant , a irq , et que on demande la prise en compte de IRQ
FDB IRQ ;Aller a IRQ
end |
Partager