⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1302-12232f.asm

📁 时钟温度计(用1302、18B20、12232F显示器)    汇编代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;****************************************************************;
;                 时钟\温度计程序( 用1302\18B20\12232F显示)                    ;
;                                                                ;
;              AT89C52/12M晶振/编写者LRM/2005.07.10               ;
;                                                                ;
;****************************************************************;
;
; 从1302中读出的数据放在 52H(小时)51H(分钟)50H(秒)
; 时间显示缓冲单元:70H-79H: 72H-73H(45H-44H)小时,75H-76H(43H-42H)分钟,78H-79H(41H-40H)秒
; 温度显示缓冲单元:60H-67H: :\空\百\十\个\小数点\小数位\空\℃
; 定时器T1为时间调整时候闪烁用。
; 显示式样第一行为:    时间: 15:38:12
; 显示式样第二行为:    温度: 100.5 ℃
;*****************定义*********************;
                            PLAYFLG  EQU P3.4     ; 主程序运行指示灯用
                               SCLK  EQU P1.0      ; 1302时钟口,1302第7脚
                                IO   EQU P1.1      ;  数据口,1302第6脚
                                RST  EQU P1.2      ;  使能口,1302第5脚
                              SPEAK  BIT P0.2     ;
                               KEY2  BIT P3.2
                             KEYSW0  EQU  P2.6     ;  调时按键
                             KEYSW1  EQU  P2.7     ;  加1按键
                                hour DATA 52H      ;  1302读出时
                              mintue DATA 51H      ;  1302读出分
                              second DATA 50H      ;  1302读出秒
                         DS1302_ADDR DATA 3EH      ;  1302需操作的地址数据存放
                         DS1302_DATA DATA 3DH      ;  1302读出或需写入的数据存放
                         INTCON      DATA 3CH      ;  闪烁中断计时用
                         CON_DATA    DATA 06H      ;  闪烁时间=65*6=0.39秒
                         CON1S       DATA 3BH      ;  1秒计时用,温度1-2秒测量一次
                         CON1S_DATA  DATA 0FH      ;  测温间隔定时值65*15ms
                         FLG1S       EQU  07H      ;  1秒到标志
;************LCD定义***********************;
                            LAMPBLAK EQU        P1.4          ;背光灯控制,=0时开,=1时关.
                            CS	     EQU	P1.5          ;液晶使能,=1操作,=0禁止.
                            SID      EQU	P1.6          ;液晶串行数据输入口
                            CLK	     EQU	P1.7          ;液晶串行操作时钟口
;温度部分定义
                        TEMPHEAD        EQU	30H		;
	                TEMPL		DATA	26H
	                TEMPH		DATA	27H
	                TEMPHC		DATA	28H
	                TEMPLC		DATA	29H
                        TEMPDIN         BIT     P1.3
;
        VSDA            BIT P3.6 ; EEPROM数据传送口,24C16的5脚
        VSCL            BIT P3.5 ; EEPROM时钟传送口 ,24C16的6脚
        BDATA           DATA 2AH  ;百十个小数位比较用
        SDATA           DATA 2BH
        GDATA           DATA 2CH
        XSDATA          DATA 2DH           
;
;*********************程序入口*********************;
;
                                  ORG 0000H
                                  LJMP  START
                                  ORG 0003H
                                  RETI
                                  ORG 000BH
                                  LJMP INTT0
                                  ORG 0013H
                                  RETI
                                  ORG 001BH
                                  LJMP INTT1
                                  ORG 0023H
                                  RETI
                                  ORG 002BH
                                  RETI
