久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2335|回復: 0
打印 上一主題 下一主題
收起左側

數字式溫度計實驗(18B20、ZLG7290)源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:293603 發表于 2018-3-18 16:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數字式溫度計實驗(18B20ZLG7290)
  1. ; **************主程序(MAIN.ASM)***********************
  2. ; 向DS18B20發出溫度轉換信號,延時等待,讀出溫度;將溫度值由十六進制轉換成十進制數,使用8155控制LED顯示溫度
  3.   TEMPER_L        EQU        29H                  ;用于保存讀出溫度的低8位
  4.   TEMPER_H        EQU        28H                ;用于保存讀出溫度的高8位
  5.   TIAO_H        EQU     27H             ;用于保存設定溫度的數據
  6.   ;FLAG1        EQU     38H             ;是否檢測到DS18B20標志位
  7.   buffer        EQU        35H                ;溫度臨時存放區
  8.   ;a_bit        EQU     20H             ;數碼管個位數存放內存位置
  9.   ;b_bit        EQU     21H             ;數碼管十位數存放內存位置
  10.   SL            EQU     22H             ;設定溫度時數碼管個位數存放內存位置
  11.   SH            EQU     23H             ;設定溫度時數碼管十位數存放內存位置
  12.   sdwd          EQU     24H             ;設定溫度壓縮BCD碼位
  13.      DQ         BIT     P3.0                ;數據輸入/輸出端
  14.           ORG   0000H
  15.           AJMP  MAIN0
  16.           ORG   0100H
  17. MAIN0:   MOV   SP,#70H
  18.           MOV   A,#89H       ;           ;8155方式控制字0DH(A、C口輸出,B口輸入)送累加器A
  19.           MOV   DPTR,#0F003H
  20.           MOVX  @DPTR,A
  21.           MOV   sdwd, #25H              ;設定初始溫度37度,上電后內部設定溫度
  22. MAIN1:   LCALL        BH_DISBCD
  23.           LCALL KEY
  24.           JNB  00H,MAIN1
  25.           CLR 00H
  26. MAIN2:   LCALL        START_Temperature       ;向DS18B20發送讀溫度指令
  27.           LCALL        DelayTime        
  28.           LCALL        RD_Temperature                ;讀出溫度值,并轉換為BCD碼
  29.           MOV        TEMPER_L,B                ;溫度個位,小數位數據
  30.           MOV        TEMPER_H,A              ;溫度十位數據
  31.          ;LCALL DIS_BCD                 ;提取溫度數據,轉換為非壓縮型BCD碼,并顯示
  32.           LCALL        BH_DISBCD
  33.           LCALL KEY
  34.           LCALL TContral
  35.           AJMP        MAIN2        
  36. ;**********************************************************
  37. ; 判斷DS18B20是否存在,啟動DS18B20           ;CY為判斷標志
  38.   START_Temperature: SETB   DQ        
  39.                      ACALL  INIT_18B20        ;先復位DS18B20
  40.                      JC            GET_T0        
  41.                      MOV    A,#0CCH        ;跳過ROM匹配
  42.                      LCALL  WRITE_18B20        
  43.                      MOV    A,#44H        ;發出溫度轉換命令
  44.                      LCALL  WRITE_18B20        
  45.                      CLR    C        
  46.              GET_T0: RET               
  47. ;***********************************************************
  48. ; 讀出轉換后的溫度值,保存于:A-高8位數據,B-低8位數據
  49. RD_Temperature:LCALL        INIT_18B20        ;準備讀溫度前先復位
  50.                 JC        GET_T1
  51.                 MOV        A,#0CCH                ;跳過ROM匹配
  52.                 LCALL        WRITE_18B20        
  53.                 MOV        A,#0BEH                ;發出讀溫度命令
  54.                 LCALL        WRITE_18B20        
  55.                 LCALL        READ_18B20        ;讀出溫度
  56.                 MOV        B,A                ;存放到A,B中
  57.                 LCALL        READ_18B20        
  58.         GET_T1: RET
  59. ;***********************************************************
  60. ;  DS18B20溫度轉換/顯示
  61.    DIS_BCD:  MOV       R0,#buffer+3         ;設置顯示內容存放區首地址        
  62.              MOV       @R0,#10H                 ;正數
  63.              MOV       A,TEMPER_H         
  64.              JNB       ACC.3,DIS_BCD1         ;判斷溫度是否為負
  65.              MOV       @R0,#11H                 ;負數
  66.              CPL       A         
  67.              XCH       A,TEMPER_L        
  68.              CPL       A        
  69.              ADD       A,#1        
  70.              XCH       A,TEMPER_L        
  71.              ADDC      A,#0        
  72.    DIS_BCD1: ANL       A,#0FH                 ;將溫度整數位轉換為ASCII
  73.              MOV       B,A        
  74.              MOV       A,TEMPER_L        
  75.              ANL       A,#0F0H        
  76.              ORL       A,B                 ;將溫度的個位與十位BCD合在一起
  77.              SWAP      A        
  78.              MOV       B,#10        
  79.              DIV       AB        
  80.              JNZ       DIS_BCD2                 ;判斷溫度的十位是否為0進行相應處理
  81.              MOV       A,#10H                 ;十位為0
  82.              XCH       A,@R0        
  83.              DEC       R0        
  84.              MOV       @R0,A        
  85.              SJMP      DIS_BCD3        
  86.    DIS_BCD2: DEC       R0        
  87.              MOV       @R0,A        
  88.    DIS_BCD3: DEC       R0
  89.              MOV       A,B
  90.              ;ORL      A,#80H                 ;小數點
  91.              MOV       @R0,A
  92.              DEC       R0        
  93.              MOV       A,TEMPER_L        ;轉換小數部分
  94.              ANL       A,#0FH        
  95.              MOV       B,A        
  96.              CLR       A        
  97.              JNB       B.0, DIS_BCD4        
  98.              MOV       A,#6        
  99.    DIS_BCD4: JNB       B.1, DIS_BCD5        
  100.              ADD       A,#12H        
  101.              DA               A        
  102.    DIS_BCD5: JNB       B.2, DIS_BCD6        
  103.              ADD       A,#25H        
  104.              DA        A        
  105.    DIS_BCD6: JNB       B.3, DIS_BCD7        
  106.              ADD       A,#50H        
  107.              DA        A        
  108.    DIS_BCD7: SWAP      A        
  109.              ANL       A,#0FH        
  110.              MOV       @R0,A        
  111.              MOV       R0,#buffer+4         ;顯示數據首地址
  112.              MOV       @R0,#10H        
  113.              INC       R0        
  114.              MOV       @R0,#10H        
  115.              INC       R0        
  116.              MOV       @R0,#10H        
  117.              INC       R0        
  118.              MOV       @R0,#10H        
  119.              MOV       R0,#buffer        
  120.              LCALL     Display        
  121.              RET
  122. ;***********************************************************
  123. ;DS18B20溫度轉換/顯示
  124. BH_DISBCD: MOV A,TEMPER_L            ;
  125.             MOV C,40H                 ;將28H中的最低位移入C(28H.0-C)
  126.             RRC A
  127.             MOV C,41H
  128.             RRC A
  129.             MOV C,42H
  130.             RRC A
  131.             MOV C,43H
  132.             RRC A
  133.             MOV TEMPER_L,A           ;新字節29H是實際測量的溫度
  134.             LCALL BCDBHDA
  135.             LCALL Display
  136.             RET
  137. ;***********************************************************
  138. TContral: CLR C                      ;比較轉換值與設定值
  139.            MOV 26H,sdwd               ;把溫度設定保存到26H單元后減2度,作為低度的數據
  140.            DEC 26H
  141.            MOV A,TEMPER_L
  142.            CJNE A,26H,LOOP1           ;下限設定溫度,不相等跳LOOP1
  143.            LJMP HOTTING               ;與下限值相等跳HOTTING,加熱
  144.     LOOP1: JC HOTTING                 ;溫度小于下限值跳HOTTING,加熱
  145.            MOV A,TEMPER_L             ;溫度大于下限值,與上限值比較
  146.            CLR C
  147.            MOV 27H,sdwd
  148.            INC 27H
  149.            CJNE A,27H,LOOP2           ;上限設定溫度,不相等跳LOOP2
  150.            SJMP STOPHOT               ;相等跳STOPHOT,停止加熱 
  151.     LOOP2: JNC STOPHOT                ;溫度大于上限值跳STOPHOT,停止加熱
  152.            SJMP KEEP                  ;溫度小于上限且大于下限值跳KEEP,保溫
  153.   HOTTING: CLR  P1.0                  ;小,加熱器驅動
  154.            SETB P1.1                  ;關閉保溫燈
  155.     KEEP:  SJMP BACK                  ;返回,保持原態,保溫
  156.   STOPHOT: SETB P1.0                  ;關閉加熱器
  157.            CLR  P1.1                  ;點亮保溫燈           
  158.    BACK:   RET
  159. ;***********************************************************
  160. ;鍵盤響應子程序
  161. KEY:    MOV DPTR,#0F002H
  162.          MOVX A,@DPTR                  ;讀列線狀態
  163.          ORL A,#0F0H
  164.          CJNE A,#0FFH,NEXT1        
  165.   SS:    RET
  166.   NEXT1: LCALL D10ms
  167.          MOV DPTR,#0F002H               ;指向8255C口
  168.          MOVX A,@DPTR
  169.          ORL A,#0F0H
  170.          CJNE A,#0FFH,NEXT2
  171.          LJMP SS
  172.   NEXT2: MOV R3,#4
  173.          MOV DPTR,#0F002H
  174.          MOV R4,#00H
  175.          MOVX A,@DPTR
  176.   NEXT3: RRC A
  177.          JNC NEXT4
  178.          INC R4
  179.          DJNZ R3,NEXT3
  180.          LJMP SS
  181.   NEXT4: MOVX A,@DPTR                 ;等待鍵釋放
  182.          ORL A,#0F0H
  183.          CJNE A,#0FFH,NEXT4
  184.          MOV DPTR,#TAB               ;指向按鍵轉移指令表首地址
  185.          MOV A,R4
  186.          RL A         
  187.          JMP @A+DPTR
  188. TAB:    AJMP KEY0
  189.          AJMP KEY1
  190.          AJMP KEY2
  191.          AJMP KEY3
  192.          ;AJMP KEY4
  193.          ;AJMP KEY5
  194.          ;AJMP KEY6
  195.          ;AJMP KEY7
  196. ;*********************************
  197. ;按下KEY0后轉加1程序
  198. KEY0: MOV R5,#30H
  199.        LCALL Displa
  200.        MOV A,sdwd               ;把設定溫度送累加器判斷
  201.        CJNE A,62H,JIA0          ;比較設定溫度是否到99度,不是則加            
  202.        MOV sdwd,#00H
  203.        LJMP JIA1      
  204. JIA0: INC sdwd
  205. JIA1: LCALL Displa
  206.        DJNZ R5,JIA1
  207.        LJMP SS
  208. ;*************************
  209. KEY1: MOV R5,#30H
  210.        LCALL Displa
  211.        MOV A,sdwd               ;把設定溫度送累加器判斷
  212.        CJNE A,01H,JIAN0         ;比較設定溫度是否到0度,不是則減            
  213.        MOV sdwd,#62H
  214.        LJMP JIAN1      
  215. JIAN0:DEC sdwd
  216. JIAN1:LCALL Displa
  217.        DJNZ R5,JIAN1
  218.        LJMP SS
  219. ;*************************   
  220. KEY2: SETB 00H
  221.        LJMP SS
  222. ;*************************   
  223. KEY3: LJMP SS
  224. ;***********************************************************
  225.    ;DS18B20復位初始化子程序
  226.    INIT_18B20:        SETB        DQ
  227.                 NOP                        
  228.                 CLR        DQ                 ;主機發出501us的復位低脈沖
  229.                        MOV        R7,#250        
  230.                 DJNZ        R7,$
  231.                 SETB        DQ                 ;拉高數據線
  232.                 MOV        R7,#30        
  233.           TSR:        JNB        DQ,TSR1                 ;等待DS18B20回應
  234.                 DJNZ        R7,TSR        
  235.                 SETB        C                 ;置位標志位,表示DS18B20不存在
  236.                 RET               
  237.           TSR1: CLR        C                  ;復位標志位,表示DS18B20存在
  238.                 MOV        R7,#250        
  239.                 DJNZ        R7,[        DISCUZ_CODE_2        ]nbsp;                ;時序要求延時一段時間
  240.                 RET
  241. ;***************************************************************               
  242.   ;DS18B20寫操作
  243.   WRITE_18B20:        MOV        R7,#8                 ;一共8位數據
  244.                 CLR        C        
  245.           WRI:        NOP               
  246.                 CLR        DQ        
  247.                 MOV        R6,#3        
  248.                 DJNZ        R6,[        DISCUZ_CODE_2        ]nbsp;      
  249.                 RRC        A        
  250.                 MOV        DQ,C        
  251.                 MOV        R6,#26        
  252.                 DJNZ        R6,[        DISCUZ_CODE_2        ]nbsp;      
  253.                 SETB        DQ        
  254.                 DJNZ        R7,WRI
  255.                 SETB        DQ        
  256.                 RET               
  257. ;****************************************************************  
  258.   ;DS18B20讀操作
  259.   READ_18B20:        MOV    R7,#8                 ;數據一共有8位
  260.        READ1:        CLR    DQ
  261.                 NOP
  262.                 NOP
  263.                 SETB   DQ
  264.                 NOP               
  265.                 MOV    R6,#3        
  266.                 DJNZ   R6,[        DISCUZ_CODE_2        ]nbsp;      
  267.                 MOV    C,DQ        
  268.                 MOV    R6,#26        
  269.                 DJNZ   R6,[        DISCUZ_CODE_2        ]nbsp;      
  270.                 RRC    A        
  271.                 DJNZ   R7,READ1        
  272.                 RET               
  273.         
  274. ;******************************************************************
  275. BCDBHDA: MOV R0,#buffer
  276.          MOV A,TEMPER_L      ;將29H中的十六進制數轉換成10進制
  277.          MOV B,#10           ;10進制/10=10進制
  278.          DIV AB
  279.          MOV @R0,B           ;個位在buffer(35H)
  280.          INC R0
  281.          MOV @R0,A           ;十位在buffer+1(36H)
  282. ;*************************
  283.          INC R0
  284.          MOV A,sdwd
  285.          MOV B,#10           ;10進制/10=10進制
  286.          DIV AB
  287.          MOV @R0,B           ;個位在buffer+2(37H)
  288.          INC R0
  289.          MOV @R0,A           ;十位在buffer+3(38H)           
  290.          RET
  291. ;******************************************************************
  292. Display: MOV R0,#buffer
  293.          MOV R7,#04H          ;----1顯示子程序開始
  294.          MOV R1,#60H          ;60H 61H(62H 63H)存放測量(設定)溫度個位、十位段碼
  295. DISP0:   MOV A,@R0            
  296.          MOV DPTR,#TABLE
  297.          MOVC A,@A+DPTR
  298.          MOV @R1,A
  299.          INC R0
  300.          INC R1
  301.          DJNZ R7,DISP0
  302. ;*****************************
  303.        MOV R7,#04H         
  304.        MOV R0,#60H
  305.        MOV R3,#0FEH
  306. DISP1: MOV DPTR,#0F001H     ;指定字位碼入口地址:8155的C口
  307.        MOV A,R3
  308.        MOVX @DPTR,A      
  309.        RL  A
  310.        MOV R3,A
  311.        MOV DPTR,#0F000H     ;指定字型碼入口地址:8155的A口
  312.        MOV A,@R0
  313.        MOVX @DPTR,A     
  314.        INC R0
  315.        LCALL DELAY                 
  316.        DJNZ R7,DISP1
  317.        RET                 ;----1顯示子程序結束
  318. ;******************************************************************
  319. ;;閃爍設定顯示
  320. Displa: MOV A,sdwd
  321.         MOV B,#10            ;10進制/10=10進制
  322.         DIV AB
  323.         MOV SL,B             ;十位在b
  324.         MOV SH,A             ;個位在a
  325.         MOV R1,#250          ;顯示250次
  326. dpl2:   MOV A,SL             ;取設定溫度個位數
  327.         MOV DPTR,#TABLE      ;指定查表啟始地址
  328.         MOVC A,@A+DPTR       ;查個位數的7段代碼
  329.         MOV DPTR,#0F000H
  330.         MOVX @DPTR,A         ;送出個位的7段代碼
  331.         MOV DPTR,#0F001H  
  332.         MOV A,#0FBH
  333.         MOVX @DPTR,A         ;開個位顯示                 
  334.         ACALL D1ms           ;顯示1ms
  335.         MOV A,#0FFH
  336.         MOVX @DPTR,A                    
  337.         MOV  A,SH            ;取設定溫度十位數
  338.         MOV DPTR,#TABLE      ;指定查表啟始地址
  339.         MOVC A,@A+DPTR       ;查十位數的7段代碼
  340.         MOV DPTR,#0F000H
  341.         MOVX @DPTR,A         ;送出十位的7段代碼
  342.         MOV DPTR,#0F001H  
  343.         MOV A,#0F7H
  344.         MOVX @DPTR,A         ;開十位顯示
  345.         ACALL D1ms           ;顯示1ms
  346.         MOV A,#0FFH
  347.         MOVX @DPTR,A                  
  348.         DJNZ  R1,dpl2        ;250次沒完循環
  349.         RET
  350. TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  351. ;******************************************************************
  352. ;延時程序
  353. DelayTime:        PUSH        07H
  354.                 PUSH        06H
  355.                 PUSH        05H
  356.                 MOV        R7,#1
  357. DelayTime_1:        MOV        R6,#1
  358. DelayTime_2:        MOV        R5,#0
  359.                 DJNZ        R5,$
  360.                 DJNZ        R6,DelayTime_2
  361.                 DJNZ        R7,DelayTime_1
  362.                 POP        05H
  363.                 POP        06H
  364.                 POP        07H
  365.                 RET
  366. ;*************************************************
  367. DELAY: NOP
  368.        MOV R6,#2          ;----2延時子程序開始
  369. DEL2:  MOV R5,#0FFH
  370. DEL1:  NOP
  371.        NOP
  372.        DJNZ R5, DEL1
  373.        DJNZ R6, DEL2
  374.        RET                     
  375. ;*************************************************
  376. D10ms: MOV R5,#20
  377. DL:   MOV R6,#0FFH
  378. DL0:  DJNZ R6,DL0
  379.        DJNZ R5,DL
  380.        RET
  381. ;*************************************************
  382. D1ms: MOV R7,#1
  383.        DJNZ R7,$
  384.        RET
  385. ;*************************************************      
  386.        END

