找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7105|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

LED數(shù)碼管顯示的電子表制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-3-4 01:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、硬件電路:

硬件電路原理圖如下,這是我15年前設(shè)計的一個LED數(shù)碼管電子表,它是由一片51單片機,3片ULN2803,一個7805集成穩(wěn)壓器、SD2001A時鐘模塊及8只9014npn三極管和8只8550pnp三極管,紅外線接收頭組成,51單片機完成讀寫時鐘,接收紅外遙控指令,驅(qū)動數(shù)碼管顯示等任務(wù)。由于要驅(qū)動2.3寸的數(shù)碼管,單片機的驅(qū)動能力不足,采用了NPN,PNP三極管組成的位驅(qū)動,用ULN2803組成段驅(qū)動,可以驅(qū)動24個數(shù)碼管,可以顯示日、月、年、星期、安全生產(chǎn)天數(shù)等。

二、51匯編程序
;電子表程序(源文件dzbc512.asm)
       YEAR    EQU    20H            ;
       MONTH  EQU    21H            ;
       DAY     EQU    22H            ;
       WEEK   EQU    23H            ;星期
       HOUR   EQU    24H            ;小時3031
       MINUTE EQU    25H            ;分鐘3233
       SECOND EQU    26H            ;3435
       FLAG    EQU    27H            ;通用標(biāo)志寄存器
                                       ;BIT0=1, ACK ERR
                                       ;BIT0=0,ACK OK
                                       ;BIT1=1,TEST MODE
                                       ;BIT1=0,NORMAL MODE
       TIMETEMP       EQU    28H    ;時間數(shù)據(jù)緩存器
       TIMETX         EQU    52H    ;時間數(shù)據(jù)發(fā)送寄存器
       TIMERX         EQU    51H    ;時間數(shù)據(jù)接收寄存器
       SDA            EQU    0b1h   ;IICSDA口線
       SCL            EQU    0b0h   ;IICSCL口線

            ORG 0000
            AJMP  L0
            ORG   000BH
         AJMP  CT
            ORG   001BH
            RETI
            ORG 0023H
            AJMP SI
            ORG 0030H
   L0:        ;初始化程序
       MOV    SP,#60H                ;定義堆棧
       CLR    A                      ;開始初始化各寄存器
       MOV    IE,A                   ;關(guān)中斷
       MOV    P1,A
       MOV    P2,A                   ;PORT1,PORT20
       MOV    TMOD,#91H              ;定時器016位定時器,
        MOV 8CH, #3CH
         MOV 8AH, #0B0H
       CLR    FLAG
       LCALL  LONGDELAY              ;延時300ms
       LCALL  LONGDELAY              ;延時300ms
       LCALL  TIMESTATUS_INT12       ;24小時制
;-----------------------------------------------------------------
GET_TIME:
       CLR    ET0                       ;關(guān)閉AT89C51TIME0中斷
       LCALL  READ_TIME              ;SD2000內(nèi)的實時時鐘數(shù)據(jù)
       JNB    SECOND.7,NO_TESTMODE
       LCALL  TIME_TESTMODE          ;測試模式結(jié)束
;      CLR    SECOND.7               ;秒的最高位屏蔽為0
NO_TESTMODE:
     MOV R2,#3         ;讀預(yù)置數(shù)據(jù)時分秒到30-35H內(nèi)存單元
      MOV R0, #30H
      MOV R1,#24H
L1: MOV     A,@R1
      SWAP A
      ANL      A,#0FH
      MOV @R0,A
      INC R0
      MOV     A,@R1
      ANL      A,#0FH
      MOV @R0,A
      INC R1
      INC R0
      DJNZ R2,L1

      MOV     A,WEEK      ;星期數(shù)據(jù)
      ANL      A,#0FH
      MOV 37H,A

     MOV R2,#3         ;讀預(yù)置數(shù)據(jù)年月日20H,21H,22H--42,43,44,45,46,47
      MOV R0, #42H
      MOV R1,#20H
