找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2558|回复: 5
打印 上一主题 下一主题
收起左侧

51单片机温度控制汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:356269 发表于 2018-6-27 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有大神帮忙看看为什么TEMP地址内一直是00?就是数码管显示一直是00,我没有写进去吗?
比较急,谢谢各位大神

温度控制.7z

34.56 KB, 下载次数: 43

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:360102 发表于 2018-6-27 11:14 | 只看该作者
666,不错啊
回复

使用道具 举报

板凳
ID:356269 发表于 2018-6-27 16:33 | 只看该作者

出不来啊。。啥都没有,表示懵逼不知道哪里出了问题
回复

使用道具 举报

地板
ID:356269 发表于 2018-6-27 16:36 | 只看该作者
抱歉抱歉,为了看看TEMP里是不是空值,我把字码表的第一个从0改成了1,所以显示11,不知道哪里出了问题,求大神指教
回复

使用道具 举报

5#
ID:7485 发表于 2018-6-28 09:56 | 只看该作者
你的编程的思路太乱。
刚刚看了开头一点,你看看我红色文字的部分,仅就你说的设置问题,其余的没看。
        DQ        EQU        P1.7        ;DS18B20控制口 //最好“EQU”改为“BIT”,防止出错,还一目了然。
        LED1          EQU         P2.5
    LED2          EQU         P2.6
    LED         EQU         P3
        FLAG        EQU        30H        //你这样定义的是字节,不是“位”可你下面的程序显示,你应该是“位”。
                                //内部数据存储器20H~2FH单元是可“位操作”空间,你可以使用位地址,
                                //也可以使用“FLAG   BIT  2AH.1” 这样的地址和定义方法。

GEWEI        EQU        29H          //由于上面所说之原因,所以一般尽量少用20H~2FH,留给位操作用。
        SHI            EQU        28H
        XIAOSHU        EQU        27H
        TEMP_TL        EQU        20H  ;低温限值
        TEMP_TH        EQU        21H  ;高温限值
        TEMPH        EQU        22H  ;温度高字节
        TEMPL        EQU        23H  ;温度低字节
        TEMP        EQU        24H
        GREEN   EQU        P2.0
        BLUE    EQU P2.1
        K1        EQU        P1.1
        K2        EQU        P1.2
        K3        EQU        P1.3
        k4  EQU P1.4
;===============================================

MAIN:
        MOV        TEMP_TH,#25
        MOV        TEMP_TL,#01
        CLR K1       //可以使用一句“MOV  P1,   #00”替代这5句,简洁,节省空间
        CLR K2
        CLR K3
        CLR K4
        CLR P1.5
        CLR DQ
        CLR GREEN
        CLR BLUE
        ACALL        WR_THL                ;写入高温限值和低温限值寄存器
        ACALL        WR_PROM
        ACALL        RE_PROM         ;从EEPROM中返回高温限值和低温限值
        ACALL        RESET                 ;初始化1820
        JB            FLAG,LOOP       
        ACALL        ERROR                ;报错
               
LOOP:
        ACALL        READ_T                ;1820读取温度
    ACALL   TURN                ;转换
        ACALL        DISP_TEMP        ;数码管显示实时温度
        ACALL        KEYSCAN                ;键盘设定高温限值和低温限值
        ACALL        WR_THL       
        ACALL   WR_PROM
        ACALL        TEMP_COMP
        JMP        LOOP

;=============启动1820读取温度====================

READ_T:
        SETB        DQ
        ACALL        RESET
        JB        FLAG,READ_T1
        RET
READ_T1:
        MOV        A,#0CCH
        ACALL        WR_1820
        MOV        A,#44H
        ACALL        WR_1820
        ACALL        RESET
        MOV        A,#0CCH
        ACALL        WR_1820
        MOV        A,#0BEH
        ACALL        WR_1820
        ACALL        READ_1820
        RET
;=========把高温和低温限值写入寄存器=================
WR_THL:       
JB        FLAG,WR_HL   //上电重启时,FLAG=0,所以一直不会跳转,另外,用按键设置温度上下限时,也要考虑这一点,是否应该按你的要求先允许写,写完后关闭(你是否想FLAG=0转移,应该用JNB)
        RET
WR_HL:        ACALL        RESET
        MOV        A,#0CCH
        ACALL        WR_1820
        MOV        A,#4EH
        ACALL        WR_1820
        MOV        A,TEMP_TH
        ACALL        WR_1820
        MOV        A,TEMP_TL
        ACALL        WR_1820  //写完以后设置“FLAG”,禁止再写(按键设置时先解除)
        RET
;==========把高温和低温限值写入EEPROM=================
WR_PROM:ACALL        RESET
        MOV        A,#0CCH
        ACALL        WR_1820
        MOV        A,#48H
        ACALL        WR_1820
        RET
;========把EEPROM的值返回到高温和低温限值寄存器========
RE_PROM:
        ACALL        RESET
        MOV        A,#0CCH
        ACALL        WR_1820
        MOV        A,#0B8H
        ACALL        WR_1820
        RET
;===========初始化1820==================================
RESET:
        SETB         DQ
        NOP
        CLR        DQ
        MOV        R5,#250
        DJNZ        R5,$
        SETB        DQ            
        NOP       
        MOV        R5,#25H