;
;*****************;主程序;*********************;
;
                START:
                          CLR  CS                ;液晶操作禁止
	                  mov   SP, #80H         ;堆栈在80H上
                          MOV  70H,#0AH          ;放北京时间后的“:”代码字
                          MOV  71H,#0FH          ;空
                          MOV  74H,#0AH          ; ": "
                          MOV  77H,#0AH          ; ": "
                          LCALL	READTEMP	 ;上电时先温度转换一次
                          MOV TMOD,#11H  ;计数器1,方式1
                          MOV TL1,#00H
                          MOV TH1,#00H
                          MOV TL0,#00H    ;1秒定时用
                          MOV TH0,#00H
                          MOV INTCON,#CON_DATA
                          CLR  00H        ;清闪烁标志
                          CLR  01H        ;清闪烁标志
                          CLR A                           ;
                          MOV R0, A                       ;从24C16中 0000H开始读出4个字节放在40H始单元
                          MOV R1, #BDATA                  ;
                          MOV R7, #04H                    ;
                          LCALL C16SERD                   ;
                          SETB EA
                          MOV DS1302_ADDR,#8EH
                          MOV DS1302_DATA,#00H ;允许写1302
                          LCALL WRITE
                          MOV    DS1302_ADDR,#80H
                          MOV    DS1302_DATA,#00H ;1302晶振开始振荡
                          LCALL  WRITE
                          MOV  DS1302_ADDR,#90H
                          MOV  DS1302_DATA,#0A6H;1302充电,充电电流1.1MA
                          LCALL  WRITE
                          MOV    DS1302_ADDR,#8EH
                          MOV    DS1302_DATA,#80H ;禁止写入1302
                          LCALL  WRITE
;
       	                  LCALL SETUP            ;LCD初始化
                          LCALL LOGON            ;开机显示画面
                          LCALL TIME             ;上行显示"时间: 00:00:00"
                          LCALL TEMPP            ;下行显示“温度:
                          SETB  ET0
                          SETB  TR0
                          CLR   FLG1S
                          MOV   CON1S,#CON1S_DATA
                          AJMP  MAIN11
;以下主程序
              MAIN1:      MOV    DS1302_ADDR,#85H  ;读出小时
                          LCALL   READ
                          MOV     hour,DS1302_DATA
                          MOV    DS1302_ADDR,#83H  ;读出分钟
                          LCALL   READ
                          MOV    mintue,DS1302_DATA
                          MOV    DS1302_ADDR,#81H  ;读出秒
                          LCALL  READ
                          MOV   second,DS1302_DATA
                          ;
                          MOV    R0,hour ;小时分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    73H,R1   ;时个位
                          MOV    44H,R1
                          MOV    72H,R2   ;时十位
                          MOV    45H,R2
                          MOV    R0,mintue ;分钟分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    76H,R1   ;时个位
                          MOV    42H,R1
                          MOV    75H,R2   ;时十位
                          MOV    43H,R2
                          MOV    R0,second  ;秒分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    79H,R1  ;秒个位
                          MOV    40H,R1
                          MOV    78H,R2  ;秒十位
                          MOV    41H,R2
                          LCALL  TIMEUP                  ;时间显示涮新一次
                          JNB    KEYSW0,SETGG  ;调整时间控制键
                          JNB    KEY2,BAOJSET ;设置温度报警
                          JBC    FLG1S,MAIN11
                          AJMP   MAIN1
SETGG:                    LJMP   SETG
MAIN11:
                          LCALL	READTEMP1		;读出温度值子程序
                          LCALL	CONVTEMP		;温度BCD 码计算处理子程序
                          LCALL DISPTEMP                ;温度值显示涮新子程序
                          LCALL BAOJ                    ; 报警处理
                          LCALL	READTEMP                ;再发一次转换温度命令
                          SETB  TR0
                          SETB  ET0
                          CPL   PLAYFLG                 ;程序运行指示灯
                          LJMP MAIN1