L2: MOV     A,@R1
      SWAP A
      ANL      A,#0FH
      MOV @R0,A
      INC R0
      MOV     A,@R1
      ANL      A,#0FH
      MOV @R0,A
      INC R1
      INC R0
      DJNZ R2,L2
      MOV     A,#2             ;2003年表示成0003所以把2加上
      MOV 40H,A
      MOV R3, #30H
     CLRA
     MOV R7,A
      MOV 29H, A
     MOV 2AH,A
     MOV 2BH,A
      MOV 2CH, A
      MOV 2DH, A
    MOV 2EH, A
      MOV 2FH,A
      MOV 50H,#01H
   SETB   EA                     ;AT89C51中斷
   SETB   ET0                    ;允許AT89C51TIME0中斷
   SETB   TR0                    ;T0開始計數(shù)

   DIS:MOV   DPTR,#0700H              ;顯示子程序
         MOV   R2, #01H
         MOV   R1, #30H
  DIS1:MOV   A, @R1
            MOVC  A,@A+DPTR
;     CPL A
            MOV   B,A
           MOV   P0,A
          MOV   A, R1
          MOV   R4, A
          MOV   A, #08H
           ADD   A, R1
          MOV   R1, A
          MOV   A, @R1
          MOVC  A, @A+DPTR
;     CPL A
            MOV   B,A
          MOV   P2,A
          MOV   A, #08H
           ADD   A, R1
          MOV   R1, A
            MOV   A, @R1
          MOVC  A, @A+DPTR
;     CPL A
            MOV   B,A
           MOV   P3,A
         MOV   A, R4
          MOV   R1, A
           MOV   A, R2
           MOV   P1, A
            ACALL DELAY
           AJMP  JPCL

AN:     MOV   A, #01H;置閃動標(biāo)志
     MOV   R7, A
      MOV   A,2CH   ;
     XRL   A,#0AH   ;鍵值=A”顯示地址加1
     JZ   JIA
     MOV   A, 2CH
     XRL   A, #0BH;鍵值=B”顯示地址減1
     JZ   JIAN1
     MOV   A, 2CH
     XRL   A, #0CH;鍵值=C”復(fù)位
     JNZ   BJ
      AJMP  L0
BJ:MOV   A, 2CH
      AJMP  J5
SS: MOV   A, R3
     MOV   R0, A
     MOV   A, b;2CH
      MOV   @R0, A
     CLR   A
     MOV   R7, A
     AJMP  J6;SHAN

JIA:MOV   A, R3
     XRL   A, #47H
     JZ   QCHU
;   MOV   A,#01H   ;置閃動標(biāo)志
;   MOV   R7, A
      MOV A,50H
      JNZ SHAN
      ACALL JIA1
     INC   R3
     MOV 50H,#01H
QCHU:  MOV   A, R3
     MOV   R0, A
     MOV   2CH, @R0
     AJMP  SHAN
JIAN1:MOV  A, R3
     XRL   A, #30H
     JZ   QCHU1
;   MOV   A, #01H
;   MOV   R7, A
      MOV A,50H
      JNZ SHAN
      ACALL JIAN
      DEC   R3
      MOV 50H,#01H
QCHU1:MOV  A, R3
     MOV   R0, A
      MOV   2CH, @R0

SHAN: MOV   A,R7            ;字符閃動用R7識別
      SETB  TR0
     JNZ   G
     AJMP  J5
  G:    MOV   A, 2FH
     CJNE  A, #05H, J4
     MOV   A, R3
     MOV   R0, A
     MOV   A,#11H         ;熄滅顯示
     MOV   @R0, A
     AJMP  J5
J4:     MOV   A, R3
     MOV   R0, A
     MOV   A, 2CH
     MOV   @R0,A         ;顯示字符
J5:     MOV   A,R2            ;移位
     RL   A
     MOV   R2, A
     INC   R1
    MOV   A, R2
     JB   0E0H, J6
     AJMP  DIS1
J6: AJMP DIS
      ORG0200H                ;定時器子程序