RESET1:        JNB        DQ,FLAG1
        DJNZ        R5,RESET1
        JMP        NDQ
FLAG1:        SETB        FLAG
        MOV        R5,#100
        DJNZ        R5,$
        SETB        DQ
        MOV        R5,#100
        DJNZ        R5,$
        JMP        RETU
NDQ:
        CLR        FLAG
        ACALL        ERROR
RETU:
        SETB        DQ
        RET
;=============1820写字节========================
WR_1820:
        MOV        R6,#8
        CLR        C       
WR1:
        CLR        DQ
        MOV        R5,#7
        DJNZ        R5,$
        RRC        A
        MOV        DQ,C
        MOV        R5,#25
        DJNZ        R5,$
        SETB        DQ
        NOP
        NOP
        DJNZ        R6,WR1
        SETB        DQ
        RET
;==============读取1820数据======================

READ_1820:
        MOV        R2,#4
        MOV        R1,#TEMPL       
RE1:
        MOV        R6,#8
RE2:
        SETB        DQ
        NOP
        CLR        DQ
        CLR        C
        NOP
        NOP
        SETB        DQ
        MOV        R5,#9
        DJNZ        R5,$
        MOV        C,DQ
        MOV        R5,#24
        DJNZ        R5,$
        RRC        A
        DJNZ        R6,RE2
        MOV        @R1,A
        DEC        R1
        DJNZ        R2,RE1
        RET
;===========转换数据=============================

TURN:
        MOV        XIAOSHU,TEMPL         ;保存TEMPL值,后面用于取低4位转换小数部分
        MOV        A,TEMPL
        MOV        C,16                 ;22H的位寻址
        RRC        A
        MOV        C,17
        RRC        A
        MOV        C,18
        RRC        A
        MOV        C,19
        RRC        A
        MOV        TEMP,A
        MOV        A,XIAOSHU
        ANL        A,#00001111B
        MOV        XIAOSHU,A           
        RET
;========键盘扫描=============================
KEYSCAN:
        JB     K1, SET_H     ;按下K1,设定高限值
KEYSCAN1:               
        JB     K4, SET_L     ;按下K4,设定低限值       
RETUN:
        ACALL        WR_THL                ;把高温限值和低温限值写入RAM
        ACALL  WR_PROM                ;限值复制到EEPROM中
        RET
;------------调高限值----------------------

SET_H:                          
    MOV  60H,P1
        ACALL        DELAY20       
KEY:
        JNB  K1,RETUN
        MOV  A,P1
        CJNE A,60H,KEY1
        JMP  KEY
KEY1:
    XRL A,60H
    JB ACC.2,KEYHH
    JB ACC.3,KEYHL
        JB ACC.1,RETUN               
KEYHH:       
    INC            TEMP_TH          ;按下K2,值加1
        CPL     P3.0
        JMP     SET_H     
KEYHL:  
        DEC         TEMP_TH          ;按下K3,值减1
        CPL     P3.1
    JMP                SET_H
;-------------调低温限值------------------------------
SET_L:                          
    MOV  61H,P1
        ACALL        DELAY20       
KEY2:
    JNB  K4,RETUN
        MOV  A,P1
        CJNE A,61H,KEY3
        JMP  KEY2
KEY3:
    XRL A,61H
    JB ACC.2,KEYLH
    JB ACC.3,KEYLL
        JB ACC.4,RETUN
KEYLH:       
    INC            TEMP_TL          ;按下K2,值加1
        CPL     P3.2
        JMP     SET_L     
KEYLL:  
        DEC         TEMP_TL          ;按下K3,值减1
        CPL     P3.3
    JMP                SET_L
       
;==============温度比较======================================

TEMP_COMP:
        CLR C
        MOV        A,TEMP_TH
        SUBB        A,TEMP
        JC LEDBLUE
        MOV        A,TEMP
        SUBB        A,TEMP_TL
        JC LEDGREEN
        RET
LEDBLUE:
        SETB BLUE
        RET
LEDGREEN:
        SETB GREEN
        RET
;===============报错============================
ERROR:       
        SETB P1.5
        RET
;=================数码显示======================
DISP_TEMP:
        MOV           LED,#0C8H
        MOV           A,TEMP
        MOV           B,#10
        DIV    AB
        MOV           SHI,A
        MOV           GEWEI,B       
        MOV           DPTR,#SHUTAB       
        MOV    A,SHI     
        MOVC   A,@A+DPTR
        SETB   P2.6           
    MOV    LED,A
        ACALL  DELAY20
        CLR    P2.6
        MOV    A,GEWEI            
        MOVC   A,@A+DPTR
        SETB   P2.7           
    MOV    LED,A
        ACALL  DELAY20
        CLR    P2.7
        RET
SHUTAB:        DB        0F9H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H                  
DELAY20:
        MOV        R5,#50
DLY:
        MOV        R6,#100
        DJNZ        R6,$
        DJNZ        R5,DLY
        RET

            
END                  
回复

使用道具 举报

6#
ID:331163 发表于 2018-6-28 10:24 | 只看该作者
厉害了   就是不懂  哎
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表