Documente Academic
Documente Profesional
Documente Cultură
***************
TEMPERATURE + HEURE
***********************
************************************************************************
=
=
=
=
=
=
=
=
=
=
1600
160A
160B
160C
160D
01EF
1A00
1800
1900
1B00
Adr_rtc
reg_a
reg_b
reg_c
reg_d
vec_irq
Adr_seg4
Adr_seg3
Adr_seg2
Adr_seg1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$1600
$160A
$160B
$160C
$160D
; adresse du RTC
; adresse du registre A
; adresse du registre B
; adresse du registre C
; adresse du registre D
$01EF
; vecteur dinterruption
$1A00
; adresse du segment 4
$1800
; adresse du segment 3
$1900
; adresse du segment 2
$1B00
; adresse du segment 1
9100:
ORG
9100: CE 91 5C
9103: FF 01 EF
9106: CE 16 00
LDX #inter
; vecteur dinterruption
STX
vec_irq
LDX #Adr_rtc
; dfinir ladresse de
; lhorloge temps rel
BSR
test
; vrifie que le rtc est
; oprationnel
BEQ
eror
; tant quil y a une erreur on
; boucle
NOP
BRA wait
; attente dinterruption
SWI
9109: 8D 34
910B: 27 03
910D: 01
910E: 20 FD
9110: 3F
wait
eror
$9100
9131: B7 16 08
9134: 86 06
9136: B7 16 09
STA
LDA #$06
STA
Adr_rtc+8
; initialise le registre danne
Adr_rtc+9
9139: 86 02
913B: B7 16 0B
913E: 39
LDA #$02
STA
RTS
reg_b
Traitement
***
917C
917C: B6 91 F8
917F: 84 0F
9181: B7 91 FB
9184: B6 91 F8
9187: 84 F0
9189: 46
918A: 46
918B: 46
918C: 46
918D: B7 91 FA
9190: B6 91 F9
9193: 84 0F
9195: B7 91 FD
9198: B6 91 F9
919B: 84 F0
919D: 46
919E: 46
919F: 46
91A0: 46
91A1: B7 91 FC
91A4: 39
LDA heure
; charge A avec heure
ANDA
#$0F
; masque le LSB pour obtenir les
; units
STA
unit_h
; stocke le LSB dans unit_h
LDA heure
; lit heure
ANDA
#$F0
; masque le MSB pour obtenir les
; dizaines
RORA
; dcale de 4 bits vers la droite
RORA
; transforme le MSB en LSB
RORA
RORA
STA
diz_h
; stocke le MSB dans diz_h
LDA minutes
; lire la valeur de minute
ANDA
#$0F
; prendre le LSB de la valeur
STA
unit_m
; stocke dans unit_m
LDA minutes
; relire les minutes
ANDA
#$F0
; masque le MSB de la valeur
RORA
; dcale de 4 bits doite
RORA
RORA
RORA
STA
diz_m
; stocke le MSB dans diz_m
RTS
CLRB
CMPB
BEQ
INCB
diz_h
aff1
; on efface B
; on compare B avec diz_h
; si B = diz_h alors on affiche
; sinon on incrmente et on
BRA bcl1
LDX #tab_seg
ABX
LDA 0,x
; on pointe tab_seg
; ajoute B X (B= dplacement)
; charger A par le contenu de la
; case pointe
Adr_seg2
; on affiche
; on efface B
unit_h
; on compare B avec unit_h
aff2
; si B = unit_h alors on affiche
; sinon incrmente et puis boucle
STA
CLRB
CMPB
BEQ
INCB
BRA bcl2
LDX #tab_seg
ABX
LDA 0,x
91C6: B7 1A 00
91C9: 5F
91CA: F1 91 FC bcl3
91CD: 27 03
91CF: 5C
91D0: 20 F8
91D2: CE 91 EE aff3
91D5: 3A
91D6: A6 00
91D8: B7 1B 00
91DB: 5F
91DC: F1 91 FD bcl4
91DF: 27 03
91E1: 5C
91E2: 20 F8
91E4: CE 91 EE aff4
91E7: 3A
91E8: A6 00
; case pointe
STA
Adr_seg4
; affiche sur le 7segment N4
CLRB
; efface le registre B
CMPB
diz_m
; compare B avec diz_m
BEQ
aff3
; si B = diz_m alors on affiche
INCB
; sinon incrmente et puis boucle
BRA bcl3
LDX #tab_seg
; pointe le tableau tab_seg
ABX
; ajoute B X (B= dplacement)
LDA 0,x
; charger A par le contenu de la
; case pointe
STA
Adr_seg1
; affiche sur le 7segments N1
CLRB
; on efface B
CMPB
unit_m
; on compare B avec unit_m
BEQ
aff4
; si B = unit_m alors on affiche
INCB
; sinon incrmente et puis boucle
BRA bcl4
LDX #tab_seg
; pointe le tableau tab_seg
ABX
; ajoute B X (B= dplacement)
LDA 0,x
; charger A par le contenu de la
; case pointe
STA
Adr_seg3
; affiche sur le segment N3
RTS
FCB $7E, $0C, $B6, $9E, $CC
91EA: B7 18 00
91ED: 39
91EE: 7E 0C B6 tab_seg
9E CC
91F3: DA FA 0E
FCB $DA, $FA, $0E, $FE, $DE
FE DE
91F8:
91F9:
91FA:
91FB:
91FC:
91FD:
91FE:
91FF:
[] * 0001
[] * 0001
[] * 0001
[] * 0001
[] * 0001
[] * 0001
[] * 0001
[] * 0002
heure
minutes
diz_h
unit_h
diz_m
unit_m
dpl
cpt
RMB
RMB
RMB
RMB
RMB
RMB
RMB
RMB
1
1
1
1
1
1
1
2
920C: 39
RTS
****************************************************************
***************
TEMPERATURE
**********************
****************************************************************
= 0090
= 0050
adr_1621
slav
EQU $90
EQU $50
LDB
JSR
JSR
9221: 86 90
boucle
9223: BD 92 BD
JSR
9226: CE 93 20
9229: C6 01
922B: BD 92 CF
JSR
922E: BD 93 19
9231: 86 90
lec_temp
9233: BD 92 BD
JSR
9236: CE 93 21
9239: C6 01
923B: BD 92 CF
923E: BD 93 19
9241: 86 91
9243: BD 92 BD
9246: CE 95 00
9249: C6 02
924B: BD 92 E0
924E: BD 93 19
9251: BD 92 6D
JSR
JSR
#slav
Init_i2c
stop_i2c
; initialisation de l'i2c
; on libre l'i2c
; d'affichage
; on affiche le '' (degr)
Adr_seg1
; on affiche le 'C' (celsius)
Adr_seg3
9254: 86 C6
9256: B7 1B 00
9259: 86 72
925B: B7 18 00
925E: B6 91 FF
9261: 4C
9262: B7 91 FF
9265: 81 FF
9267: 26 B8
9269: BD 92 01
926C: 39
*****Aff_tmp ******
926D:
926D: CE 95 00
LDA #$C6
STA
LDA #$72
STA
LDA cpt
INCA
STA
CMPA
BNE
JSR
RTS
9270: E6 00
9272: 4F
9273: CE 00 0A
9276: 02
9277: F7 93 24
927A: FF 93 26
927D: F6 93 27
9280: F7 93 26
9283: 18 CE 91 loop1
EE
9287: 18 3A
9289: 18 A6 00
928C: F1 93 24
928F: 27 0
LDB 0,x
CLRA
LDX #10
; on divise le Msb par 10
IDIV
STB
unite
; stocke le reste dans unite
STX
dizaine
; stocke le quotient dans dizaine
LDB
dizaine+1
STB
dizaine
LDY #tab_seg
LDX #$9500
ABY
LDA 0,y
CMPB
BEQ ok1
cpt
#$FF
boucle
tempo_long
; additionne b y
; charge A avec ce que pointe Y
unite
; on compare b unite
; si c'est gale on affiche A
; (qui contient la valeur de
; la case mmoire pointe par Y)
9291: 5C
INCB
; on incrmente B
9292: 20 EF
BRA loop1
; on boucle
9294: B7 1A 00 ok1
STA
Adr_seg4
; envoie A l'afficheur
9297: 5F
CLRB
9298: 18 CE 91 EE loop2
LDY #tab_seg
929C: 18 3A
ABY
; additionne b y
929E: 18 A6 00
LDA 0,y
; charge A avec ce que pointe Y
92A1: F1 93 26
CMPB
dizaine
; compare b dizaine
92A4: 27 03
BEQ
ok2
; si c'est gale on affiche A
92A6: 5C
INCB
; incrmente B
92A7: 20 EF
BRA loop2
; boucle loop2
92A9: B7 19 00 ok2
STA
Adr_seg2
; envoie la valeur A l'afficheur
92AC: 39
RTS
******************************************
********** INITIALISATION I2C *********
******************************************
= 1400
= 00C5
= 00C3
bus_i2c
EQU $1400
start
EQU $C5
stop EQU $C3
LDA #$00
BSR
TBA
BSR
LDA #$20
BSR
LDA #$1D
BSR
RTS
ecriture_reg_s1
ecriture
ecriture_reg_s1
ecriture
start_i2c
PSHA
BSR test_busy
PULA
BSR ecriture
LDA #start
BSR ecriture_reg_s1
BSR attente_ack
92C9: 8D 4A
92CB: 16
92CC: C4 18
92CE: 39
BSR lecture_reg_s1
TAB
ANDB #$18
RTS
PSHX
PSHB
BSR attente_ack
92D3: 5A
DECB
92D4: 2B 07
92D6: A6 00
BMI
LDA ,X
92D8: 08
92D9: 8D 32
INCX
BSR
92DB: 20 F4
92DD: 33
Arret
92DE: 38
92DF: 39
BRA
PULB
PULX
RTS
ecriture
Boucle
; incrmente X
; envoi la valeur de la registre A
; sur le bus i2c
; reboucle
9309
9309: B6 14 00
LDA bus_i2c
930C: 39
RTS
STA
9310: 39
RTS
bus_i2c
STA
RTS
bus_i2c+1
LDA bus_i2c+1
9318: 39
RTS
[] * 0002
[] * 0002
[] * 0002
[] * 0002
unite
dizaine
Affiche
Init
RMB
RMB
RMB
RMB
END
2
2
2
2