CT: MOV   8CH, #3CH
     MOV   8AH, #0BEH
     PUSH  0D0H
     PUSH  0E0H
     PUSH  82H
     PUSH  83H
     MOV   A, 2FH
      INC   A
     MOV   2FH, A
     CJNE  A, #0AH, DONE;1/10
     MOV   2FH, #00H
     MOV  A,36H           ;1
     CPL   A
     MOV   36H,A
     MOV   A,35H          ;1
     INC   A
     MOV   35H, A
     CJNE  A, #0AH, DONE
     MOV   35H, #00H
     MOV   A,34H          ;10
     INC   A
     MOV   34H, A
     CJNE  A, #06H, done
     MOV   34H, #00H
     MOV   A,33H          ;
     INC   A
     MOV   33H, A
     CJNE  A, #0AH,DONE
     MOV   33H, #00H
     MOV   A,32H          ;十分
     INC   A
      MOV   32H, A
     CJNE  A, #06H, DONE
     MOV   32H, #00H
     MOV   R0, #31H;
     ACALL GIA1
     MOV   R0, #30H;10
     MOV   A, @R0
     INC   R0
     SWAP  A
     ADD   A, @R0
     MOV   2DH, A
     CJNE  A, #24H, DONE
     CLR   A
     MOV   30H, A
     MOV   31H, A
QC:;      CLR   P3.0
DONE: NOP
     POP   83H
     POP   82H
     POP   0E0H
     POP   0D0H
     RETI

  X:  MOV   R0, #3BH
     ACALL GIA1
     MOV   R0, #3FH
     ACALL GIA1
       MOV   R0,#37H     ;
       MOV   A, @R0
       INC   A
       MOV   @R0, A
       CJNE  A, #09H, XQ
       MOV   A, #01H
       MOV   @R0, A
   XQ: CJNE  A, #07H, XQ1
       INC   A
       MOV   @R0, A
   XQ1: nop
   RHB:MOV   R0, #47H
       ACALL GIA1
       MOV   R0, #46H
       MOV   A, @R0
       INC   R0
       SWAP  A
       ADD   A, @R0
       MOV   2BH, A
   YHB:MOV   R0, #44H
       MOV   A, @R0
       INC   R0
       SWAP  A
       ADD   A, @R0
       MOV   2AH, A
       CJNE  A, #02H, XY
   NHB:MOV   R0,#42H
       MOV   A, @R0
       INC   R0
       SWAP  A
       ADD   A, @R0
       MOV   0F0H, #04H
       DIV   AB
       MOV   A, 0F0H
       JNZ   PY
       MOV   A, 2BH
       CJNE  A, #30H, FH
       AJMP  QLFH
   XY: MOV   A, 2AH
       CJNE  A, #04H, XY1
       AJMP  01E4H
   XY1:CJNE  A, #06H, XY2
       AJMP  XY4
   XY2:CJNE  A, #09H, XY3
       AJMP  XY4
   XY3:CJNE  A, #11H, DY
   XY4:MOV   A, 2BH
       CJNE  A, #31H, FH
       AJMP  QLFH
   DY: MOV   A, 2BH
       CJNE  A, #32H, FH
       AJMP  QLFH
   PY: MOV   A, 2BH
       CJNE  A, #29H, FH
  QLFH:LJMP  R
       NOP
       NOP
       NOP
   FH: LJMP  SXI

JIAN:    MOV A,R3
      DEC R3
      AJMP FHJ
JIAN2:   MOV A,R3
      XRL A,#44H
      JNZ FHJ
      DEC R3
      DEC R3
      DEC R3
      DEC R3
FHJ:      RET
JIA1:     MOV A,R3
      INC R3
      AJMP JIA3
JIA2:     MOV A,R3
      XRL A,#3FH
      JNZ JIA3
      INC R3
      INC R3
      INC R3
      INC R3
JIA3:     RET
       ORG 0330H
  R:  MOV   A, #01H
       MOV   47H, A
       MOV   A, #00H
       MOV   46H, A
       MOV   R0, #45H
       ACALL GIA1
       MOV   A, 2AH
       CJNE  A, #12H, FH1
       MOV   A, #01H
       MOV   45H, A
       MOV   A, #00H
       MOV   44H, A
   NJ1:MOV   A, 2AH
       CJNE  A, #12H, FH1
       MOV   A, 2BH
       CJNE  A, #32H, FH1
       MOV  R0, #43H
       ACALL GIA1
   FH1:LJMP  DONE

      ORG 0360H
   SXI:MOV   R0, #47H
       MOV   A, 2BH
       MOV   R4, A
       ANL   A, #0FH
       MOV   @R0, A
       DEC   R0
       MOV   A, R4
       SWAP  A
       ANL   A, #0FH
       MOV  @R0, A
       LJMP  DONE

       ORG 0380H

  DL:  MOV   R0, #30H
       MOV   A, @R0
       INC   R0
       SWAP  A
       ADD   A, @R0
       MOV   2DH, A
       MOV   R0, #32H
       MOV   A, @R0
       INC   R0
       SWAP  A
       ADD  A, @R0
       MOV   29H, A
       MOV   R4, #1BH
       MOV   DPTR, #0500H
       MOV   A, #00H
   DL1:MOVC  A, @A+DPTR
       CJNE  A, 2DH, DL2
       INC   DPTR
       MOV   A,#00H
       MOVC  A, @A+DPTR
       CJNE  A, 29H, DL3
       AJMP DL4
   DL2:INC   DPTR
   DL3:INC   DPTR
       MOV   A, #00H
       DJNZ  R4, DL1
       AJMP  DL5
   DL4:SETB   P2.0
      ACALL DELAY
   DL5:RET