;
        BAOJSET:     LCALL   DELAY1
                     JNB     KEY2,BAOJSET
                     CLR    ET0
                     CLR    EA
                     CLR    TR0
                     MOV  A,#90H	       ;第二行左第一个字开始
	             LCALL WRITE_COM
	             MOV  DPTR,#CHINESE4       ;16*16点阵“报警-----”
	             LCALL WRITE_HZ
                     MOV    66H,XSDATA
                     MOV    64H,GDATA
                     MOV    63H,SDATA
                     MOV    62H,BDATA
                     MOV     60H,#0AH                ;  :
                     MOV     61H,#0FH                ;  空
                     MOV     65H,#11H                ;  小数点.
                     MOV     67H,#0FH                ;  空
                     LCALL   TEMPUP                 ;显示报警温度
                     MOV     R0,#62H
           SET10:
                    JNB     KEY2,SET2
                    JNB     KEYSW0,SAFEADD1
                    JNB     KEYSW1,SAFESUBB1
                    LCALL   TEMPUP                 ;显示报警温度
                    LJMP    SET10
           SET2:    LCALL   DELAY1
                    JNB     KEY2,SET2
                    INC     R0
                    MOV     A,R0
                    CLR     C
                    CJNE    A,#65H,SET101
        SET101:     JC      SET10
                    AJMP    SETOUT
;
       SAFEADD1:    LCALL   DELAY1
                    JNB     KEYSW0,SAFEADD1
                    MOV     A,@R0
                    LCALL   ADD11
                    MOV     @R0,A
                    LJMP    SET10
       SAFESUBB1:   LCALL   DELAY1
                    JNB     KEYSW1,SAFESUBB1
                    MOV     A,@R0
                    LCALL   SUBB11
                    MOV     @R0,A
                    LJMP    SET10
;
       SETOUT:      MOV    BDATA,62H
                    MOV    SDATA,63H
                    MOV    GDATA,64H
                    MOV    XSDATA,66H
                    CLR A            ; 把4 字节写入24C16的0000H开始地址中
                    MOV R0, A        ;
                    MOV R1, #BDATA   ;
                    MOV R7, #4       ;R7中的最大数据在1-16
                    LCALL C16PAWR    ;
	            LCALL TEMPP
                    SETB    ET0
                    SETB     EA
                    SETB    TR0
MAIN111:            LJMP    MAIN1
;
ADD11:
                    ADD    A,#01H
                    CJNE   A,#0AH,OLOOP
       OLOOP:       JC    OUTT
                    MOV   A,#00H
       OUTT:        RET
;
       SUBB11:
                    JZ     PPP1
                    DEC    A
       OUTP:        RET
       PPP1:        MOV    A,#09H
                    AJMP   OUTP
;******************公历设置程序*********************;
;
                  SETG :   LCALL DELAY1
                           JB   KEYSW0,MAIN111
                           SETB TR1
                           SETB ET1
                           CLR  TR0
                           CLR  ET0
                           MOV  78H,#00H         ;调时时秒位为0
                           MOV  79H,#00H         ;调时时秒位为0
                           MOV  40H,#00H         ;调时时秒位为0
                           MOV  41H,#00H         ;调时时秒位为0
                           MOV DS1302_ADDR,#8EH
                           MOV DS1302_DATA,#00H  ;允许写1302
                           LCALL WRITE
                           MOV DS1302_ADDR,#80H
                           MOV DS1302_DATA,#80H  ;1302停止振荡
                           LCALL WRITE
                GWAIT8:    LCALL DELAY1
                           JNB KEYSW0,GWAIT8
