AT89C52单片机八路温度检测汇编代码

翻出来的本科时单片机学科的一个课程设计,花了五天时间编写的汇编程序。

;-------------标识定义----------------------------- 
IN0     EQU     7FF8H               ;ad输入通道 
ZXK     EQU     0FFDCH              ;字形口 
ZWK     EQU     0FFDDH              ;字位口 
XS      EQU     23H                 ;显示缓存小数位 
ZG      EQU     22H                 ;个位 
ZS      EQU     21H                 ;十位 
ZB      EQU     20H                 ;百位 
LS      EQU     24H                 ;路数 
T00     EQU     25H                 ;AD读入温度 
T11     EQU     26H                 ;温度限缓存 
T       EQU     27H                 ;数值数码转换入口 
TEMPH0   EQU 30H                 ;温度上限基址 
TEMPL0  EQU     40H                 ;温度下限基址 
;R0---------------------------------温度上限指针 
;R1---------------------------------温度下限指针 
;R2---------------------------------T0中断时间中50次 
;R3---------------------------------8路 
;R4---------------------------------AD中短延时 
;-------------主程序------------------------------- 
        ORG     0000H 
        LJMP    MAIN 
        ORG     0003H 
        LJMP    INT_0 
        ORG     000BH 
        LJMP    T_0 
        ORG     0013H 
        LJMP    INT_1 
        ORG     0030H 
MAIN:   MOV     SP,     #60H       ;初始化 
        MOV     R2,     #50        ;50*20ms 
        MOV     XS,     #0 
        MOV     ZG,     #0 
        MOV     ZS,     #0 
        MOV     ZB,     #0 
        CLR     F0 
        MOV     TMOD,   #01H 
        MOV     TH0,    #0D8H      ;20ms 
        MOV     TL0,    #0F0H 
        SETB    EA 
        SETB    ET0 
        SETB    EX0 
        SETB    EX1 
       ;--------------------- 
        SETB    TR0               ;检查LED是否损坏 
        CLR    P1.4 
         CLR  P1.5 
         LCALL   DISPLAY 
        CLR     TR0 
         SETB         P1.4 
         SETB         P1.5 
        ;-------------------- 
LOOP0:  MOV     DPTR,   #IN0      ;传A/D基地址(IN0) 
        MOV     LS,     #00H 
        MOV     R3,     #08H 
        ;--------------------     ;调用A/D读入子程序 
LOOP1:  LCALL   READAD 
        MOV     T00,    A 
        LCALL   ALERT                    ;调用报警判断子程序 
CONTL:  MOV     T,      A 
        SETB    TR0 
        LCALL   BIT_BCD           ;调用数据数码转换程序 
        LCALL   DISPLAY           ;调用温度显示程序 
        INC     DPTR 
        INC     LS 
        DJNZ    R3,     LOOP1 
         SETB         P1.6             ;喂狗 
        LJMP    LOOP0 
;-------------报警--------------------------------- 
ALERT:  PUSH    ACC               ;入口参数T00 
        MOV     R0,     #TEMPH0 
        MOV     R1,     #TEMPL0 
        ;----------------- 
        MOV     A,      LS        ;T>TH的情况 
        ADD     A,      R0 
        MOV     R0,     A 
        MOV     B,      @R0 
        MOV     A,      T00 
        CJNE    A,      B,  NEXTH 
NEXTH:  JC      CONTH 
        LCALL   RED 
        ;----------------- 
CONTH:  MOV     A,      LS        ;T
  
  
   
   7,则LS=0 
        CJNE    A,      #08H,  INEXT1 
INEXT1: JC      INEXT2 
        MOV     LS,     #00 
INEXT2: MOV     T,      T11 
        LJMP  IGOTO 
        ;----------------- 
IKEY4:  INC     T11 
        MOV     A,      T11      ;若T11>=FF,则T11=0 
        CJNE    A,      #0FFH, INEXT3 
INEXT3: JC      INEXT4 
        MOV     T11 ,   #00H 
INEXT4: LJMP  INEXT6 
        ;----------------- 
IKEY5:  DEC     T11 
        MOV     A,      T11      ;若T11<0,则T11=FF 
        CJNE    A,      #00H,  INEXT5 
INEXT5: JNC     INEXT6 
        MOV     T11,    #0FFH 
INEXT6: MOV     A,      LS 
        ADD     A,      R0 
        MOV     R0,     A 
        MOV     @R0,    T11 
        MOV     T,      T11 
IGOTO:  LCALL   BIT_BCD 
ILY:  MOV         R7,    #100 
LP0:  SETB         F0 
        LCALL   DISPLAY 
             DJNZ R6,    LP0 
             DJNZ R7,    ILY 
        LJMP    KEY 
IKEY6:  RETI 
;--------------温度下限设置------------------------ 
INT_1:  MOV     LS,     #00H     ;默认路数 0 
        MOV     T11,    #40H     ;默认温度上限 75.0 
        MOV     R0,     TEMPL0 
        ;----------------- 
KEY:    MOV     A,      #0FFH 
        MOV     P1,     A 
        MOV     C,      P1.0 
        JNC     KEY3 
        MOV     C,      P1.1 
        JNC     KEY4 
        MOV     C,      P1.2 
        JNC     KEY5 
        MOV     C,      P1.3 
        JNC     KEY6 
        LJMP  LY 
        ;----------------- 
KEY3:   INC     LS 
        MOV     A,      LS       ;若LS>7,则LS=0 
        CJNE    A,      #08H,  NEXT1 
NEXT1:  JC      NEXT2 
        MOV     LS,     #00 
NEXT2:  MOV     T,      T11 
        LJMP  GOTO 
        ;----------------- 
KEY4:   INC     T11 
        MOV     A,      T11      ;若T11>=FF,则T11=0 
        CJNE    A,      #0FFH, NEXT3 
NEXT3:  JC      NEXT4 
        MOV     T11 ,   #00H 
NEXT4 : LJMP  INEXT6 
        ;----------------- 
KEY5:   DEC     T11 
        MOV     A,      T11      ;若T11<0,则T11=FF 
        CJNE    A,      #00H,  NEXT5 
NEXT5:  JNC     NEXT6 
        MOV     T11,    #0FFH 
NEXT6:  MOV     A,     LS 
        ADD     A,     R0 
        MOV     R0,    A 
        MOV     @R0,   T11 
        MOV     T,     T11 
GOTO:   LCALL   BIT_BCD 
LY:     MOV       R7,    #100 
        MOV          R6,    #100 
LP:        SETB F0 
        LCALL   DISPLAY 
             DJNZ R6,    LP 
             DJNZ R7,       LY 
        LJMP    KEY 
KEY6:   RETI 
        END 

  
  


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值