; 鍵盤掃描處理子程序
                ORG0400H   
  JPCL: ORL  P3,#08H        ;P3口復(fù)用,既作數(shù)碼管的段選,又作遙控接收,
  JP:   JNB  P3.3,YS2        ;為檢測紅外線接收頭有無信號,必須使P3.3=1.
      clr p3.3
        AJMP J0          ;無信號輸入轉(zhuǎn)移
YS2:  ANL  P1,#00H        ;否則關(guān)顯示,位選信號為0
        CLR   A
        MOV   48H, A
        MOV   R0,#48H        ;遙控數(shù)據(jù)存儲指針
        MOV   R6, #1EH
S0:   MOV   8DH,#00H       ;定時器1時間常數(shù)
        MOV   8BH, #00H
S1:   JB    0B3H,JP        ;50微秒內(nèi)P3.3變高則返回,正常解碼信號持續(xù)低電平應(yīng)大于50微秒.
        SETB TR1              ;是解碼信號,準(zhǔn)備啟動定時器1(為高時啟動),
S2:   JNB   0B3H,S2       ;等待變高,如果是干擾信號,很快消失而變高.
S3:       MOV   A,TH1       ;如果高電平持續(xù)時間太長,則是干擾信號,超過FE,則返回.
         XRL  A,#0FEH
         JZ   J0
        JB    0B3H,S3        ;等待再次變低.
        CLR  TR1              ;再次變低后,高脈沖寬度測量完畢,應(yīng)關(guān)閉定時器.
        MOV   A,8DH         ;讀數(shù)據(jù)
        JZ   S4           ;譯碼
        MOV   A, #80H
        ADD   A, @R0
        MOV   @R0, A
S4:   MOV   A, @R0
        RL   A
        MOV   @R0, A
          NOP
        DJNZ  R6, S0
        MOV   A, 48H
        MOVC  A, @A+DPTR
        ANL   A, #0FH
        MOV   2CH, A
        ACALL DELAY2
           ACALL DELAY2
           SETB  TR0
            SUBB A,#0AH
            JNCS5         ;是功能鍵轉(zhuǎn)移
            MOV   A,R3     ;是數(shù)字鍵寫顯示
           MOV   R0, A
           MOV   A, 2CH
           MOV   @R0, A
           MOVR7,#00H     ;清閃動標(biāo)志
            MOV 50H,#00H   ;置確定標(biāo)志,
            AJMP DIS
  S5:   LJMP AN
        NOP
  JJ6:  JNB  0B1H, JJ6
        ACALL DELAY2
        MOV   A, R3
        MOV   R0, A
        MOVC  A, @A+DPTR
        XRL   A, @R0
        JNZ   J7
        AJMP  G1
  J7:  INC   @R0
  G1:  CLR   A
        MOV   R7, A
        AJMP  J00
  J8:  JNB   0B2H, J8
        ACALL DELAY2
        MOV   A, R3
        MOV   R0, A
        MOV   A, @R0
        XRL  A, #00H
        JNZ   J9
        AJMP  G0
  J9:  DEC   @R0
  G0:  CLR   A
        MOV   R7, A
        AJMP  J00
  J:   JNB   0B4H, J
        ACALL DELAY2
        MOV   A, #01H
        MOV   R7, A
        MOV   A, R3
        XRL   A, #48H
        JNZ   JJ4
        MOV   R3, #2FH
  JJ4:  INC  R3
        MOV   A, R3
        MOV   R0, A
        MOV   2CH, @R0
  J00:  ACALL DELAY2
  J0:  CLR   TR1
       SETB  TR0
  J01:  LJMP  SHAN
       ORG0500H        ;打鈴時間