;
                 SETG9:    JNB KEYSW0,SETG10
                           JNB KEYSW1,GADDHOUR
                           AJMP SETG9
            GADDHOUR:      MOV R7,52H  ;小时加一
                           LCALL ADD1
                           MOV 52H,A
                           CJNE A,#24H,GADDHOUR11
            GADDHOUR11:    JC GADDHOUR1
                           MOV 52H,#00H
              GADDHOUR1:  MOV DS1302_ADDR,#84H ;小时值送人1302
                           MOV DS1302_DATA,52H
                           LCALL WRITE
                           MOV R0,52H
                           LCALL DIVIDE ;小时值分离送显示缓存
                           MOV 73H,R1
                           MOV 44H,R1
                           MOV 72H,R2
                           MOV 45H,R2
                 WAITT5:
                           JNB KEYSW1,WAITT5
                           AJMP SETG9

               SETG10:     SETB 01H   ;调分时候闪标志
              GWAIT10:     LCALL DELAY1
                           JNB KEYSW0,GWAIT10
               SETG11:
                           JNB KEYSW0,SETGOUT
                           JNB KEYSW1,GADDMINTUE
                           AJMP SETG11
             GADDMINTUE:   MOV R7,51H    ;分钟加一
                           LCALL ADD1
                           MOV 51H,A
                           CJNE A,#60H,GADDMINTUE11
          GADDMINTUE11:    JC GADDMINTUE1
                           MOV 51H,#00H
         GADDMINTUE1:      MOV DS1302_ADDR,#82H ;分钟值送人1302
                           MOV DS1302_DATA,51H
                           LCALL WRITE
                           MOV R0,51H
                           LCALL DIVIDE ;分钟值分离送显示缓存
                           MOV 76H,R1
                           MOV 42H,R1
                           MOV 75H,R2
                           MOV 43H,R2
                 WAITT6:
                           JNB KEYSW1,WAITT6
                           AJMP SETG11
              SETGOUT:     LCALL DELAY1
                           JNB KEYSW0,SETGOUT
                           MOV    DS1302_ADDR,#80H
                           MOV    DS1302_DATA,#00H ;1302晶振开始振荡
                           LCALL  WRITE
                           MOV    DS1302_ADDR,#8EH
                           MOV    DS1302_DATA,#80H ;禁止写入1302
                           LCALL  WRITE
                           CLR 00H
                           CLR 01H
                           CLR ET1  ;关闪中断
                           CLR TR1
                           SETB TR0
                           SETB ET0
                           LJMP MAIN1
;以下中断程序用于1秒定时用
INTT0:
                          DJNZ  CON1S,INTOUT
                          CLR   TR0
                          CLR   ET0
                          MOV   CON1S,#CON1S_DATA
                          SETB  FLG1S
INTOUT:                   RETI
;
BAOJ:               SETB   SPEAK
                    MOV    A,62H
                    CJNE   A,#0FH,BB3
                    MOV    A,#00H
                    CLR    C
BB3:                CJNE   A,BDATA,BAO1
                    MOV    A,63H
                    CJNE   A,#0FH,BB2
                    MOV    A,#00H
                    CLR    C
BB2:                CJNE   A,SDATA,BAO1
                    MOV    A,64H
                    CLR    C
                    CJNE   A,GDATA,BAO1
                    MOV    A,66H
                    CLR    C
                    CJNE   A,XSDATA,BAO1
        BAOJING:    CLR    SPEAK
            BBAO:   RET
;
         BAO1:      JC     BBAO
                    LJMP   BAOJING
;
;****************闪动调时程序*********************;
;
                 INTT1:    PUSH ACC
                           PUSH PSW
                           DJNZ INTCON,GFLASHOUT
                           MOV  INTCON,#CON_DATA
                 GFLASH:   CPL 00H
                           JB 00H,GFLASH5
                           MOV 72H,45H           ;全显示
                           MOV 73H,44H
                           MOV 75H,43H
                           MOV 76H,42H
                           MOV 78H,41H
                           MOV 79H,40H
             GFLASHOUT:    LCALL TIMEUP
                           POP PSW
                           POP ACC
                           RETI
;
                GFLASH5:   JB 01H,GFLASH6 ;调小时闪
                           MOV 72H,#0FH
                           MOV 73H,#0FH
                           AJMP GFLASHOUT
             GFLASH6:      MOV 75H,#0FH  ;调分钟闪
                           MOV 76H,#0FH
                           AJMP GFLASHOUT
;
;*******************加一程序***************;
;
                  ADD1:    MOV A,R7
                           ADD A,#01H
                           DA A
                           RET
;
;*****************分离程序**********************;
;
                 DIVIDE:   MOV A,R0
                           ANL A,#0FH
                           MOV R1,A
                           MOV A,R0
                           SWAP A
                           ANL A,#0FH
                           MOV R2,A
                           RET
;
;****************写1302程序****************;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -