找回密码
 立即注册

QQ登录

只需一步,快速开始

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

温度箱的自动设计系统 单片机汇编程序

[复制链接]
跳转到指定楼层
楼主



单片机汇编程序:
  1. TEMPER_L EQU 31H          ;用于保存读出温度低字节        
  2.               TEMPER_H EQU 30H                  ;用于保存读出温度高字节
  3.               TEMPER_SET EQU 32H             ;用于保存设定的预期温度
  4.               FLAG EQU 33H                                   ;是否检测到DS18B20标志位
  5.               ORG 0000H                    
  6.               LJMP MAIN                  
  7.               ORG 0030H
  8. MAIN:
  9.               MOV R0,#20                                  ;系统默认预期温度为20℃
  10. START:
  11.               CLR P2.6                                        ;点亮“实时温度”指示灯
  12.               SETB P2.5                                      ;熄灭“设定温度”指示灯
  13.               JNB P2.2,SELSUB                        ;是进入温度设定
  14.               LCALL GET_TEMPER                 ;调用温度获取子程序
  15.               LCALL COMPARE                       ;调用温度比较子程序
  16.               LCALL DISPLAY                         ;调用显示子程序
  17.               LCALL KEY                                  ;调用显示切换子程序
  18.               LJMP START
  19. SELSUB:
  20.               MOV A,R0
  21.               MOV B,#10
  22.               DIV AB
  23.               MOV R1,A                                     ;温度十位存R1
  24.               MOV R2,B                                     ;温度个位存R2
  25.               LCALL DISPLAY                         ;显示温度
  26.               JNB P2.3,INC0
  27.               JNB P2.4,DEC0
  28.               JB P2.2,BACK
  29.               LJMP SELSUB
  30.        INC0:                                                     ;温度加1℃
  31.               MOV A,R1
  32.               CJNE A,#63H,ADD0                            ;温度是否为99℃,不是则跳到ADD0
  33.               MOV R1,#00H
  34.        INC1:
  35.               LCALL DELAY1                          ;延时显示
  36.               JNB P2.3,INC1                              ;按键是否松开,松开则程序往下执行
  37.               LJMP SELSUB
  38.        ADD0:
  39.               INC R0                                          
  40.               LCALL DELAY1
  41.               LJMP SELSUB
  42.        DEC0:                                                    ;温度减1℃
  43.               MOV A,R1
  44.               JZ SETR1                                       ;温度是0℃则跳到SETR1
  45.               DEC R0
  46.        DEC1:   
  47.               LCALL DELAY1
  48.               JNB P2.4,DEC1                             ;按键是否松开,松开则程序往下执行
  49.               LJMP SELSUB
  50.        SETR1:
  51.               MOV R1,#63H
  52.               LCALL DELAY1
  53.               LJMP SELSUB
  54.        BACK:
  55.               LJMP START
  56. GET_TEMPER:
  57.               SETB P1.2
  58.               LCALL SET_1820                         ;DS18B20初始化
  59.               JB FLAG,TSS2                              ;检测到DS18B20跳到TSS2
  60.               RET
  61.        TSS2:
  62.               MOV A,#0CCH                             ;跳过ROM匹配
  63.               LCALL WRITE_1820                   ;写DS18B20子程序
  64.               MOV A,#44H                                 ;发出温度转换命令
  65.               LCALL WRITE_1820
  66.               LCALL DISPLAY                         ;用显示温度来等待AD转换结束
  67.               LCALL SET_1820
  68.               MOV A,#0CCH                             ;跳过ROM匹配
  69.               LCALL WRITE_1820
  70.               MOV A,#0BEH                              ;发出读温度命令
  71.               LCALL WRITE_1820
  72.               LCALL READ_1820                            ;读DS18B20的温度数据
  73.               MOV A,TEMPER_L                     
  74.               MOV R3,#4
  75.        L1:
  76.               SETB C
  77.               RRC A
  78.               DJNZ R3,L1
  79.               MOV TEMPER_L,A
  80.               MOV A,TEMPER_H
  81.               MOV R3,#4
  82.        L2:
  83.               SETB C
  84.               RLC A
  85.               DJNZ R3,L2
  86.               ANL A,TEMPER_L
  87.               MOV R7,A                                     ;读出的温度转化问摄氏温度存R7中
  88.               MOV B,#10
  89.               DIV AB
  90.               MOV R1,A                                     ;读出的温度十位存R1
  91.               MOV R2,B                                     ;读出的温度个位存R2
  92.               RET
  93.        SET_1820:                                             ;DS18B20复位初始化子程序
  94.               SETB P1.2
  95.               NOP
  96.               CLR P1.2
  97.               MOV R3,#3                                    ;主机发出延时537微秒的复位低脉冲
  98.        TSR1:
  99.               MOV R4,#107
  100.               DJNZ R4,$
  101.               DJNZ R3,TSR1
  102.               SETB P1.2                                      ;然后拉高数据线
  103.               NOP
  104.               NOP
  105.               NOP
  106.               MOV R4,#25H
  107.        TSR2:
  108.               JNB P1.2,TSR3                              ;等待DS18B20回应
  109.               DJNZ R4,TSR2
  110.               LJMP TSR4                                    ;延时
  111.        TSR3:
  112.               SETB FLAG                                   ;置标志位,表示DS18B20存在
  113.               LJMP TSR5
  114.        TSR4:
  115.               CLR FLAG                                    ;清标志位,表示DS18B20不存在
  116.               LJMP TSR7
  117.        TSR5:
  118.               MOV R4,#117
  119.        TSR6:
  120.               DJNZ R4,TSR6                              ;时序要求延时一段时间
  121.        TSR7:
  122.               SETB P1.2
  123.               RET
  124. WRITE_1820:
  125.               MOV R3,#8                                    ;一共8位数据
  126.               CLR C
  127.        WR1:
  128.               CLR P1.2
  129.               MOV R4,#6
  130.               DJNZ R4,$
  131.               RRC A
  132.               MOV P1.2,C
  133.               MOV R4,#23
  134.               DJNZ R4,$
  135.               SETB P1.2
  136.               NOP
  137.               DJNZ R3,WR1
  138.               SETB P1.2
  139.               RET
  140. READ_1820:                                                ;将温度高位和地位从DS18B20中读出
  141.               
  142.               MOV R4,#8
  143.        RE01:
  144.               CLR C
  145.               SETB P1.2
  146.               NOP
  147.               NOP
  148.               CLR P1.2
  149.               NOP
  150.               NOP
  151.               NOP
  152.               SETB P1.2
  153.               MOV R6,#4
  154.               DJNZ R6,$
  155.               MOV C,P1.2
  156.               RRC A
  157.               MOV R6,#30
  158.               DJNZ R6,$
  159.               DJNZ R4,RE01
  160.               MOV TEMPER_L,A                      ;地位存入31H
  161.               MOV R4,#8
  162.        RE02:
  163.               CLR C
  164.               SETB P1.2
  165.               NOP
  166.               NOP
  167.               CLR P1.2
  168.               NOP
  169.               NOP
  170.               NOP
  171.               SETB P1.2
  172.               MOV R6,#4
  173.               DJNZ R6,$
  174.               MOV C,P1.2
  175.               RRC A
  176.               MOV R6,#30
  177.               DJNZ R6,$
  178.               DJNZ R4,RE02
  179.               MOV TEMPER_H,A                            ;高位存入32H
  180.               RET
  181. COMPARE:                                                  ;比较温度子程序
  182.               MOV TEMPER_SET,R0
  183.               MOV A,R7
  184.               CJNE A,TEMPER_SET,COMP     ;设定温度与实时温度不等则跳COMP
  185.               SETB P1.0                                      ;关加热器
  186.               SETB P1.1                                      ;关制冷器
  187.               RET
  188.        COMP:
  189.               MOV A,R7                                     ;实时温度存入A
  190.               MOV B,R0                                     ;设定温度存入B
  191.               DIV AB                                                 ;A除以B,商给A
  192.               CJNE A,#0H,COMP1                    ;若A不等于0,即实时温度高,跳转
  193.               SETB P1.1                                      ;关制冷器
  194.               CLR P1.0                                        ;开加热器
  195.               LJMP EXIT
  196.        COMP1:
  197.               SETB P1.0                                      ;关加热器
  198.               CLR P1.1                                        ;开制冷器
  199.        EXIT:
  200.               RET
  201. DISPLAY:                                                    ;显示子程序
  202.               MOV DPTR,#DAT
  203.               MOV A,R1
  204.               MOVC A,@A+DPTR
  205.               CLR P2.0
  206.               SETB P2.1
  207.               MOV P0,A                                     ;动态扫描,显示十位
  208.               LCALL DELAY                             ;延时约12毫秒
  209.               MOV A,R2
  210.               MOVC A,@A+DPTR
  211.               SETB P2.0
  212.               CLR P2.1
  213.               MOV P0,A                                     ;动态扫描,显示个位
  214.               LCALL DELAY                             
  215.               SETB P2.0
  216.               SETB P2.1                                      ;关显示
  217.               RET
  218. DAT:
  219.               DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
  220. ;“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“灭”
  221. DELAY1:                                                     ;延时子程序,延时并显示
  222.               MOV 36H,#08H
  223.        LOOP0:
  224.               LCALL DISPLAY
  225.               DJNZ 36H,LOOP0
  226.               RET
  227. DELAY:                                                               ;延时子程序,延时约12ms
  228.               MOV 34H,#24H
  229.        LOOP:
  230.               MOV 35H,#0AFH
  231.        LOOP1:
  232.               DJNZ 35H,LOOP1
  233.               DJNZ 34H,LOOP
  234.               RET              
  235. KEY:                                                             ;显示切换子程序
  236.               JNB P2.7,KEY1
  237.               RET
  238.        KEY1:
  239.               LCALL DELAY                             ;延时去抖动
  240.               JNB P2.7,KEY2
  241.               RET
  242.        KEY2:
  243.               LCALL INT
  244.               RET
  245. INT:                                                               
  246.               MOV A,R0                                     ;显示设定温度
  247.               MOV B,#10
  248.               DIV AB
  249.               MOV R1,A
  250.               MOV R2,B
  251.               MOV R6,#50
  252.               LCALL DELAY1
  253.               DJNZ R6,$
  254.               RET
  255.               END
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:200214 发表于 2017-5-13 11:45 | 只看该作者
汇编程序
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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