DB06,30H,06,00,06,15H,07,15H,07,40H,07,45H,08,30H,08,40H,09,25H
DB09,50H,10H,35H,10H,45H,11H,30H,12H,30H,13H,30H
DB13H,40H,13H,45H,14H,30H,14H,40H,15H,25H,16H,30H,17H,00H
DB18H,00,18H,45H,20H,20H,21H,00,21H,10H
      ORG 0550H
DB00,08,05,04,00,00,00,04;p2
DB00,00,00,01,00,00,00,01;p0
DB01,09,09,08,00,07,01,06;p3
        ORG 0600H
   SIO: MOVA,#20H
     MOV R0,#20H
     MOV 89H,A
     MOV 8DH,#0F3H
     SETB 0BCH
     SETB 0AFH
     CLR 0ABH
     SETB 8EH
     SETB 0ACH
     MOV A,#50H
     MOV 98H,A
     RET
  SI:    MOV DPTR,#0700H
     CLR 98H
     MOV A,99H
     MOVC A,@A+DPTR
       MOV R2,A
     MOV A,R7
     XRL A,#01H
     JZ  SI1
     MOV A,R2
     MOV @R0,A
     MOV R7,#01H
     AJMP SI2
   SI1: MOVA,@R0
     SWAP A
     ADD A,R2
     MOV @R0,A
     INC R0
     MOV R7,#00H
   SI2: RETI
  SO:   CLR 99H
     MOV A,99H
     MOV @R0,A
     RETI
      ORG 0700H;數(shù)碼管段編碼
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH
DB 8EH,0CEH,00
      ORG 0712H
DELAY:  MOV   R5, #88H
DEL:    NOP
        DJNZ  R5, DEL
        RET
DELAY1: MOV   R6, #10H
DELA:   ACALL DELAY
        DJNZ  R6, DELA
        RET
DELAY2: MOV   R6, #0FFH
DE:     ACALL DELAY
        DJNZ  R6,DE
        RET
       ORG 0730H
DB00,01,02,03,04,05,06,07,08,09,09,09,09,09,09,09,02,0AH,0BH,0CH,0DH,0EH,0FH,09
       ORG 0748H
GIA1:   MOV   R1, #04H
GIA2:   MOV   A, @R0
GIA:    INC   A
        MOV   @R0, A
        CJNE  A, #0AH, GIA3
        CLR   A
        MOV   @R0, A
        DEC   R0
        DJNZ  R1, GIA2
GIA3:   RET
       ORG 0761H
DB02H,00H, 00H,00H, 06H,0EH,00H, 0AH,04H,00H,0DH,00H,08H,00H,00H,00H
DB01H,00H, 09H,0BH,05H,00H,00H,00H,03H,00H,0CH,00H,07H,0FH
      ORG 07A0H
DB0AH,03H,00H,07H,09H,01H,0CH,05H,04H,0BH,08H,00H,02H,00H,06H,0DH
      ORG 07B0H
DB00H,07H,0AH,03H,0CH,05H,09H,01H,08H,00H,04H,0BH,06H,0DH,02H,00H
      ORG 07C0h
DD:    MOV R2,#0FEH
     MOV R1,#0FEH
CC:  MOV A,R1
      MOV P1,A
      MOV P0,A
      MOV P3,A
     MOV A,R2
     MOV P2,A
     MOV R6,#50H
BB:  MOV R5,#0FFH
AA:NOP
      DJNZ R5,AA
      DJNZ R6,BB
      MOV A,R1
      RL A
      MOV R1,A
      JB 0E0H,CC
      MOV A,R2
      RL A
      MOV R2,A
      JNB 0E0H,CC
      RET
;讀實時時鐘實時數(shù)據(jù)寄存器子程序
;功能:從實時時鐘讀入當(dāng)前時間數(shù)據(jù)                                        |
;入口:NONE                                                              
;出口:接收數(shù)據(jù)放在年、月、日、星期、時、分、秒各寄存器                  
;影響資源:A,R0,R3,TIMETX,TIMERX,YEAR,MONTH,DAY,WEEK,HOUR,MINUTE,SECOND |
READ_TIME:
RDTIME_LOOP:
      LCALL   IICSTART
       JB     FLAG.1,ERR_IICSTOP     ;SDA線被箝位為低電平則退出
      MOV     TIMETX,#65H            ;發(fā)送讀時鐘數(shù)據(jù)命令
      LCALL   SENDH_L
       JB     FLAG.0,ERR_IICSTOP     ;ACK信號不正常則退出.
      MOV     R0,#YEAR
      MOV     R3,#07H
