找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2217|回復(fù): 1
收起左側(cè)

溫度箱的自動(dòng)設(shè)計(jì)系統(tǒng) 單片機(jī)匯編程序

[復(fù)制鏈接]
ID:200214 發(fā)表于 2017-5-13 11:20 | 顯示全部樓層 |閱讀模式

仿真.png

單片機(jī)匯編程序:
  1. TEMPER_L EQU 31H          ;用于保存讀出溫度低字節(jié)        
  2.               TEMPER_H EQU 30H                  ;用于保存讀出溫度高字節(jié)
  3.               TEMPER_SET EQU 32H             ;用于保存設(shè)定的預(yù)期溫度
  4.               FLAG EQU 33H                                   ;是否檢測(cè)到DS18B20標(biāo)志位
  5.               ORG 0000H                    
  6.               LJMP MAIN                  
  7.               ORG 0030H
  8. MAIN:
  9.               MOV R0,#20                                  ;系統(tǒng)默認(rèn)預(yù)期溫度為20℃
  10. START:
  11.               CLR P2.6                                        ;點(diǎn)亮“實(shí)時(shí)溫度”指示燈
  12.               SETB P2.5                                      ;熄滅“設(shè)定溫度”指示燈
  13.               JNB P2.2,SELSUB                        ;是進(jìn)入溫度設(shè)定
  14.               LCALL GET_TEMPER                 ;調(diào)用溫度獲取子程序
  15.               LCALL COMPARE                       ;調(diào)用溫度比較子程序
  16.               LCALL DISPLAY                         ;調(diào)用顯示子程序
  17.               LCALL KEY                                  ;調(diào)用顯示切換子程序
  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                                     ;溫度個(gè)位存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                          ;延時(shí)顯示
  36.               JNB P2.3,INC1                              ;按鍵是否松開(kāi),松開(kāi)則程序往下執(zhí)行
  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                             ;按鍵是否松開(kāi),松開(kāi)則程序往下執(zhí)行
  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                              ;檢測(cè)到DS18B20跳到TSS2
  60.               RET
  61.        TSS2:
  62.               MOV A,#0CCH                             ;跳過(guò)ROM匹配
  63.               LCALL WRITE_1820                   ;寫(xiě)DS18B20子程序
  64.               MOV A,#44H                                 ;發(fā)出溫度轉(zhuǎn)換命令
  65.               LCALL WRITE_1820
  66.               LCALL DISPLAY                         ;用顯示溫度來(lái)等待AD轉(zhuǎn)換結(jié)束
  67.               LCALL SET_1820
  68.               MOV A,#0CCH                             ;跳過(guò)ROM匹配
  69.               LCALL WRITE_1820
  70.               MOV A,#0BEH                              ;發(fā)出讀溫度命令
  71.               LCALL WRITE_1820
  72.               LCALL READ_1820                            ;讀DS18B20的溫度數(shù)據(jù)
  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                                     ;讀出的溫度轉(zhuǎn)化問(wèn)攝氏溫度存R7中
  88.               MOV B,#10
  89.               DIV AB
  90.               MOV R1,A                                     ;讀出的溫度十位存R1
  91.               MOV R2,B                                     ;讀出的溫度個(gè)位存R2
  92.               RET
  93.        SET_1820:                                             ;DS18B20復(fù)位初始化子程序
  94.               SETB P1.2
  95.               NOP
  96.               CLR P1.2
  97.               MOV R3,#3                                    ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
  98.        TSR1:
  99.               MOV R4,#107
  100.               DJNZ R4,$
  101.               DJNZ R3,TSR1
  102.               SETB P1.2                                      ;然后拉高數(shù)據(jù)線
  103.               NOP
  104.               NOP
  105.               NOP
  106.               MOV R4,#25H
  107.        TSR2:
  108.               JNB P1.2,TSR3                              ;等待DS18B20回應(yīng)
  109.               DJNZ R4,TSR2
  110.               LJMP TSR4                                    ;延時(shí)
  111.        TSR3:
  112.               SETB FLAG                                   ;置標(biāo)志位,表示DS18B20存在
  113.               LJMP TSR5
  114.        TSR4:
  115.               CLR FLAG                                    ;清標(biāo)志位,表示DS18B20不存在
  116.               LJMP TSR7
  117.        TSR5:
  118.               MOV R4,#117
  119.        TSR6:
  120.               DJNZ R4,TSR6                              ;時(shí)序要求延時(shí)一段時(shí)間
  121.        TSR7:
  122.               SETB P1.2
  123.               RET
  124. WRITE_1820:
  125.               MOV R3,#8                                    ;一共8位數(shù)據(jù)
  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     ;設(shè)定溫度與實(shí)時(shí)溫度不等則跳COMP
  185.               SETB P1.0                                      ;關(guān)加熱器
  186.               SETB P1.1                                      ;關(guān)制冷器
  187.               RET
  188.        COMP:
  189.               MOV A,R7                                     ;實(shí)時(shí)溫度存入A
  190.               MOV B,R0                                     ;設(shè)定溫度存入B
  191.               DIV AB                                                 ;A除以B,商給A
  192.               CJNE A,#0H,COMP1                    ;若A不等于0,即實(shí)時(shí)溫度高,跳轉(zhuǎn)
  193.               SETB P1.1                                      ;關(guān)制冷器
  194.               CLR P1.0                                        ;開(kāi)加熱器
  195.               LJMP EXIT
  196.        COMP1:
  197.               SETB P1.0                                      ;關(guān)加熱器
  198.               CLR P1.1                                        ;開(kāi)制冷器
  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                                     ;動(dòng)態(tài)掃描,顯示十位
  208.               LCALL DELAY                             ;延時(shí)約12毫秒
  209.               MOV A,R2
  210.               MOVC A,@A+DPTR
  211.               SETB P2.0
  212.               CLR P2.1
  213.               MOV P0,A                                     ;動(dòng)態(tài)掃描,顯示個(gè)位
  214.               LCALL DELAY                             
  215.               SETB P2.0
  216.               SETB P2.1                                      ;關(guān)顯示
  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:                                                     ;延時(shí)子程序,延時(shí)并顯示
  222.               MOV 36H,#08H
  223.        LOOP0:
  224.               LCALL DISPLAY
  225.               DJNZ 36H,LOOP0
  226.               RET
  227. DELAY:                                                               ;延時(shí)子程序,延時(shí)約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                             ;延時(shí)去抖動(dòng)
  240.               JNB P2.7,KEY2
  241.               RET
  242.        KEY2:
  243.               LCALL INT
  244.               RET
  245. INT:                                                               
  246.               MOV A,R0                                     ;顯示設(shè)定溫度
  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
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:200214 發(fā)表于 2017-5-13 11:45 | 顯示全部樓層
匯編程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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