home *** CD-ROM | disk | FTP | other *** search
/ 8051 Assembly Language Programming / easm51.iso / CENTRAL.ASM < prev    next >
Encoding:
Assembly Source File  |  1996-09-26  |  18.8 KB  |  711 lines

  1.  
  2. ;       Modele de micro-contrôleur: 80C31
  3.     Model 31
  4. ;
  5. ;---------------------------------------------------------------------------
  6. ; Définition des constantes
  7. ;
  8. V24SPD          EQU     243
  9. t10msH          EQU     0D8h
  10. t10msL          EQU     0F0h
  11. EEPROM        EQU    10100000b
  12. TypeSW_EEPROM    EQU    20h
  13. AlarmSW_EEPROM    EQU    40h
  14.  
  15. ;       Adresse de commande des sorties:
  16. ;
  17. ; Triac1          EQU     000
  18. ; Triac2          EQU     001
  19. ; Triac3          EQU     002
  20. ; Triac4          EQU     003
  21. ; Triac5          EQU     004
  22. ; Triac6          EQU     005
  23. ; Triac7          EQU     006
  24. ; Triac8          EQU     007
  25. ; Triac9          EQU     008
  26. ; Triac10         EQU     009
  27. ; Triac11         EQU     010
  28. ; Triac12         EQU     011
  29. ; Triac13         EQU     012
  30.  
  31.  Grad1           EQU     013
  32.  Grad2           EQU     014
  33.  Grad3           EQU     015
  34.  
  35. ; Relais1         EQU     016
  36. ; Relais2         EQU     017
  37. ; Relais3         EQU     018
  38. ; Relais4         EQU     019
  39. ;
  40. ;       Les entrées se font sur le port P1
  41. ;       Les bits de 0 à 5 servent pour le codage des B.P.
  42. ;       Le P1.6 est l'entrée d'alarme (Entrée +12V quand alarme non active)
  43. ;
  44. ;---------------------------------------------------------------------------
  45. ;       Définition des diverses zones de stockage en RAM interne
  46. ;       Mémoire pour état des sorties (en RAM interne)
  47. ;
  48.         ORG     0020h           ; debut zone adressable par bit (0-7F)
  49.         DS      1               ; Réserve bytes de stockage
  50. Flag1           EQU     000h            ; Adresse 1er bit
  51. Flag2           EQU     001h            ; Adresse 2eme bit
  52. Flag3        EQU    002h        ; Adresse 3eme Bit
  53. TMP             DS      1               ; Variable TMP
  54. Last_Code       DS      1               ; Dernier code lu
  55. DPL_232         DS      1
  56. DPH_232         DS      1
  57. EOT             EQU     003h            ; End Of Transmit  (! Bit = 20.3h !)
  58.  
  59. MemoOut         DS      20              ; Memoire etat sortie
  60. TypeSW        DS    20        ; Type de SWITCH (Interrupteur / BP)
  61.                     ;         (    00       / FF )
  62.                               
  63. ;
  64. ;---------------------------------------------------------------------------
  65. ; Programme
  66. ;
  67.     ORG     0000
  68.     LJMP    Debut
  69.  
  70.     ORG     000Bh
  71.     LJMP    IntrT0
  72.  
  73.     ORG     0023h
  74.     LJMP    IntrSerie
  75.     DM    "ADAM E. 1996"
  76.     LJMP    0100h
  77.     
  78.     ORG     0100h
  79.  
  80. Debut   CLR     Flag1
  81.     CLR     Flag2
  82.     MOV     Last_Code,#0
  83.     LCALL   InitIntr
  84.     LCALL   InitTimer0
  85.     LCALL   InitRS232               ; initialisation du port RS232
  86.     MOV     DPTR,#Welcome           ; } envoi du message de connection.
  87.     LCALL   SendTxt                 ; }
  88.     LCALL    InitTypeSW        ; Initialise le type de sortie
  89.     LCALL    InitSorties        ; Initialise les sorties
  90. ;    LCALL   ResetSorties            ; Place les sorties à 0 (1 pour relais)
  91.     AJMP    $
  92.  
  93.     
  94. ;        
  95. ;---------------------------------------------------------------------------
  96. ; Initialise des interruptions  
  97. ; All (80h) ; Série (10h) ; Timer 0 (02h)
  98. InitIntr        MOV     IP,#02H      
  99.         MOV     IE,#92H
  100.         RET
  101. ;
  102. ;---------------------------------------------------------------------------
  103. ; Initialise le port série à 4800 bauds, 8 bits, pas de parité et 1 stop bit
  104. ;
  105. InitRS232       MOV     PSW,#0          ; reset register banks
  106.         MOV     PCON,#080H      ; SMOD=1
  107.         MOV     TMOD,#22H       ; modes are timer
  108.         MOV     TH1,#V24SPD     ; preload value
  109.         MOV     TL1,#V24SPD
  110.         MOV     TMOD,#21H
  111.         SETB    TCON.6          ; start counter
  112.         MOV     SCON,#050H      ; mode 1 , Enable receiver=10H
  113.         SETB    EOT             ; Positionne Flag End Of Transmit
  114.         RET
  115.  
  116. ;----------------------------------------------------------------------------
  117. ; Initialisation du Timer 0 (Tempo de 10 ms)
  118. ;
  119. InitTimer0      MOV     TH0,#t10msH
  120.         MOV     TL0,#t10msL
  121.         SETB    TR0
  122.         RET
  123.     
  124. ;---------------------------------------------------------------------------
  125. ; Envoi la valeur de l'accu (00->99) par le port série
  126. ;
  127. Send_Val        PUSH    ACC             ; Empile l'accu
  128.         MOV     B,#10           ; } Divise par 10
  129.         DIV     AB              ; }
  130.         ADD     A,#'0'
  131.         MOV     SBUF,A
  132.         JNB     TI,$
  133.         CLR     TI
  134.         MOV     A,B
  135.         ADD     A,#'0'
  136.         MOV     SBUF,A
  137.         JNB     TI,$
  138.         CLR     TI
  139.         LCALL   Send_CRLF
  140.         POP     ACC
  141.         RET
  142. ;                
  143. ;---------------------------------------------------------------------------
  144. ; envoi d'un CR et d'un LF par le port série
  145. ;
  146. Send_CRLF       PUSH    DPL             ; Sauve le DPL tâche principale
  147.         PUSH    DPH             ; IDEM
  148.         JNB     EOT,$           ; Attend End of Transmit
  149.         CLR     EOT
  150.         MOV     DPTR,#Txt_CRLF  ; Pointe chaîne CRLF
  151.         MOV     DPL_232,DPL     ; } Sauve le DPTR pour le port série
  152.         MOV     DPH_232,DPH     ; }
  153.         SETB    TI              ; Lance l'écriture série
  154.         RET
  155. ;
  156. ;---------------------------------------------------------------------------
  157. ; Envoi d'un texte présent en ROM (DPTR pointe sur la chaîne)
  158. ;
  159. SendTxt         JNB     EOT,$           ; Attend End Of Transmit
  160.         CLR     EOT
  161.         MOV     DPL_232,DPL
  162.         MOV     DPH_232,DPH
  163.         SETB    TI              ; Lance l'écriture par RS232
  164.         RET
  165. ;
  166. ;---------------------------------------------------------------------------
  167. ; Coupe toutes les sorties
  168. ;
  169. ResetSorties    MOV     A,#0
  170.         MOV     R0,#16
  171.         MOV     DPTR,#0
  172. RstOut1         MOVX    @DPTR,A              
  173.         INC     DPTR
  174.         DJNZ    R0,RstOut1
  175.         MOV     A,#0FFh
  176.         MOV     R0,#4
  177. RstOut2         MOVX    @DPTR,A
  178.         INC     DPTR
  179.         DJNZ    R0,RstOut2
  180.         
  181.         MOV     R0,#16                  ; Init 16 sorties
  182.         MOV     R1,#MemoOut             ; R1 pointe sur MemoOut                      
  183. RstOut3         MOV     @R1,#0                  ; Ecrit des 0
  184.         INC     R1                      ; Passe sortie suivante
  185.         DJNZ    R0,RstOut3              ; Décremente R0
  186.         MOV     R0,#4                   ; Init 4 sorties
  187. RstOut4         MOV     @R1,#0FFh               ; Ecrit FFh (Pour les relais)
  188.         INC     R1                      ; Passe sortie suivante 
  189.         DJNZ    R0,RstOut4              ; Décrement R0
  190.         
  191.         RET
  192.  
  193. ;---------------------------------------------------------------------------
  194. ; Gestion de l'interruption série
  195. ;
  196. IntrSerie       JB      RI,IntrReceive  ; si RI = 1 on continue
  197.         LJMP    IntrSend        ; Sinon Gestion Envoi par Série
  198.  
  199. IntrReceive     EQU $                   ; Coupe l'interruption serie
  200.         CLR     RI              ; Efface le RI
  201.         PUSH    ACC             ; Sauve l'accu
  202.         MOV     A,SBUF          ; Lecture du caractère recu
  203.         
  204.         CJNE    A,#'?',SerieCase1
  205.         MOV     DPTR,#TextHelp  ;} 
  206.         LCALL   SendTxt2         ;} Envoi du texte d'aide
  207.         AJMP    FinIntr         ; Fin d'interruption
  208.  
  209. SerieCase1      CJNE    A,#'a',SerieCase2
  210. ;        LCALL   LectChanel
  211. ;        LCALL   ON_Sortie
  212.         AJMP    FinIntr
  213.  
  214. SerieCase2      CJNE    A,#'e',SerieCase3
  215. ;        LCALL   LectChanel
  216. ;        LCALL   OFF_Sortie
  217.         AJMP    FinIntr
  218.  
  219. SerieCase3      CJNE    A,#'t',SerieCase4
  220.         LCALL   LectChanel
  221.         LCALL   TOG_Sortie
  222.         AJMP    FinIntr
  223.  
  224. SerieCase4    CJNE    A,#'s',SerieCase5
  225.         LCALL    LectChanel
  226.         LCALL    ChangeTypeSW
  227.         AJMP    FinIntr
  228.         
  229. SerieCase5    CJNE    A,#'d',SerieCase6
  230.         LCALL    LectChanel
  231.         LCALL    DefSortieAlarm
  232.         AJMP    FinIntr
  233.  
  234. SerieCase6    CJNE    A,#'v',FinIntr
  235. ;        LCALL    AffTypeSW
  236.  
  237. FinIntr         MOV     DPTR,#Prompt
  238.         LCALL   SendTxt2
  239.         POP     ACC
  240.         SETB    ET0                    ; Active les interruptions
  241.         RETI
  242. ;
  243. ;---------------------------------------------------------------------------                
  244. ; Routine d'envoi d'un texte présent en ROM (Appellé par Intr)
  245. ;
  246. IntrSend        PUSH    ACC             ; Empile l'Accu
  247.         PUSH    DPL             ; Empile le DPL
  248.         PUSH    DPH             ; Bien tu as deviné !
  249.         CLR     TI              ; Efface le bit TI
  250.         MOV     DPL,DPL_232     ; Restaure le pointeur pour RS232
  251.         MOV     DPH,DPH_232     ; IDEM
  252.         MOV     A,#0            
  253.         MOVC    A,@A+DPTR       ; Lecture du caractère à afficher
  254.         JZ      FinSndTxt       ; Si 0 Termine
  255.         MOV     SBUF,A
  256.         INC     DPTR
  257.         MOV     DPL_232,DPL     ; Sauve le pointeur pour RS232
  258.         MOV     DPH_232,DPH     ; IDEM
  259.         AJMP    NextSnd
  260. FinSndTxt       SETB    EOT             ; SET End Of Transmit
  261.     
  262. NextSnd         POP     DPH             ; Restaure le DPH tâche principale
  263.         POP     DPL             ; IDEM
  264.         POP     ACC             ; Restaure l'acccu tâche principale
  265.         RETI                    ; Termine gestion intr Send RS232
  266.  
  267. ;---------------------------------------------------------------------------                
  268. ; Routine d'envoi d'un texte présent en ROM 
  269. ;
  270. SendTxt2        MOV     A,#0            
  271.         MOVC    A,@A+DPTR       ; Lecture du caractère à afficher
  272.         JZ      FinSnd2         ; Si 0 Termine
  273.         MOV     SBUF,A
  274.         JNB     TI,$
  275.         CLR     TI              ; Efface le bit TI
  276.         INC     DPTR
  277.         AJMP    SendTxt2
  278. FinSnd2         SETB    EOT             ; SET End Of Transmit
  279.         RET                     ; Termine Routine Send RS232 sans
  280.                     ; les interruptions
  281. ;
  282. ;
  283. ;---------------------------------------------------------------------------
  284. ; Gestion de l'interruption Timer 0
  285. ;
  286. IntrT0          CLR     TR0             ; Stop Timer 0
  287.         CPL     Flag1           ; Complemente le Flag 10 ms ecoule
  288.         MOV     TL0,#t10msL
  289.         MOV     TH0,#t10msH
  290.         SETB    TR0
  291.         CPL    P3.5        ; sortie de Flag1 sur T1 (Pin 15)
  292.         PUSH    ACC
  293.         PUSH    DPL
  294.         PUSH    DPH        
  295.         MOV    A,P1
  296.         CJNE    A,#255,Intr_1
  297.         CLR    Flag2
  298.         MOV    Last_Code,#255
  299.         LCALL    Stop_Grad
  300.         AJMP    Fin_IntrT0
  301.         
  302. Intr_1        JB    Flag2,Intr_2    
  303.         SETB    Flag2
  304.         AJMP    Fin_IntrT0
  305.                 
  306. Intr_2        JNB    P1.6,Intr_Alarm
  307.         LCALL    Gestion_BP
  308.         AJMP    Fin_IntrT0
  309.                 
  310. Intr_Alarm    LCALL    Alarm
  311.  
  312. Fin_IntrT0    POP    DPH
  313.         POP    DPL
  314.         POP    ACC
  315.         RETI
  316. ;
  317. ;---------------------------------------------------------------------------
  318. ; Gestion des boutons poussoirs
  319. ;
  320. Gestion_BP    MOV    A,P1
  321.         ANL    A,#03Fh
  322.         MOV    TMP,A
  323.         CJNE    A,Last_Code,Gestion_1
  324.         
  325.         AJMP    Fin_Gestion
  326.  
  327. Gestion_1    MOV    A,#0
  328.         MOV    DPTR,#Tab_Code
  329.  
  330. Gestion_2    PUSH    ACC
  331.         MOVC    A,@A+DPTR
  332.         CJNE    A,TMP,Gestion_4
  333.         
  334.         POP    ACC
  335.         INC    A
  336.         LCALL    TOG_Sortie
  337.         MOV    Last_Code,TMP
  338.         AJMP    Fin_Gestion
  339.         
  340. Gestion_4    POP    ACC
  341.         CJNE    A,#19,Gestion_5
  342.         AJMP    Fin_Gestion
  343.  
  344. Gestion_5    INC    A
  345.         AJMP    Gestion_2
  346.  
  347. Fin_Gestion    RET
  348.  
  349. ;
  350. ;--------------------------------------------------------------------------
  351. ; Alarm
  352. ;
  353. Alarm        EQU    $
  354.         LCALL    StartI2C
  355.         MOV    A,#EEPROM
  356.         LCALL    SendByteI2C
  357.         MOV    A,#AlarmSW_EEPROM
  358.         MOV    R5,#20            ; Lit les 20 sorties        
  359.         MOV    DPTR,#0
  360.         LCALL    SendByteI2C        ; Envoi adresse 1ere sortie
  361.         LCALL    StartI2C        ; Start I2C
  362.         MOV    A,#EEPROM+1
  363.         LCALL    SendByteI2C        ; Envoi adresse EEPROM (RD)
  364.         
  365. Alarm_Bcl    LCALL    RecByteI2C        ; Lecture de la sorrtie 
  366.         LCALL    AckI2C            ; Acquitte la lecture
  367.         MOVX    @DPTR,A            ; Ecriture sur la sortie
  368.         INC    DPTR
  369.         DJNZ    R5,Alarm_Bcl
  370.         
  371.         LCALL    RecByteI2C
  372.         LCALL    StopI2C
  373.             
  374. Alarm_Wait    MOV    A,P1
  375.         JNB    ACC.6,Alarm_Wait
  376.         LCALL    InitSorties
  377.                                 
  378.         RET
  379.  
  380. ;
  381. ; --------------------------------------------------------------------------
  382. ; Routine de tempo d'anti-rebond (basé sur timer 0 et Flag 1)
  383. ;
  384. Wait            JNB     Flag1,$         ; Attend au minimum 10 mS
  385.         JB      Flag1,$         ; Et au Maximum 30 mS
  386.         JNB     Flag1,$
  387.         RET
  388. ;
  389. ;---------------------------------------------------------------------------
  390. ; Routine de lecture du n° de canal (en sortie A = n° canal)
  391. ;
  392. LectChanel      EQU     $
  393.         MOV     DPTR,#TextChanel
  394.         LCALL   SendTxt2
  395.         MOV     R3,#0
  396. LECTCH0         JNB     RI,$
  397.         CLR     RI
  398.         MOV     A,SBUF
  399.         CJNE    A,#13,LECTCh1
  400.         MOV     A,R3
  401.         RET
  402.  
  403. LECTCh1         MOV     SBUF,A
  404.         JNB     TI,$
  405.         CLR     TI
  406.         SUBB    A,#'0'
  407.         JC      LECTCH0
  408.         MOV     R4,A
  409.         SUBB    A,#10
  410.         JNC     LECTCH0
  411.         MOV     A,R3
  412.         MOV     B,#10
  413.         MUL     AB
  414.         ADD     A,R4
  415.         MOV     R3,A
  416.         AJMP    LECTCH0
  417.  
  418. ;---------------------------------------------------------------------------
  419. ; Routine Toggel Sortie Change l'état de la sortie n° A
  420. ;
  421. TOG_Sortie      EQU     $
  422.         DEC     A                       ; Convertion N° sortie -> Adr
  423.         MOV    R1,A
  424.         
  425.         ADD    A,#TypeSW
  426.         MOV    R0,A
  427.         MOV    A,@R0
  428.         
  429.         CJNE    A,#0FFh,Tog_1
  430.         MOV    DPL,R1
  431.         MOV    DPH,#00
  432.         MOV    A,#0FFh
  433.         MOVX    @DPTR,A
  434.         LJMP    Fin_Tog        
  435.  
  436. Tog_1        LCALL    Stop_Grad
  437.         LCALL    StartI2C        ; Start I2C
  438.         MOV    A,#EEPROM
  439.         LCALL    SendByteI2C        ; Adresse EEPROM
  440.         MOV    A,R1
  441.         LCALL    SendByteI2C        ; Envoi Adresse (N° Sortie)
  442.         MOV    A,R1
  443.         ADD     A,#MemoOut              ; Calcul Ptr sur Memo sortie
  444.         MOV     R0,A                    ; Place Ptr dans R0
  445.         MOV     A,@R0                   ; Lit l'état actuel
  446.         CPL     A                       ; Complemente l'état
  447.         MOV     @R0,A                   ; Sauvegarde nouvel état
  448.         MOV     DPH,#00                 ; 
  449.         MOV     DPL,R1                  ; Prépare Ptr pour écriture 
  450.         MOVX    @DPTR,A                 ; Ecrit nouvelle état
  451.         LCALL    SendByteI2C        ; Ecrit état sortie / I2C
  452.         LCALL    StopI2C            ; Stop I2C
  453. Fin_Tog        RET
  454.  
  455.  
  456. Stop_Grad    PUSH    ACC
  457.         PUSH    DPL
  458.         PUSH    DPH
  459.         MOV    R0,#TypeSW
  460. Stop_Grad1    MOV    A,@R0
  461.         CJNE    A,#0FFh,Stop_Grad2
  462.         MOV    A,R0
  463.         SUBB    A,#TypeSW
  464.         MOV    DPL,A
  465.         MOV    DPH,#00
  466.         MOV    A,#00
  467.         MOVX    @DPTR,A
  468. Stop_Grad2    INC    R0
  469.         CJNE    R0,#TypeSW+20,Stop_Grad1
  470.         POP    DPH
  471.         POP    DPL
  472.         POP    ACC
  473.         RET
  474.         
  475.         
  476.  
  477. ON_Sortie    RET
  478.  
  479. OFF_Sortie      RET
  480.  
  481. DefSortieAlarm    DEC    A
  482.         MOV    R1,A
  483.         MOV    DPTR,#Txt_DefAlarm
  484.         LCALL    SendTxt2
  485.  
  486. DefAlarm1    JNB    RI,$            ; Attent touche
  487.         CLR    RI
  488.         MOV    A,SBUF            ; Lecture touche
  489.         CJNE    A,#'a',DefAlarm2
  490.         LCALL    StartI2C        ; Start I2C
  491.         MOV    A,#EEPROM
  492.         LCALL    SendByteI2C        ; Adresse EEPROM
  493.         MOV    A,R1
  494.         ADD    A,#AlarmSW_EEPROM    ; Adresse en EEPROM de TypeSW
  495.         LCALL    SendByteI2C        ; Envoi Adresse (N° Sortie)
  496.         MOV    A,#0FFh
  497.         LCALL    SendByteI2C        ; Ecriture du type (00 = Int)
  498.         LCALL    StopI2C
  499.         AJMP    Fin_DefAlarm
  500.  
  501. DefAlarm2    CJNE    A,#'n',DefAlarm1                        
  502.         LCALL    StartI2C        ; Start I2C
  503.         MOV    A,#EEPROM
  504.         LCALL    SendByteI2C        ; Adresse EEPROM
  505.         MOV    A,R1
  506.         ADD    A,#AlarmSW_EEPROM    ; Adresse en EEPROM de TypeSW
  507.         LCALL    SendByteI2C        ; Envoi Adresse (N° Sortie)
  508.         MOV    A,#00
  509.         LCALL    SendByteI2C        ; Ecriture du type (00 = Int)
  510.         LCALL    StopI2C
  511.  
  512. Fin_DefAlarm    RET
  513. ;    
  514. ;---------------------------------------------------------------------------
  515. ; Change le type de sortie (Interrupteur 00   ou  Poussoir FFh )
  516. ;
  517. ChangeTypeSW    DEC    A            ; Convertion Canal -> adresse
  518.         MOV    R1,A
  519.         MOV    DPTR,#Txt_TypeSW
  520.         LCALL    SendTxt2
  521.  
  522. ChType1        JNB    RI,$            ; Attent touche
  523.         CLR    RI
  524.         MOV    A,SBUF            ; Lecture touche
  525.         CJNE    A,#'i',ChType2
  526.         MOV    A,#TypeSW
  527.         ADD    A,R1
  528.         MOV    R0,A
  529.         MOV    A,#00
  530.         MOV    @R0,A
  531.         LCALL    StartI2C        ; Start I2C
  532.         MOV    A,#EEPROM
  533.         LCALL    SendByteI2C        ; Adresse EEPROM
  534.         MOV    A,R1
  535.         ADD    A,#TypeSW_EEPROM    ; Adresse en EEPROM de TypeSW
  536.         LCALL    SendByteI2C        ; Envoi Adresse (N° Sortie)
  537.         MOV    A,#00
  538.         LCALL    SendByteI2C        ; Ecriture du type (00 = Int)
  539.         LCALL    StopI2C
  540.         AJMP    Fin_ChType
  541.  
  542. ChType2        CJNE    A,#'p',ChType1                        
  543.         MOV    A,#TypeSW
  544.         ADD    A,R1
  545.         MOV    R0,A
  546.         MOV    A,#0FFh
  547.         MOV    @R0,A
  548.         LCALL    StartI2C        ; Start I2C
  549.         MOV    A,#EEPROM
  550.         LCALL    SendByteI2C        ; Adresse EEPROM
  551.         MOV    A,R1
  552.         ADD    A,#TypeSW_EEPROM    ; Adresse en EEPROM de TypeSW
  553.         LCALL    SendByteI2C        ; Envoi Adresse (N° Sortie)
  554.         MOV    A,#0FFh
  555.         LCALL    SendByteI2C        ; Ecriture du type (00 = Int)
  556.         LCALL    StopI2C
  557.  
  558. Fin_ChType    RET
  559. ;
  560. ;---------------------------------------------------------------------------
  561. ; Initialise les sorties en fonction de l'EEPROM (I2C)
  562. ;
  563. InitSorties    LCALL    StartI2C        ; Start bus I2C
  564.         MOV    A,#EEPROM        ; Adresse de l'EEPROM
  565.         LCALL    SendByteI2C        ; Envoi
  566.         MOV    A,#00
  567.         MOV    R5,#20            ; Lit les 20 sorties        
  568.         MOV    DPTR,#0
  569.         MOV    R0,#MemoOut
  570.         LCALL    SendByteI2C        ; Envoi adresse 1ere sortie
  571.         LCALL    StartI2C        ; Start I2C
  572.         MOV    A,#EEPROM+1
  573.         LCALL    SendByteI2C        ; Envoi adresse EEPROM (RD)
  574.         
  575. Init_Bcl    LCALL    RecByteI2C        ; Lecture de la sorrtie 
  576.         LCALL    AckI2C            ; Acquitte la lecture
  577.         MOV    @R0,A            ; Sauve l'état de la sortie
  578.         MOVX    @DPTR,A            ; Ecriture sur la sortie
  579.         INC    R0
  580.         INC    DPTR
  581.         DJNZ    R5,Init_Bcl
  582.         
  583.         LCALL    RecByteI2C
  584.         LCALL    StopI2C
  585.         RET
  586. ;
  587. ;---------------------------------------------------------------------------
  588. ; initialise le type de sortie
  589. ;
  590. InitTypeSW    LCALL    StartI2C        ; Start bus I2C
  591.         MOV    A,#EEPROM        ; Adresse de l'EEPROM
  592.         LCALL    SendByteI2C        ; Envoi
  593.         MOV    A,#TypeSW_EEPROM
  594.         MOV    R5,#20            ; Lit les 20 sorties        
  595.         MOV    DPTR,#0
  596.         MOV    R0,#TypeSW
  597.         LCALL    SendByteI2C        ; Envoi adresse 1ere sortie
  598.         LCALL    StartI2C        ; Start I2C
  599.         MOV    A,#EEPROM+1
  600.         LCALL    SendByteI2C        ; Envoi adresse EEPROM (RD)
  601.         
  602. Init_Type    LCALL    RecByteI2C        ; Lecture de la sorrtie 
  603.         LCALL    AckI2C            ; Acquitte la lecture
  604.         MOV    @R0,A            ; Sauve l'état de la sortie
  605.         MOVX    @DPTR,A            ; Ecriture sur la sortie
  606.         INC    R0
  607.         INC    DPTR
  608.         DJNZ    R5,Init_Type
  609.         
  610.         LCALL    RecByteI2C
  611.         LCALL    StopI2C
  612.         RET
  613.  
  614. ;---------------------------------------------------------------------------
  615. ; Lecture des type de SW et envoi par série
  616.  
  617. AffTypeSW    MOV    R1,#20
  618.         MOV    R0,#TypeSW
  619.         CLR    TI
  620. AffTyp1        MOV    A,@R0
  621.         CJNE    A,#00,AffTyp2
  622.         MOV    SBUF,#'I'
  623.         AJMP    AffTyp3
  624. AffTyp2        MOV    SBUF,#'P'
  625. AffTyp3        JNB    TI,$
  626.         CLR    TI
  627.         MOV    SBUF,#10
  628.         JNB    TI,$
  629.         CLR    TI
  630.         MOV    SBUF,#13
  631.         JNB    TI,$
  632.         CLR    TI
  633.         INC    R0
  634.         DJNZ    R1,AffTyp1
  635.         RET
  636.         
  637.         
  638.         
  639. ;---------------------------------------------------------------------------        
  640. #include "L:I2C.LIB"
  641. ;---------------------------------------------------------------------------
  642. ; Messages   Messages   Messages   Messages   Messages   Messages  Messages
  643. ;---------------------------------------------------------------------------
  644. ;
  645. Welcome         DM      "Connection a 4800 bauds, 8 bits, pas de parite, 1 stop"
  646.         DB      10,13,10,13
  647.         DM      "Centrale d'eclairage AE-120.  Copywrite ADAM E. 1996"
  648.         DB      10,13,10,13
  649.         DM      "En attende de commande. (? = aide)"
  650.         DB      10,13
  651.         DM      "AE-120>"
  652.         DB      0
  653.  
  654. TextHelp        DM      "Aide des commande de la centrale d'eclairage"
  655.         DB      10,13,10,13
  656. ;        DM      "a   =   Allume une sortie"
  657. ;        DB      10,13
  658. ;        DM      "e   =   Etteint une sortie"   
  659. ;        DB      10,13
  660.         DM    "s   =   Type de sortie (Interrupteur / Bouton poussoir)"
  661.         DB    10,13
  662.         DM    "d   =   Programmation pour alarme"
  663.         DB    10,13
  664.         DM      "t   =   Change l'etat d'une sortie"
  665.         DB      10,13,0
  666.  
  667. Prompt          DB      10,13
  668.         DM      "AE-120>"
  669.         DB      0
  670.  
  671. TextChanel      DB      10,13
  672.         DM      "Canal n.: (1-20)"
  673.         DB      0
  674.  
  675. Txt_CRLF        DB      10,13,0
  676.  
  677. Txt_Alarm    DM    " ! ALARM ! "
  678.         DB    10,13,0
  679.  
  680. Txt_TypeSW    DB    10,13
  681.         DM    "i = Interrupteur      p = bouton Poussoir"
  682.         DB    10,13,0
  683.  
  684. Txt_DefAlarm    DB    10,13
  685.         DM    "a = ON si alarm       n = OFF si alarm"
  686.         DB    10,13,0            
  687.  
  688. Tab_Code        EQU     $
  689. BP1     DB      00000111b
  690. BP2     DB      00001011b
  691. BP3     DB      00001101b
  692. BP4     DB      00001110b
  693. BP5     DB      00010110b
  694. BP6     DB      00010011b
  695. BP7     DB      00010101b
  696. BP8     DB      00011001b
  697. BP9     DB      00011010b
  698. BP10    DB      00011100b
  699. BP11    DB      00100011b
  700. BP12    DB      00100101b
  701. BP13    DB      00100110b
  702. BP14    DB      00101001b
  703. BP15    DB      00101010b
  704. BP16    DB      00101100b
  705. BP17    DB      00110001b
  706. BP18    DB      00110010b
  707. BP19    DB      00110100b
  708. BP20    DB      00111000b
  709.  
  710.     END
  711.