RDTIME1:
      LCALL   RXL_H
      MOV     A,TIMERX
      MOV     @R0,A
      INC R0
     DJNZ     R3,RDTIME2             ;讀完一個字節(jié)數(shù)據(jù)后確認數(shù)據(jù)傳輸
       JMP    RDTIME3                ;若為最后一個字節(jié)數(shù)據(jù)則為NOACK
RDTIME2:
       CALL   ACK
       JMP    RDTIME1
RDTIME3:
       CALL   NOACK
       LCALL   IICSTOP
       CLR  HOUR.7 ;小時的最高位在24小時制時沒有用,如果是12小時制請刪掉此行.
RDTIME_RET:
       RET

ERR_IICSTOP:
       LCALL   IICSTOP
       RET
ACK:   CLR     TIMETEMP.1
       LCALL   BITOUT
       RET
NOACK: SETB    TIMETEMP.1
       LCALL   BITOUT
       RET
;保存錯誤代碼
;功能:保存MCUIIC接口通信時的錯誤狀態(tài)                                  |
;入口:TIMETEMP.0=ACK位縉?                                              |
;出口:FLAG.0=錯誤代碼                                                  |
ACK_ERR:
       JNB    TIMETEMP.0,ACK_ERR_RET  ;檢查ACK信號是否正常
       SETB   FLAG.0                 ;ACK出錯標(biāo)志位
ACK_ERR_RET:
       RET
;啟用IIC總線
;功能:開啟實時時鐘的IIC總線
;入口:NONE      出口:NONE
;影響資源:NONE
IICSTART:
       CLR    FLAG.1
      SETB     SDA
      SETB     SCL
      LCALL   DELAY3
       JB     SDA,IIC_SDAHI
       SETB   FLAG.1
IIC_SDAHI:
      CLR SDA
       LCALL   DELAY3
      CLR SCL
       LCALL   DELAY3
       RET
;關(guān)閉IIC總線
;功能:關(guān)閉實時時鐘IIC總線
;入口:NONE      出口:NONE
;影響資源:NONE
IICSTOP:CLR      SDA
      SETB     SCL
      LCALL   DELAY3
      SETB     SDA
      LCALL   DELAY3
      RET
;短延時子程序
;功能:延時        入口:NONE            出口:NONE                 
;影響資源:R7,PSW                                                        
DELAY3:  MOV R7,#05H                ;此延時至少10us,
DELAY5:      NOP
      DJNZ     R7,DELAY5
      RET

LONGDELAY:                    ;DELAY 300MS
       MOV    R6,#240
LD0:   MOV    R7,#250       ;5*250*240
LD1:   NOP
       NOP
       NOP
       DJNZ   R7,LD1
       DJNZ   R6,LD0
       RET
;發(fā)送一個字節(jié),由高位到低位發(fā)送
;功能:從MCU發(fā)送一個字節(jié)給實時時鐘,由高位到低位發(fā)送                       
;入口:發(fā)送數(shù)據(jù)放在TIMETX         出口:NONE                             
;影響資源:A,R2,TIMETX                                                
SENDH_L:MOV   A,TIMETX
      MOV     R2,#08H
       CLR    FLAG.0
SENDH_L1:
       MOV     C,ACC.7
       MOV     TIMETEMP.1,C
            LCALL   BITOUT
            RL   A
            DJNZ     R2,SENDH_L1
       LCALL   BITIN
       LCALL   ACK_ERR
       RET
;發(fā)送一個字節(jié),由低位到高位發(fā)送
;功能:從MCU發(fā)送一個字節(jié)給實時時鐘,由低位到高位發(fā)送                       
;入口:發(fā)送數(shù)據(jù)放在TIMETX         出口:NONE                             
;影響資源:A,R2,TIMETX                                                  
SENDL_H:MOV   A,TIMETX
         MOV     R2,#08H
       CLR    FLAG.0