復制代碼


新建 Microsoft Word 文檔.docx

22.28 KB, 下載次數: 6, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人自拍 | 亚洲播放| 久99久视频 | 人妖一区| 国产精品视频一 | 久久久久国产精品 | 精品视频一区二区三区在线观看 | 玩丰满女领导对白露脸hd | 欧美不卡一区二区 | 日韩1区| 日韩福利 | 中文精品久久 | 久久综合av | 午夜国产 | 北条麻妃一区二区三区在线观看 | 中文字幕精品一区 | 色综合视频在线 | 亚洲精品国产电影 | 亚洲欧美在线观看 | 免费一区二区三区 | 老司机成人在线 | 欧美中文字幕一区 | 亚洲一区二区 | 中文字幕视频三区 | 欧美日本在线观看 | 天天夜碰日日摸日日澡 | 在线91| 成人免费福利视频 | 欧美日韩一卡二卡 | 国产成人精品免费视频大全最热 | 日韩二三区 | 国产高清一区二区三区 | 欧美一级片免费看 | 午夜天堂精品久久久久 | 色婷婷综合久久久中文字幕 | 国产欧美一区二区精品忘忧草 | 亚洲日本一区二区 | 国产在线观看一区二区三区 | 久久久www成人免费无遮挡大片 | 国产精品免费小视频 | 国产免费一区二区 |