home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8051 Assembly Language Programming
/
easm51.iso
/
ECLAIR.LST
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Windows-1252 (detected)
Wrap
File List
|
1997-01-11
|
36.2 KB
|
1,011 lines
passe 1 ok
Assembleur MCS-51 Version 2.20, Copyright (c) 1988, 91 JLSoftware
Programme : L:\ECLAIR.ASM Sat Jan 11 21:12:40 1997
; Modele de micro-contrôleur: 80C31
Model 31
;
;---------------------------------------------------------------------------
; Définition des constantes
;
00F3 = V24SPD EQU 243
00D8 = t10msH EQU 0D8h
00F0 = t10msL EQU 0F0h
00A0 = EEPROM EQU 10100000b
0025 = TypeSW_EEPROM EQU 25h ; prevois 37 (25h) sorties
0050 = AlarmSW_EEPROM EQU 50h
; Adresse de commande des sorties:
;
; Triac1 EQU 000
; Triac2 EQU 001
; Triac3 EQU 002
; Triac4 EQU 003
; Triac5 EQU 004
; Triac6 EQU 005
; Triac7 EQU 006
; Triac8 EQU 007
; Triac9 EQU 008
; Triac10 EQU 009
; Triac11 EQU 010
; Triac12 EQU 011
; Triac13 EQU 012
; Grad1 EQU 013
; Grad2 EQU 014
; Grad3 EQU 015
; Relais1 EQU 016
; Relais2 EQU 017
; Relais3 EQU 018
; Relais4 EQU 019
;
; Les entrées se font sur le port P1
; Les bits de 0 à 6 servent pour le codage des B.P.
; Le P1.7 est l'entrée d'alarme (Entrée +12V quand alarme non active)
;
;---------------------------------------------------------------------------
; Définition des diverses zones de stockage en RAM interne
; Mémoire pour état des sorties (en RAM interne)
;
ORG 0020h ; debut zone adressable par bit (0-7F)
0020 DS 1 ; Réserve bytes de stockage
0000 = Flag1 EQU 000h ; Adresse 1er bit
0001 = Flag2 EQU 001h ; Adresse 2eme bit
0002 = Flag3 EQU 002h ; Adresse 3eme Bit
0021 TMP DS 1 ; Variable TMP
0022 Last_Code DS 1 ; Dernier code lu
0023 DPL_232 DS 1
0024 DPH_232 DS 1
0003 = EOT EQU 003h ; End Of Transmit (! Bit = 20.3h !)
0004 = Flag4 EQU 004h ; Traitement ALARM ?
0025 MemoOut DS 35 ; Memoire etat sortie
0048 TypeSW DS 35 ; Type de SWITCH (Interrupteur / BP)
; ( 00 / FF )
;
;---------------------------------------------------------------------------
; Programme
;
ORG 0000
0000 020100 LJMP Debut
ORG 000Bh
000B 02022E LJMP IntrT0
ORG 0023h
0023 0201A5 LJMP IntrSerie
0026 4144414D20
002B 452E203139
0030 3936 DM "ADAM E. 1996"
0032 020100 LJMP 0100h
ORG 0100h
0100 C200 Debut CLR Flag1
0102 C201 CLR Flag2
0104 C204 CLR Flag4 ; Pas en traitement d'alarm
0106 752200 MOV Last_Code,#0
0109 120123 LCALL InitIntr
010C 120144 LCALL InitTimer0
010F 12012A LCALL InitRS232 ; initialisation du port RS232
0112 900504 MOV DPTR,#Welcome ; } envoi du message de connection.
0115 120182 LCALL SendTxt ; }
0118 12042E LCALL InitTypeSW ; Initialise le type de sortie
011B 1203FF LCALL InitSorties ; Initialise les sorties
011E 120190 LCALL ResetSorties ; Place les sorties à 0 (1 pour relais)
0121 2121 AJMP $
;
;---------------------------------------------------------------------------
; Initialise des interruptions
; All (80h) ; Série (10h) ; Timer 0 (02h)
0123 75B802 InitIntr MOV IP,#02H
0126 75A892 MOV IE,#92H
0129 22 RET
;
;---------------------------------------------------------------------------
; Initialise le port série à 4800 bauds, 8 bits, pas de parité et 1 stop bit
;
012A 75D000 InitRS232 MOV PSW,#0 ; reset register banks
012D 758780 MOV PCON,#080H ; SMOD=1
0130 758922 MOV TMOD,#22H ; modes are timer
0133 758DF3 MOV TH1,#V24SPD ; preload value
0136 758BF3 MOV TL1,#V24SPD
0139 758921 MOV TMOD,#21H
013C D28E SETB TCON.6 ; start counter
013E 759850 MOV SCON,#050H ; mode 1 , Enable receiver=10H
0141 D203 SETB EOT ; Positionne Flag End Of Transmit
0143 22 RET
;----------------------------------------------------------------------------
; Initialisation du Timer 0 (Tempo de 10 ms)
;
0144 758CD8 InitTimer0 MOV TH0,#t10msH
0147 758AF0 MOV TL0,#t10msL
014A D28C SETB TR0
014C 22 RET
;---------------------------------------------------------------------------
; Envoi la valeur de l'accu (00->99) par le port série
;
014D C0E0 Send_Val PUSH ACC ; Empile l'accu
014F 75F00A MOV B,#10 ; } Divise par 10
0152 84 DIV AB ; }
0153 2430 ADD A,#'0'
0155 F599 MOV SBUF,A
0157 3099FD JNB TI,$
015A C299 CLR TI
015C E5F0 MOV A,B
015E 2430 ADD A,#'0'
0160 F599 MOV SBUF,A
0162 3099FD JNB TI,$
0165 C299 CLR TI
0167 12016D LCALL Send_CRLF
016A D0E0 POP ACC
016C 22 RET
;
;---------------------------------------------------------------------------
; envoi d'un CR et d'un LF par le port série
;
016D C082 Send_CRLF PUSH DPL ; Sauve le DPL tâche principale
016F C083 PUSH DPH ; IDEM
0171 3003FD JNB EOT,$ ; Attend End of Transmit
0174 C203 CLR EOT
0176 900670 MOV DPTR,#Txt_CRLF ; Pointe chaîne CRLF
0179 858223 MOV DPL_232,DPL ; } Sauve le DPTR pour le port série
017C 858324 MOV DPH_232,DPH ; }
017F D299 SETB TI ; Lance l'écriture série
0181 22 RET
;
;---------------------------------------------------------------------------
; Envoi d'un texte présent en ROM (DPTR pointe sur la chaîne)
;
0182 3003FD SendTxt JNB EOT,$ ; Attend End Of Transmit
0185 C203 CLR EOT
0187 858223 MOV DPL_232,DPL
018A 858324 MOV DPH_232,DPH
018D D299 SETB TI ; Lance l'écriture par RS232
018F 22 RET
;
;---------------------------------------------------------------------------
; Coupe toutes les sorties
;
0190 7400 ResetSorties MOV A,#0
0192 7823 MOV R0,#35 ; 16 sorties
0194 900000 MOV DPTR,#0
0197 F0 RstOut1 MOVX @DPTR,A
0198 A3 INC DPTR
0199 D8FC DJNZ R0,RstOut1
019B 7823 MOV R0,#35 ; Init 16 sorties
019D 7925 MOV R1,#MemoOut ; R1 pointe sur MemoOut
019F 7700 RstOut3 MOV @R1,#0 ; Ecrit des 0
01A1 09 INC R1 ; Passe sortie suivante
01A2 D8FB DJNZ R0,RstOut3 ; Décremente R0
01A4 22 RET
;---------------------------------------------------------------------------
; Gestion de l'interruption série
;
01A5 209803 IntrSerie JB RI,IntrReceive ; si RI = 1 on continue
01A8 0201F5 LJMP IntrSend ; Sinon Gestion Envoi par Série
01AB = IntrReceive EQU $ ; Coupe l'interruption serie
01AB C298 CLR RI ; Efface le RI
01AD C0E0 PUSH ACC ; Sauve l'accu
01AF E599 MOV A,SBUF ; Lecture du caractère recu
01B1 B43F08 CJNE A,#'?',SerieCase1
01B4 9005A2 MOV DPTR,#TextHelp ;}
01B7 12021C LCALL SendTxt2 ;} Envoi du texte d'aide
01BA 21EA AJMP FinIntr ; Fin d'interruption
01BC B46102 SerieCase1 CJNE A,#'a',SerieCase2
; LCALL LectChanel
; LCALL ON_Sortie
01BF 21EA AJMP FinIntr
01C1 B46502 SerieCase2 CJNE A,#'e',SerieCase3
; LCALL LectChanel
; LCALL OFF_Sortie
01C4 21EA AJMP FinIntr
01C6 B47408 SerieCase3 CJNE A,#'t',SerieCase4
01C9 1202E1 LCALL LectChanel
01CC 12030E LCALL TOG_Sortie
01CF 21EA AJMP FinIntr
01D1 B47308 SerieCase4 CJNE A,#'s',SerieCase5
01D4 1202E1 LCALL LectChanel
01D7 1203AD LCALL ChangeTypeSW
01DA 21EA AJMP FinIntr
01DC B46408 SerieCase5 CJNE A,#'d',SerieCase6
01DF 1202E1 LCALL LectChanel
01E2 120369 LCALL DefSortieAlarm
01E5 21EA AJMP FinIntr
01E7 B47600 SerieCase6 CJNE A,#'v',FinIntr
; LCALL AffTypeSW
01EA 900653 FinIntr MOV DPTR,#Prompt
01ED 12021C LCALL SendTxt2
01F0 D0E0 POP ACC
01F2 D2A9 SETB ET0 ; Active les interruptions
01F4 32 RETI
;
;---------------------------------------------------------------------------
; Routine d'envoi d'un texte présent en ROM (Appellé par Intr)
;
01F5 C0E0 IntrSend PUSH ACC ; Empile l'Accu
01F7 C082 PUSH DPL ; Empile le DPL
01F9 C083 PUSH DPH ; Bien tu as deviné !
01FB C299 CLR TI ; Efface le bit TI
01FD 852382 MOV DPL,DPL_232 ; Restaure le pointeur pour RS232
0200 852483 MOV DPH,DPH_232 ; IDEM
0203 7400 MOV A,#0
0205 93 MOVC A,@A+DPTR ; Lecture du caractère à afficher
0206 600B JZ FinSndTxt ; Si 0 Termine
0208 F599 MOV SBUF,A
020A A3 INC DPTR
020B 858223 MOV DPL_232,DPL ; Sauve le pointeur pour RS232
020E 858324 MOV DPH_232,DPH ; IDEM
0211 4115 AJMP NextSnd
0213 D203 FinSndTxt SETB EOT ; SET End Of Transmit
0215 D083 NextSnd POP DPH ; Restaure le DPH tâche principale
0217 D082 POP DPL ; IDEM
0219 D0E0 POP ACC ; Restaure l'acccu tâche principale
021B 32 RETI ; Termine gestion intr Send RS232
;---------------------------------------------------------------------------
; Routine d'envoi d'un texte présent en ROM
;
021C 7400 SendTxt2 MOV A,#0
021E 93 MOVC A,@A+DPTR ; Lecture du caractère à afficher
021F 600A JZ FinSnd2 ; Si 0 Termine
0221 F599 MOV SBUF,A
0223 3099FD JNB TI,$
0226 C299 CLR TI ; Efface le bit TI
0228 A3 INC DPTR
0229 411C AJMP SendTxt2
022B D203 FinSnd2 SETB EOT ; SET End Of Transmit
022D 22 RET ; Termine Routine Send RS232 sans
; les interruptions
;
;
;---------------------------------------------------------------------------
; Gestion de l'interruption Timer 0
;
022E C28C IntrT0 CLR TR0 ; Stop Timer 0
0230 B200 CPL Flag1 ; Complemente le Flag 10 ms ecoule
0232 758AF0 MOV TL0,#t10msL
0235 758CD8 MOV TH0,#t10msH
0238 D28C SETB TR0
023A B2B5 CPL P3.5 ; sortie de Flag1 sur T1 (Pin 15)
023C C0E0 PUSH ACC
023E C082 PUSH DPL
0240 C083 PUSH DPH
0242 E590 MOV A,P1
0244 B4FF12 CJNE A,#255,Intr_1
0247 C201 CLR Flag2
0249 300405 JNB Flag4,Intr_0
024C 1203FF LCALL InitSorties
024F C204 CLR Flag4 ; Efface traitement d'alarm
0251 7522FF Intr_0 MOV Last_Code,#255
0254 120345 LCALL Stop_Grad
0257 4173 AJMP Fin_IntrT0
0259 200104 Intr_1 JB Flag2,Intr_2
025C D201 SETB Flag2
025E 4173 AJMP Fin_IntrT0
0260 30970D Intr_2 JNB P1.7,Intr_Alarm
0263 300405 JNB Flag4,Intr_3
0266 1203FF LCALL InitSorties
0269 C204 CLR Flag4 ; Traitement ALARM = NON
026B 12027A Intr_3 LCALL Gestion_BP
026E 4173 AJMP Fin_IntrT0
0270 1202A6 Intr_Alarm LCALL Alarm
0273 D083 Fin_IntrT0 POP DPH
0275 D082 POP DPL
0277 D0E0 POP ACC
0279 32 RETI
;
;---------------------------------------------------------------------------
; Gestion des boutons poussoirs
;
027A E590 Gestion_BP MOV A,P1
027C 547F ANL A,#07Fh ; masque pour supprimer P1.7
027E F521 MOV TMP,A
0280 B52202 CJNE A,Last_Code,Gestion_1
0283 41A5 AJMP Fin_Gestion
0285 7400 Gestion_1 MOV A,#0
0287 9006CC MOV DPTR,#Tab_Code
028A C0E0 Gestion_2 PUSH ACC
028C 93 MOVC A,@A+DPTR
028D B5210B CJNE A,TMP,Gestion_4
0290 D0E0 POP ACC
0292 04 INC A
0293 12030E LCALL TOG_Sortie
0296 852122 MOV Last_Code,TMP
0299 41A5 AJMP Fin_Gestion
029B D0E0 Gestion_4 POP ACC
029D B42202 CJNE A,#34,Gestion_5 ; Test BP35 ?
02A0 41A5 AJMP Fin_Gestion
02A2 04 Gestion_5 INC A
02A3 418A AJMP Gestion_2
02A5 22 Fin_Gestion RET
;
;--------------------------------------------------------------------------
; Alarm
;
02A6 = Alarm EQU $
02A6 300401 JNB Flag4,Alarm_ON
02A9 22 RET ; Si Flag4=1 on termine
02AA D204 Alarm_ON SETB Flag4
02AC 120488 LCALL StartI2C
02AF 74A0 MOV A,#EEPROM
02B1 1204E5 LCALL SendByteI2C
02B4 7450 MOV A,#AlarmSW_EEPROM
02B6 7D23 MOV R5,#35 ; Lit les 35 sorties
02B8 900000 MOV DPTR,#0
02BB 1204E5 LCALL SendByteI2C ; Envoi adresse 1ere sortie
02BE 120488 LCALL StartI2C ; Start I2C
02C1 74A1 MOV A,#EEPROM+1
02C3 1204E5 LCALL SendByteI2C ; Envoi adresse EEPROM (RD)
02C6 1204F1 Alarm_Bcl LCALL RecByteI2C ; Lecture de la sorrtie
02C9 120500 LCALL AckI2C ; Acquitte la lecture
02CC F0 MOVX @DPTR,A ; Ecriture sur la sortie
02CD A3 INC DPTR
02CE DDF6 DJNZ R5,Alarm_Bcl
02D0 1204F1 LCALL RecByteI2C
02D3 1204CE LCALL StopI2C
;Alarm_Wait MOV A,P1
; JNB ACC.7,Alarm_Wait
; LCALL InitSorties
02D6 22 RET
;
; --------------------------------------------------------------------------
; Routine de tempo d'anti-rebond (basé sur timer 0 et Flag 1)
;
02D7 3000FD Wait JNB Flag1,$ ; Attend au minimum 10 mS
02DA 2000FD JB Flag1,$ ; Et au Maximum 30 mS
02DD 3000FD JNB Flag1,$
02E0 22 RET
;
;---------------------------------------------------------------------------
; Routine de lecture du n° de canal (en sortie A = n° canal)
;
02E1 = LectChanel EQU $
02E1 90065D MOV DPTR,#TextChanel
02E4 12021C LCALL SendTxt2
02E7 7B00 MOV R3,#0
02E9 3098FD LECTCH0 JNB RI,$
02EC C298 CLR RI
02EE E599 MOV A,SBUF
02F0 B40D02 CJNE A,#13,LECTCh1
02F3 EB MOV A,R3
02F4 22 RET
02F5 F599 LECTCh1 MOV SBUF,A
02F7 3099FD JNB TI,$
02FA C299 CLR TI
02FC 9430 SUBB A,#'0'
02FE 40E9 JC LECTCH0
0300 FC MOV R4,A
0301 940A SUBB A,#10
0303 50E4 JNC LECTCH0
0305 EB MOV A,R3
0306 75F00A MOV B,#10
0309 A4 MUL AB
030A 2C ADD A,R4
030B FB MOV R3,A
030C 41E9 AJMP LECTCH0
;---------------------------------------------------------------------------
; Routine Toggel Sortie Change l'état de la sortie n° A
;
030E = TOG_Sortie EQU $
030E 14 DEC A ; Convertion N° sortie -> Adr
030F F9 MOV R1,A
0310 2448 ADD A,#TypeSW
0312 F8 MOV R0,A
0313 E6 MOV A,@R0
0314 B4FF0B CJNE A,#0FFh,Tog_1
0317 8982 MOV DPL,R1
0319 758300 MOV DPH,#00
031C 74FF MOV A,#0FFh
031E F0 MOVX @DPTR,A
031F 020344 LJMP Fin_Tog
0322 120345 Tog_1 LCALL Stop_Grad
0325 120488 LCALL StartI2C ; Start I2C
0328 74A0 MOV A,#EEPROM
032A 1204E5 LCALL SendByteI2C ; Adresse EEPROM
032D E9 MOV A,R1
032E 1204E5 LCALL SendByteI2C ; Envoi Adresse (N° Sortie)
0331 E9 MOV A,R1
0332 2425 ADD A,#MemoOut ; Calcul Ptr sur Memo sortie
0334 F8 MOV R0,A ; Place Ptr dans R0
0335 E6 MOV A,@R0 ; Lit l'état actuel
0336 F4 CPL A ; Complemente l'état
0337 F6 MOV @R0,A ; Sauvegarde nouvel état
0338 758300 MOV DPH,#00 ;
033B 8982 MOV DPL,R1 ; Prépare Ptr pour écriture
033D F0 MOVX @DPTR,A ; Ecrit nouvelle état
033E 1204E5 LCALL SendByteI2C ; Ecrit état sortie / I2C
0341 1204CE LCALL StopI2C ; Stop I2C
0344 22 Fin_Tog RET
;---------------------------------------------------------------------------
0345 C0E0 Stop_Grad PUSH ACC
0347 C082 PUSH DPL
0349 C083 PUSH DPH
034B 7848 MOV R0,#TypeSW
034D E6 Stop_Grad1 MOV A,@R0
034E B4FF0B CJNE A,#0FFh,Stop_Grad2
0351 E8 MOV A,R0
0352 9448 SUBB A,#TypeSW
0354 F582 MOV DPL,A
0356 758300 MOV DPH,#00
0359 7400 MOV A,#00
035B F0 MOVX @DPTR,A
035C 08 Stop_Grad2 INC R0
035D B85CED CJNE R0,#TypeSW+20,Stop_Grad1
0360 D083 POP DPH
0362 D082 POP DPL
0364 D0E0 POP ACC
0366 22 RET
0367 22 ON_Sortie RET
0368 22 OFF_Sortie RET
0369 14 DefSortieAlarm DEC A
036A F9 MOV R1,A
036B 9006A1 MOV DPTR,#Txt_DefAlarm
036E 12021C LCALL SendTxt2
0371 3098FD DefAlarm1 JNB RI,$ ; Attent touche
0374 C298 CLR RI
0376 E599 MOV A,SBUF ; Lecture touche
0378 B46118 CJNE A,#'a',DefAlarm2
037B 120488 LCALL StartI2C ; Start I2C
037E 74A0 MOV A,#EEPROM
0380 1204E5 LCALL SendByteI2C ; Adresse EEPROM
0383 E9 MOV A,R1
0384 2450 ADD A,#AlarmSW_EEPROM ; Adresse en EEPROM de TypeSW
0386 1204E5 LCALL SendByteI2C ; Envoi Adresse (N° Sortie)
0389 74FF MOV A,#0FFh
038B 1204E5 LCALL SendByteI2C ; Ecriture du type (00 = Int)
038E 1204CE LCALL StopI2C
0391 61AC AJMP Fin_DefAlarm
0393 B46EDB DefAlarm2 CJNE A,#'n',DefAlarm1
0396 120488 LCALL StartI2C ; Start I2C
0399 74A0 MOV A,#EEPROM
039B 1204E5 LCALL SendByteI2C ; Adresse EEPROM
039E E9 MOV A,R1
039F 2450 ADD A,#AlarmSW_EEPROM ; Adresse en EEPROM de TypeSW
03A1 1204E5 LCALL SendByteI2C ; Envoi Adresse (N° Sortie)
03A4 7400 MOV A,#00
03A6 1204E5 LCALL SendByteI2C ; Ecriture du type (00 = Int)
03A9 1204CE LCALL StopI2C
03AC 22 Fin_DefAlarm RET
;
;---------------------------------------------------------------------------
; Change le type de sortie (Interrupteur 00 ou Poussoir FFh )
;
03AD 14 ChangeTypeSW DEC A ; Convertion Canal -> adresse
03AE F9 MOV R1,A
03AF 900673 MOV DPTR,#Txt_TypeSW
03B2 12021C LCALL SendTxt2
03B5 3098FD ChType1 JNB RI,$ ; Attent touche
03B8 C298 CLR RI
03BA E599 MOV A,SBUF ; Lecture touche
03BC B4691F CJNE A,#'i',ChType2
03BF 7448 MOV A,#TypeSW
03C1 29 ADD A,R1
03C2 F8 MOV R0,A
03C3 7400 MOV A,#00
03C5 F6 MOV @R0,A
03C6 120488 LCALL StartI2C ; Start I2C
03C9 74A0 MOV A,#EEPROM
03CB 1204E5 LCALL SendByteI2C ; Adresse EEPROM
03CE E9 MOV A,R1
03CF 2425 ADD A,#TypeSW_EEPROM ; Adresse en EEPROM de TypeSW
03D1 1204E5 LCALL SendByteI2C ; Envoi Adresse (N° Sortie)
03D4 7400 MOV A,#00
03D6 1204E5 LCALL SendByteI2C ; Ecriture du type (00 = Int)
03D9 1204CE LCALL StopI2C
03DC 61FE AJMP Fin_ChType
03DE B470D4 ChType2 CJNE A,#'p',ChType1
03E1 7448 MOV A,#TypeSW
03E3 29 ADD A,R1
03E4 F8 MOV R0,A
03E5 74FF MOV A,#0FFh
03E7 F6 MOV @R0,A
03E8 120488 LCALL StartI2C ; Start I2C
03EB 74A0 MOV A,#EEPROM
03ED 1204E5 LCALL SendByteI2C ; Adresse EEPROM
03F0 E9 MOV A,R1
03F1 2425 ADD A,#TypeSW_EEPROM ; Adresse en EEPROM de TypeSW
03F3 1204E5 LCALL SendByteI2C ; Envoi Adresse (N° Sortie)
03F6 74FF MOV A,#0FFh
03F8 1204E5 LCALL SendByteI2C ; Ecriture du type (00 = Int)
03FB 1204CE LCALL StopI2C
03FE 22 Fin_ChType RET
;
;---------------------------------------------------------------------------
; Initialise les sorties en fonction de l'EEPROM (I2C)
;
03FF 120488 InitSorties LCALL StartI2C ; Start bus I2C
0402 74A0 MOV A,#EEPROM ; Adresse de l'EEPROM
0404 1204E5 LCALL SendByteI2C ; Envoi
0407 7400 MOV A,#00
0409 7D14 MOV R5,#20 ; Lit les 20 sorties
040B 900000 MOV DPTR,#0
040E 7825 MOV R0,#MemoOut
0410 1204E5 LCALL SendByteI2C ; Envoi adresse 1ere sortie
0413 120488 LCALL StartI2C ; Start I2C
0416 74A1 MOV A,#EEPROM+1
0418 1204E5 LCALL SendByteI2C ; Envoi adresse EEPROM (RD)
041B 1204F1 Init_Bcl LCALL RecByteI2C ; Lecture de la sorrtie
041E 120500 LCALL AckI2C ; Acquitte la lecture
0421 F6 MOV @R0,A ; Sauve l'état de la sortie
0422 F0 MOVX @DPTR,A ; Ecriture sur la sortie
0423 08 INC R0
0424 A3 INC DPTR
0425 DDF4 DJNZ R5,Init_Bcl
0427 1204F1 LCALL RecByteI2C
042A 1204CE LCALL StopI2C
042D 22 RET
;
;---------------------------------------------------------------------------
; initialise le type de sortie
;
042E 120488 InitTypeSW LCALL StartI2C ; Start bus I2C
0431 74A0 MOV A,#EEPROM ; Adresse de l'EEPROM
0433 1204E5 LCALL SendByteI2C ; Envoi
0436 7425 MOV A,#TypeSW_EEPROM
0438 7D14 MOV R5,#20 ; Lit les 20 sorties
043A 900000 MOV DPTR,#0
043D 7848 MOV R0,#TypeSW
043F 1204E5 LCALL SendByteI2C ; Envoi adresse 1ere sortie
0442 120488 LCALL StartI2C ; Start I2C
0445 74A1 MOV A,#EEPROM+1
0447 1204E5 LCALL SendByteI2C ; Envoi adresse EEPROM (RD)
044A 1204F1 Init_Type LCALL RecByteI2C ; Lecture de la sorrtie
044D 120500 LCALL AckI2C ; Acquitte la lecture
0450 F6 MOV @R0,A ; Sauve l'état de la sortie
0451 F0 MOVX @DPTR,A ; Ecriture sur la sortie
0452 08 INC R0
0453 A3 INC DPTR
0454 DDF4 DJNZ R5,Init_Type
0456 1204F1 LCALL RecByteI2C
0459 1204CE LCALL StopI2C
045C 22 RET
;---------------------------------------------------------------------------
; Lecture des type de SW et envoi par série
045D 7914 AffTypeSW MOV R1,#20
045F 7848 MOV R0,#TypeSW
0461 C299 CLR TI
0463 E6 AffTyp1 MOV A,@R0
0464 B40005 CJNE A,#00,AffTyp2
0467 759949 MOV SBUF,#'I'
046A 816F AJMP AffTyp3
046C 759950 AffTyp2 MOV SBUF,#'P'
046F 3099FD AffTyp3 JNB TI,$
0472 C299 CLR TI
0474 75990A MOV SBUF,#10
0477 3099FD JNB TI,$
047A C299 CLR TI
047C 75990D MOV SBUF,#13
047F 3099FD JNB TI,$
0482 C299 CLR TI
0484 08 INC R0
0485 D9DC DJNZ R1,AffTyp1
0487 22 RET
;---------------------------------------------------------------------------
#include "L:I2C.LIB"
;╔══════════════════════════════════════════════════════════════════════════╗
;║ Routine de gestion du bus I2C de Philips ║
;║ Dévelloppement et réalisation : ADAM Etienne (c) 1994 ║
;╚══════════════════════════════════════════════════════════════════════════╝
; ┌──────────────┬───────────┬───────────┬──────────────────────────────────┐
; │ Nom │ Entree │ Sortie │ Remarques │
; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
; │ StartI2C │ Néan │ Néan │ Place une condition de départ sur│
; │ │ │ │ le bus I2C. Les broches utilisées│
; │ │ │ │ sont définies par SCL et SDA │
; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
; │ StopI2C │ Néan │ Néan │ Condition de fin sur le bus I2C │
; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
; │ SendByteI2C │ A = byte │ Néan │ Envoye le contenu de l'accu par │
; │ │ │ │ le bus I2C. │
; │ │ │ │ Si le device n'acquitte pas, │
; │ │ │ │ le bit Carry est positionné. C=1 │
; │ │ │ │ ! Le régistre R7 est modifié ! │
; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
; │ RecByteI2C │ Néan │ A = byte │ Lit un byte par le bus I2C et │
; │ │ │ │ renvoye la valeur dans l'accu │
; │ │ │ │ ! Le régistre R7 est modifié ! │
; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
; │ AckI2C │ Néan │ Néan │ Envoye un bit d'acquittement │
; └──────────────┴───────────┴───────────┴──────────────────────────────────┘
;
; EEPROM EQU 10100000B ; ADRESSE DE BASE D'UNE X2404
00B3 = SDA EQU 0B3H ; (pin 13)
00B2 = SCL EQU 0B2H ; (pin 12)
0488 D2B2 StartI2C SETB SCL
048A D2B3 SETB SDA
048C 00 NOP
048D 00 NOP
048E 00 NOP
048F 00 NOP
0490 00 NOP
0491 00 NOP
0492 C2B3 CLR SDA
0494 00 NOP
0495 00 NOP
0496 00 NOP
0497 00 NOP
0498 00 NOP
0499 C2B2 CLR SCL
049B 20B2FD JB SCL,$
049E 00 NOP
049F 22 RET
04A0 92B3 SendBitI2C MOV SDA,C
04A2 00 NOP
04A3 00 NOP
04A4 D2B2 SETB SCL
04A6 30B2FD SendWS JNB SCL,SendWS ; ATTEND FIN DE WAIT STATE DEVICE
04A9 00 NOP
04AA 00 NOP
04AB 00 NOP
04AC 00 NOP
04AD 00 NOP
04AE 00 NOP
04AF 00 NOP
04B0 00 NOP
04B1 C2B2 CLR SCL
04B3 00 NOP
04B4 D2B3 SETB SDA
04B6 00 NOP
04B7 22 RET
04B8 7400 ReceiveBitI2C MOV A,#0
04BA D2B2 SETB SCL
04BC 30B2FD RecWS JNB SCL,RecWS ; ATTEND FIN WAIT STATE DEVICE
04BF 00 NOP
04C0 A2B3 MOV C,SDA
04C2 33 RLC A ; lit 2 fois la ligne SDA
04C3 A2B3 MOV C,SDA
04C5 33 RLC A
04C6 C3 CLR C ; met le Carry = 0 si bit = 0
04C7 C2B2 CLR SCL
04C9 00 NOP
04CA 6001 JZ FinReceiveBit
04CC D3 SETB C ; met le carry = 1 si bit = 1
04CD 22 FinReceiveBit RET
04CE C2B3 StopI2C CLR SDA
04D0 00 NOP
04D1 00 NOP
04D2 00 NOP
04D3 D2B2 SETB SCL
04D5 30B2FD StopWS JNB SCL,StopWS ; ATTEND FIN WAIT STATE DEVICE
04D8 00 NOP
04D9 00 NOP
04DA 00 NOP
04DB 00 NOP
04DC 00 NOP
04DD D2B3 SETB SDA
04DF 00 NOP
04E0 00 NOP
04E1 00 NOP
04E2 00 NOP
04E3 00 NOP
04E4 22 RET
04E5 7F08 SendByteI2C MOV R7,#8
04E7 33 SbI2C RLC A
04E8 1204A0 LCALL SendBitI2C
04EB DFFA DJNZ R7,SbI2C
04ED 1204B8 LCALL ReceiveBitI2C
04F0 22 RET
04F1 7F08 RecByteI2C MOV R7,#8
04F3 7400 MOV A,#0
04F5 C0E0 RbyteI2C PUSH ACC
04F7 1204B8 LCALL ReceiveBitI2C
04FA D0E0 POP ACC
04FC 33 RLC A
04FD DFF6 DJNZ R7,RbyteI2C
04FF 22 RET
0500 C3 AckI2C CLR C
0501 91A0 ACALL SendBitI2C
0503 22 RET
;---------------------------------------------------------------------------
; Messages Messages Messages Messages Messages Messages Messages
;---------------------------------------------------------------------------
;
0504 436F6E6E65
0509 6374696F6E
050E 2061203438
0513 3030206261
0518 7564732C20
051D 3820626974
0522 732C207061
0527 7320646520
052C 7061726974
0531 652C203120
0536 73746F70 Welcome DM "Connection a 4800 bauds, 8 bits, pas de parite, 1 stop"
053A 0A0D0A0D DB 10,13,10,13
053E 43656E7472
0543 616C652064
0548 2765636C61
054D 6972616765
0552 2041452D31
0557 33352E2020
055C 436F707977
0561 7269746520
0566 4144414D20
056B 452E203139
0570 3936 DM "Centrale d'eclairage AE-135. Copywrite ADAM E. 1996"
0572 0A0D0A0D DB 10,13,10,13
0576 456E206174
057B 74656E6465
0580 2064652063
0585 6F6D6D616E
058A 64652E2028
058F 3F203D2061
0594 69646529 DM "En attende de commande. (? = aide)"
0598 0A0D DB 10,13
059A 41452D3133
059F 353E DM "AE-135>"
05A1 00 DB 0
05A2 4169646520
05A7 6465732063
05AC 6F6D6D616E
05B1 6465206465
05B6 206C612063
05BB 656E747261
05C0 6C65206427
05C5 65636C6169
05CA 72616765 TextHelp DM "Aide des commande de la centrale d'eclairage"
05CE 0A0D0A0D DB 10,13,10,13
; DM "a = Allume une sortie"
; DB 10,13
; DM "e = Etteint une sortie"
; DB 10,13
05D2 732020203D
05D7 2020205479
05DC 7065206465
05E1 20736F7274
05E6 6965202849
05EB 6E74657272
05F0 7570746575
05F5 72202F2042
05FA 6F75746F6E
05FF 20706F7573
0604 736F697229 DM "s = Type de sortie (Interrupteur / Bouton poussoir)"
0609 0A0D DB 10,13
060B 642020203D
0610 2020205072
0615 6F6772616D
061A 6D6174696F
061F 6E20706F75
0624 7220616C61
0629 726D65 DM "d = Programmation pour alarme"
062C 0A0D DB 10,13
062E 742020203D
0633 2020204368
0638 616E676520
063D 6C27657461
0642 7420642775
0647 6E6520736F
064C 72746965 DM "t = Change l'etat d'une sortie"
0650 0A0D00 DB 10,13,0
0653 0A0D Prompt DB 10,13
0655 41452D3133
065A 353E DM "AE-135>"
065C 00 DB 0
065D 0A0D TextChanel DB 10,13
065F 43616E616C
0664 206E2E3A20
0669 28312D3335
066E 29 DM "Canal n.: (1-35)"
066F 00 DB 0
0670 0A0D00 Txt_CRLF DB 10,13,0
0673 0A0D Txt_TypeSW DB 10,13
0675 69203D2049
067A 6E74657272
067F 7570746575
0684 7220202020
0689 202070203D
068E 20626F7574
0693 6F6E20506F
0698 7573736F69
069D 72 DM "i = Interrupteur p = bouton Poussoir"
069E 0A0D00 DB 10,13,0
06A1 0A0D Txt_DefAlarm DB 10,13
06A3 61203D204F
06A8 4E20736920
06AD 616C61726D
06B2 2020202020
06B7 20206E203D
06BC 204F464620
06C1 736920616C
06C6 61726D DM "a = ON si alarm n = OFF si alarm"
06C9 0A0D00 DB 10,13,0
06CC = Tab_Code EQU $
06CC 78 BP1 DB 01111000b
06CD 74 BP2 DB 01110100b
06CE 72 BP3 DB 01110010b
06CF 71 BP4 DB 01110001b
06D0 3C BP5 DB 00111100b
06D1 6C BP6 DB 01101100b
06D2 6A BP7 DB 01101010b
06D3 66 BP8 DB 01100110b
06D4 65 BP9 DB 01100101b
06D5 63 BP10 DB 01100011b
06D6 5C BP11 DB 01011100b
06D7 5A BP12 DB 01011010b
06D8 59 BP13 DB 01011001b
06D9 56 BP14 DB 01010110b
06DA 55 BP15 DB 01010101b
06DB 53 BP16 DB 01010011b
06DC 4E BP17 DB 01001110b
06DD 4D BP18 DB 01001101b
06DE 4B BP19 DB 01001011b
06DF 47 BP20 DB 01000111b
06E0 3C BP21 DB 00111100b
06E1 3A BP22 DB 00111010b
06E2 39 BP23 DB 00111001b
06E3 36 BP24 DB 00110110b
06E4 35 BP25 DB 00110101b
06E5 33 BP26 DB 00110011b
06E6 2E BP27 DB 00101110b
06E7 2D BP28 DB 00101101b
06E8 2B BP29 DB 00101011b
06E9 27 BP30 DB 00100111b
06EA 1E BP31 DB 00011110b
06EB 1D BP32 DB 00011101b
06EC 1B BP33 DB 00011011b
06ED 17 BP34 DB 00010111b
06EE 1F BP35 DB 00011111b
06EF END
passe 2 ok
///////////////// TABLE DES SYMBOLES UTILISATEUR \\\\\\\\\\\\\\\\\\\
AckI2C 0500 AffTyp1 0463
AffTyp2 046C AffTyp3 046F
AffTypeSW 045D Alarm 02A6
AlarmSW_EEPROM 0050 Alarm_Bcl 02C6
Alarm_ON 02AA BP1 06CC
BP10 06D5 BP11 06D6
BP12 06D7 BP13 06D8
BP14 06D9 BP15 06DA
BP16 06DB BP17 06DC
BP18 06DD BP19 06DE
BP2 06CD BP20 06DF
BP21 06E0 BP22 06E1
BP23 06E2 BP24 06E3
BP25 06E4 BP26 06E5
BP27 06E6 BP28 06E7
BP29 06E8 BP3 06CE
BP30 06E9 BP31 06EA
BP32 06EB BP33 06EC
BP34 06ED BP35 06EE
BP4 06CF BP5 06D0
BP6 06D1 BP7 06D2
BP8 06D3 BP9 06D4
ChType1 03B5 ChType2 03DE
ChangeTypeSW 03AD DPH_232 0024
DPL_232 0023 Debut 0100
DefAlarm1 0371 DefAlarm2 0393
DefSortieAlarm 0369 EEPROM 00A0
EOT 0003 FinIntr 01EA
FinReceiveBit 04CD FinSnd2 022B
FinSndTxt 0213 Fin_ChType 03FE
Fin_DefAlarm 03AC Fin_Gestion 02A5
Fin_IntrT0 0273 Fin_Tog 0344
Flag1 0000 Flag2 0001
Flag3 0002 Flag4 0004
Gestion_1 0285 Gestion_2 028A
Gestion_4 029B Gestion_5 02A2
Gestion_BP 027A InitIntr 0123
InitRS232 012A InitSorties 03FF
InitTimer0 0144 InitTypeSW 042E
Init_Bcl 041B Init_Type 044A
IntrReceive 01AB IntrSend 01F5
IntrSerie 01A5 IntrT0 022E
Intr_0 0251 Intr_1 0259
Intr_2 0260 Intr_3 026B
Intr_Alarm 0270 LECTCH0 02E9
LECTCh1 02F5 Last_Code 0022
LectChanel 02E1 MemoOut 0025
NextSnd 0215 OFF_Sortie 0368
ON_Sortie 0367 Prompt 0653
RbyteI2C 04F5 RecByteI2C 04F1
RecWS 04BC ReceiveBitI2C 04B8
ResetSorties 0190 RstOut1 0197
RstOut3 019F SCL 00B2
SDA 00B3 SbI2C 04E7
SendBitI2C 04A0 SendByteI2C 04E5
SendTxt 0182 SendTxt2 021C
SendWS 04A6 Send_CRLF 016D
Send_Val 014D SerieCase1 01BC
SerieCase2 01C1 SerieCase3 01C6
SerieCase4 01D1 SerieCase5 01DC
SerieCase6 01E7 StartI2C 0488
StopI2C 04CE StopWS 04D5
Stop_Grad 0345 Stop_Grad1 034D
Stop_Grad2 035C TMP 0021
TOG_Sortie 030E Tab_Code 06CC
TextChanel 065D TextHelp 05A2
Tog_1 0322 Txt_CRLF 0670
Txt_DefAlarm 06A1 Txt_TypeSW 0673
TypeSW 0048 TypeSW_EEPROM 0025
V24SPD 00F3 Wait 02D7
Welcome 0504 t10msH 00D8
t10msL 00F0