SENDL_H1:
       MOV     C,ACC.0
       MOV     TIMETEMP.1,C
       LCALL   BITOUT
            RR   A
            DJNZ     R2,SENDL_H1
       LCALL   BITIN
       LCALL   ACK_ERR
      RET
;接收一個字節(jié)
;功能:MCUIIC總線接收一個字節(jié),MSB在前,LSB在后                          
;入口:NONE         出口:接收數(shù)據(jù)放在RXBUF                           
;影響資源:AR2,TIMEBITRXBUF                                         
RXH_L: MOV     R2,#08H
RXH_L1:LCALL   BITIN
       MOV     C,TIMETEMP.0
       MOV     ACC.7,C
            RLC A
            DJNZ     R2,RXH_L1
       MOV    TIMERX,A
       RET
;接收一個字節(jié)
;功能:MCUIIC總線接收一個字節(jié),LSB在前,MSB在后                          
;入口:NONE         出口:接收數(shù)據(jù)放在RXBUF                           
;影響資源:A,R2,TIMEBITRXBUF                                         
RXL_H: MOV     R2,#08H
RXL_H1:LCALL   BITIN
       MOV     C,TIMETEMP.0
            RRC      A
            DJNZ     R2,RXL_H1
       MOV    TIMERX,A
       RET
;送出一位數(shù)
;功能:從MCU發(fā)送一位數(shù)給實時時鐘                                         
;入口:發(fā)送位數(shù)放在EEPREM.1      出口:NONE                             
;影響資源:A,TIMETEMP                                                   
BITOUT:
       MOV     C,TIMETEMP.1
      MOV     SDA,C
      LCALL   DELAY3
      SETB     SCL
      LCALL   DELAY3
      CLR SCL
       LCALL   DELAY3
      RET
;讀入一位數(shù)
;功能:MCU從實時時鐘接收一位數(shù)                                          
;入口:NONE      出口:接收位數(shù)放在TIMETEMP.0                           
;影響資源:ATIMETEMP                                                   
BITIN:
       SETB     SDA
       SETB   SCL
            LCALL   DELAY3
            MOV     C,SDA
       MOV     TIMETEMP.0,C
            CLR SCL
       CLR    SDA
       LCALL   DELAY3
      RET
      ORG 0900H
;狀態(tài)異常處理程序
;功能:在干擾嚴重的情況下,時鐘進入異常狀態(tài)的處理                        
;入口:NONE          出口:NONE                                         
;影響資源: A,TIMETX                                                   
TIME_TESTMODE:
TIME_TESTMODE_LOOP:
       LCALL   IICSTART
       JNB    FLAG.1,TIME_TESTMODE_1
       LJMP   ERR_IICSTOP            ;SDA線被箝位為低電平則退出
TIME_TESTMODE_1:
            MOV     TIMETX,#6EH            ;發(fā)送測試模式結(jié)束命令,#6EH
            LCALL   SENDH_L
       LCALL  IICSTOP                ;
       JB     FLAG.0,TIME_TESTMODE_LOOP;ACK信號不正常則重寫.
                                       ;
       RET
;寫狀態(tài)寄存器程序
;功能:讀/寫實時時鐘狀態(tài)寄存器,對其進行設(shè)置                             
;入口:NONE          出口:NONE                                         
;影響資源: A,TIMETX                                                   
TIMESTATUS_INT12:
       LCALL  IICSTART
       JNB    FLAG.1,TIME_SETMODE_1
       LJMP   ERR_IICSTOP            ;SDA線被箝位為低電平則退出
TIME_SETMODE_1:
            MOV     TIMETX,#62H            ;發(fā)送寫時鐘狀態(tài)寄存器命令
            LCALL   SENDH_L
       JNB    FLAG.0,TIME_SETMODE_2
       LJMP   ERR_IICSTOP            ;ACK信號不正常則退出?
TIME_SETMODE_2:
            MOV     TIMETX,#40H            ;24小時進制,
            LCALL  SENDL_H                   ;關(guān)閉/INT1/INT2腳的輸出
       LCALL  IICSTOP                ;
       RET

END

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:72088 發(fā)表于 2018-10-13 19:53 | 只看該作者
高人,比我厲害,我只會寫時鐘,簡單的東西,匯編
回復(fù)

使用道具 舉報

板凳
ID:632961 發(fā)表于 2022-11-4 11:10 | 只看該作者
求電路原理圖,求程序代碼,
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表