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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5148|回復: 2
收起左側

單片機主機通過DS18B20測溫,從機接收并且實時顯示溫度(匯編程序與仿真)

[復制鏈接]
ID:401743 發表于 2018-9-24 10:43 | 顯示全部樓層 |閱讀模式
單片機系統設計實驗報告

0 實驗任務
所設計的主從式多級通信系統有一個主機和兩個從機,其中1#從機的地址設為01H,2#從機的地址設為02H。
主機的RXD和從機的TXD相連,TXD和從機的主機的RXD相連,主機的P1口接2個按鈕開關,一個代表1#從機,另一個代表2#從機,主機根據開關的狀態,發送要訪問的從機的地址,地址相符的從機則點亮發光二極管以示和主機進行通信,然后主機向從機發送數據,從機將接收到的數據進行顯示。當按下從機1#的按鈕的時候,主機會將實時溫度發送給從機,從機通過LCD 1602顯示溫度。P2.4引腳上的發光二極管指示和主機的通信狀態。
主機和從機串口都設置為方式3,波特率為9600。主機發送地址時,TB8為1,主機發送數據時,TB8為0。從機在監聽狀態時SM2設置為1,接收到的地址若和本機地址相符,點亮P2.0引腳上的發光二極管以示和主機聯絡成功,并置SM2為0,準備接收數據,否則SM2仍維持為1不變,不接收數據。從機接收完數據后,將接收到的數據送顯示,然后從機將SM2設置為1,返回到監聽狀態。主機根據按鈕開關的狀態,和相應的從機進行通信。
1 系統方案
1.1 系統分析
根據系統功能要求,可將系統組成結構分為四大部分。單片機控制中心、DS18B20測溫模塊、LCD 1602顯示模塊、中斷觸發模塊。
其中,單片機控制中心是核心。DS18B20測溫模塊是數據輸入的主要來源,可以實時測溫;LCD 1602顯示模塊是將溫度實時顯示,用于顯示測量地點的溫度;報警模塊是監視測量地點的溫度有沒有超出可接受范圍,如果超出,報警模塊會以聲音方式報警。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機匯編語言源程序如下(主機):
  1.         ;采用11.0592MHZ晶振
  2.         ;++++++++++++執行DJNZ需要兩個時間周期+++++++++++++
  3.         ;T0定時器 方式1 16位計數
  4.         ;1.init
  5.         ;2.skip        rom
  6.         ;3.convert-t
  7.         ;4.init
  8.         ;5.skip-rom
  9.         ;6.read
  10.         ;7.receive-data
  11.         ;8.cal
  12.         ;9.display

  13.         DAT        BIT        P3.7                        ;定義P3.7口為DQ線
  14.         WDLSB        DATA        30H                ;定義讀出溫度低字節,將溫度低字節放在30H
  15.         WDMSB        DATA        31H                ;定義讀出溫度高字節,將溫度高字節放在31H

  16.         ORG        0000H
  17.         LJMP        MAIN
  18.         ORG        0003H                                
  19.         LJMP        INT_EXT0                ;外部中斷0入口
  20.         ORG        0013H                                
  21.         LJMP        INT_EXT1                ;外部中斷1入口
  22.         ORG        0100H
  23. MAIN:
  24.         MOV        SP,#60H                                ;設置堆棧指針

  25.         SETB        EX0                                ;允許外部中斷0產生中斷
  26.         SETB        IT0                                ;外部中斷0為跳沿觸發方式
  27.         SETB        EX1                                ;允許外部中斷1產生中斷
  28.         SETB        IT1                                ;外部中斷1為跳沿觸發方式
  29.         SETB        EA                                ;總中斷打開
  30.         MOV        IP,#01H
  31.         ;---DS18B20測溫子程序---
  32.         LCALL        DS18B20_TP                ;調用DS18B20測溫子程序

  33. HERE:
  34.         LJMP        HERE
  35.         ;----外部中斷0子程序
  36. INT_EXT0:                                        ;外部中斷子程序
  37.         CLR        EA                                        ;CPU關中斷
  38.         PUSH        PSW                                ;現場保護
  39.         PUSH        ACC
  40.         SETB        EA                                ;總中斷允許位
  41.         MOV        TMOD,#20H                        ;選擇定時器T1,波特率是9600
  42.         MOV        TH1,#0FDH
  43.         MOV        TL1,#0FDH
  44.         SETB        TR1                                ;運行定時器T1        
  45.         MOV        SCON,#0D8H                        ;設置串口通信為方式3,SM2=0,RE=1,TB8=1
  46.         MOV        PCON,#00H                        ;*****SMOD=0        
  47.         MOV        IE,#00H
  48. MT1:
  49.         MOV        SBUF,#01H                        ;發送1#從機地址,呼叫1#從機
  50.                
  51. LT1:        
  52.         JBC        TI,LT2                                ;判TI?TI=1,跳轉L2,并將TI=0;否則往下執行
  53.         LJMP        LT1
  54. LT2:
  55.         
  56.         JBC        RI,ST1                                ;等待從機應答,如果接收完成,RI=1,轉S1,RI=0;
  57.                                                         ;如果RI=0,往下執行
  58.         LJMP        LT2                                ;未接收完成,跳轉L2繼續等待
  59. ST1:        
  60.         MOV        A,SBUF                                ;取出應答地址
  61.         XRL        A,#01H                                ;判斷是否1#從機應答
  62.         JZ        RIGHTT                                ;是從機1#應答,轉發送數據
  63.         LJMP        MT1                                ;如果不是1#從機應答,重新呼叫
  64. RIGHTT:
  65.         CLR        TB8                                        ;聯絡成功,清TB8,發送數據
  66.         ;---啟動發送個位溫度數據
  67.         MOV        SBUF,43H                        ;啟動發送個位溫度數據
  68. TRANS_L:
  69.         JBC        TI,OK                                ;TI=1,發送完成,并且清零TI,轉NEXT
  70.                                                         ;TI=0,轉WAIT繼續等待
  71.         LJMP        TRANS_L
  72.         ;---接收從機發送過來的確認信息#0FFH
  73. OK:
  74.         JBC        RI,RECEIVE_OK                ;主機等待從機應答,如果接受完畢,RI=1,并且轉RECEIVE_OK
  75.         LJMP        OK
  76. RECEIVE_OK:
  77.         MOV        A,SBUF
  78.         XRL        A,#0FFH
  79.         JZ        TRANS_H
  80.         LJMP        MT1        
  81.         ;---啟動發送十位溫度數據        
  82. TRANS_H:
  83.         MOV        SBUF,42H                        ;---啟動發送十位溫度數據
  84.         ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  85.         MOV        A,42H
  86.         MOV      DPTR,#TAB      ;翻譯子程序,將段碼表首地址放入DPTR
  87.         MOVC     A,@A+DPTR      ;查表后將鍵號對應的段碼送入ACC
  88.         MOV      P2,A           ;將ACC值送入P2孔
  89.                
  90. WAIT_H:        
  91.         JBC        TI,NEXTT                        ;RI=1,發送完成,并且清零RI,轉NEXT
  92.                                                         ;RI=0,轉WAIT繼續等待
  93.         LJMP        WAIT_H                        ;啟動發送十位溫度數據
  94. NEXTT:
  95.         CLR        EA                                        ;關中斷               
  96.         POP        ACC                                        ;現場恢復
  97.         POP        PSW
  98.         SETB        EA                                ;打開中斷
  99.         RETI
  100.         ;----外部中斷1子程序
  101. INT_EXT1:
  102.         CLR        EA                                        ;CPU關中斷
  103.         PUSH        PSW                                ;現場保護
  104.         PUSH        ACC
  105.         SETB        EA                                ;總中斷允許位        
  106.         MOV        TMOD,#20H                        ;選擇定時器T1,波特率是9600
  107.         MOV        TH1,#0FDH
  108.         MOV        TL1,#0FDH
  109.         SETB        TR1                                ;運行定時器T1        
  110.         MOV        SCON,#0D8H                        ;設置串口通信為方式3,SM2=0,RE=1,TB8=1
  111.         MOV        PCON,#00H                        ;*****SMOD=0        
  112.         MOV        IE,#00H
  113. M1:
  114.         MOV        SBUF,#02H                        ;發送2#從機地址,呼叫2#從機
  115.                
  116. L1:
  117.         JBC        TI,L2                                ;判TI?TI=1,跳轉L2,并將TI=0;否則往下執行
  118.         LJMP        L1
  119. L2:        
  120.         JBC        RI,S1                                ;等待從機應答,如果接收完成,RI=1,轉S1,RI=0;
  121.                                                         ;如果RI=0,往下執行
  122.         LJMP        L2                                ;未接收完成,跳轉L2繼續等待
  123. S1:        
  124.         MOV        A,SBUF                                ;取出應答地址
  125.         XRL        A,#02H                                ;判斷是否1#從機應答
  126.         JZ        RIGHT                                ;是從機1#應答,轉發送數據
  127.         LJMP        M1                                ;如果不是1#從機應答,重新呼叫
  128. RIGHT:
  129.         CLR        TB8                                        ;聯絡成功,清TB8,發送數據
  130.         ;---發送數據發送
  131.         MOV        SBUF,#02H                        ;啟動發送數據發送
  132. WAIT:
  133.         JBC        TI,NEXT                                ;RI=1,發送完成,并且清零RI,轉NEXT
  134.                                                         ;RI=0,轉WAIT繼續等待
  135.         LJMP        WAIT
  136. NEXT:
  137.         CLR        EA                                        ;關中斷               
  138.         POP        ACC                                        ;現場恢復
  139.         POP        PSW
  140.         SETB        EA                                ;打開中斷
  141.         RETI

  142.         ;---DS18B20測溫程序---
  143. DS18B20_TP:
  144.         PUSH        PSW                                ;現場保護
  145.         PUSH        ACC               
  146.         ;---清兩個顯示緩沖單元41H
  147.         MOV        R2,#3                                ;清兩個顯示緩沖單元42H(保存溫度值的十位),43H(保存溫度值的個位)
  148.         MOV        R0,#41H
  149. OVER:
  150.         MOV        @R0,#00H
  151.         INC        R0                                        ;指針R0執行42H
  152.         DJNZ        R2,OVER        
  153. LOOP:
  154.         ;---讀寫DS18B20子程序
  155.         LCALL        DSWD                        ;調用讀寫DS18B20子程序
  156.         LJMP        LOOP                        ;循環讀芯片的溫度
  157. DSWD:
  158.         ;關中斷
  159.         CLR        EA                                       
  160.         ;---復位子程序(初始化)
  161.         LCALL        RSTSNR                        ;調用復位子程序(INIT)
  162.         ;---寫跳過ROM命令
  163.         JNB        F0,KEND                                ;如果DS18B20沒有應答,跳KEND
  164.         MOV        R0,#0CCH                        ;跳過ROM匹配命令
  165.         LCALL        SEND_BYTE                ;發送一字節的跳過ROM匹配命令
  166.         ;---溫度轉換命令
  167.         MOV        R0,#44H                                ;溫度轉換命令
  168.         LCALL        SEND_BYTE                ;發送一字節的溫度轉換命令
  169.         ;打開中斷
  170.         SETB        EA
  171.         MOV        48H,#1                                ;延時75ms以上準備讀數據
  172. SS2:
  173.         MOV        49H,#255
  174. SS1:
  175.         MOV        4AH,#255
  176. SS0:
  177.         DJNZ        4AH,SS0
  178.         DJNZ        49H,SS1
  179.         DJNZ        48H,SS2
  180.         CLR        EA                                       
  181.         LCALL        RSTSNR                        ;復位程序(init)
  182.         JNB        F0,KEND
  183.         MOV        R0,#0CCH                        ;skip-rom指令
  184.         LCALL        SEND_BYTE                ;發送一字節的跳過ROM指令
  185.         MOV        R0,#0BEH                        ;讀DS18B20溫度指令
  186.         LCALL        SEND_BYTE                ;發送一字節的溫度轉化指令
  187.         LCALL        READ_BYTE                ;讀一個字節的溫度值
  188.         MOV        WDLSB,A                                ;讀一字節定位溫度值(低字節)
  189.         LCALL        READ_BYTE                ;讀一個字節的溫度值
  190.         MOV        WDMSB,A                                ;讀一字節定位溫度值(高字節)
  191.         LCALL        TRANS                        ;調用溫度轉換子程序,以便顯示溫度
  192. KEND:
  193.         SETB        EA                                ;打開中斷
  194.         RET
  195.         ;---主程序完成---**************************************


  196.         ;---復位子程序**************************************
  197. RSTSNR:
  198.         SETB        DAT                                ;拉高DQ總線↑
  199.         NOP
  200.         NOP
  201.         CLR        DAT                                        ;拉低DQ總線↓
  202.         ;---延時500μm
  203.         MOV        R6,#250
  204.         DJNZ        R6,[        DISCUZ_CODE_1        ]nbsp;                       ;250*2=500us        DJNZ需要兩個時間周期
  205.         SETB        DAT                                ;DQ=1↑ 釋放總線的控制權,IO轉為輸入↑
  206.         ;---延時68μm
  207.         MOV        R6,#34                                ;延時68us
  208.         DJNZ        R6,[        DISCUZ_CODE_1        ]nbsp;                       
  209.         LCALL        CHCK                        ;調用應答子程序,判斷DS18B20是否可獲得
  210.         ;---延時500μm
  211.         MOV        R6,#250
  212.         DJNZ        R6,[        DISCUZ_CODE_1        ]nbsp;                       ;延時500us
  213.         SETB        DAT                                ;DQ=1↑
  214.         RET                                                        

  215. CHCK:
  216.         MOV        C,DAT                                ;讀出DQ數據        
  217.         MOV        P1.7,C                        
  218.         JC        RST0                                ;如果DQ=0說明DS18B20可獲得,DQ=1,DS18B20不可獲得
  219.         SETB        F0                                ;標志位F0=1,DS18B20存在
  220.         LJMP        CHCK0                        ;子程序返回
  221. RST0:        
  222.         CLR        F0                                        ;標志位F0=1,DS18B20不存在
  223. CHCK0:
  224.         RET
  225.         ;---復位子程序完成**************************************


  226.         ;---發送一字節的跳過ROM匹配命令子程序**************************************
  227. SEND_BYTE:
  228.         MOV        A,R0                                ;發送一字節的子程序
  229.         MOV        R5,#8                                ;循環發送8次
  230. SEND:
  231.         CLR        C
  232.         RRC        A
  233.         JC        SEN1
  234.         LCALL        WRITE_0
  235.         LJMP        SEN2
  236. SEN1:
  237.         LCALL        WRITE_1
  238. SEN2:
  239.         DJNZ        R5,SEND
  240.         RET
  241.         ;---寫0子程序---
  242. WRITE_0:
  243.         CLR                DAT                                ;DQ=0↓
  244.         ;---延時68μm
  245.         MOV        R6,#34
  246.         DJNZ        R6,[        DISCUZ_CODE_1        ]nbsp;                       ;延時68us,34*2=68us
  247.         SETB        DAT                                ;釋放總線控制權
  248.         NOP
  249.         NOP
  250.         RET
  251.         ;---寫1子程序---
  252. WRITE_1:
  253.         CLR                DAT                                ;DQ=0↓
  254.         NOP
  255.         NOP
  256.         SETB        DAT                                ;DQ=1↑
  257.         ;---延時68μm
  258.         MOV        R6,#34
  259.         DJNZ        R6,[        DISCUZ_CODE_1        ]nbsp;                       ;延時68us
  260.         NOP
  261.         NOP        
  262.         RET
  263.         ;---發送一字節的跳過ROM匹配命令子程序完成**************************************

  264.         
  265.         ;---讀一個字節的溫度子程序--*******************************
  266. READ_BYTE:
  267.         MOV        R5,#8
  268. READ1:
  269.         LCALL        READ                        
  270.         RRC                A
  271.         DJNZ        R5,READ1
  272.         MOV        R0,A                                ;把溫度值保存在R0中
  273.         RET

  274. READ:
  275.         CLR        DAT                                        ;DQ=0↓
  276.         NOP
  277.         NOP
  278.         SETB        DAT                                ;DQ=1↑ 準備接收數據
  279.         NOP
  280.         NOP
  281.         MOV        C,DAT                                ;單片機讀數據。C中保存DS18B20發送過來的數據
  282.         ;---延時68μm
  283.         MOV        R6,#34
  284.         DJNZ        R6,[        DISCUZ_CODE_1        ]nbsp;                       ;延時68um        
  285.         RET                                       
  286.         ;---讀一個字節的溫度子程序完成--*******************************


  287.         ;---溫度轉換子程序---*************************************
  288. TRANS:
  289.         MOV        A,30H                                ;溫度轉換程序(只取整數),30H=LSM,31H,MSB(加入收到溫度是125 A=0000 0111 1101 0000)
  290.         ANL        A,#0F0H                                ;保留低八位的整數位        A=1101 0000
  291.         MOV        3AH,A
  292.         MOV        A,31H
  293.         ANL        A,#0FH                                ;保留高八位的正數位 A=0000 0111
  294.         ORL        A,3AH                                   ;取出八位正整數
  295.         SWAP        A
  296.         MOV        B,#10
  297.         DIV        AB
  298.         MOV        43H,B                                ;41H保存著個位數
  299.         MOV        B,#10
  300.         DIV        AB               
  301.         MOV        42H,B                                ;42H保存著十位數
  302.         MOV        41H,A                            ;43H保存著百位數
  303.         RET
  304.         ;---溫度轉換子程序---*************************************
  305.         POP        ACC                                        ;現場恢復
  306.         POP        PSW
  307.         
  308.         RET
  309.         
  310. TAB:        DB        0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H   ;共陽極段碼表
  311.         ;---程序結束---
  312.         END
  313.         
復制代碼

所有資料51hei提供下載:
05主機測溫發送給從機顯示溫度(LCD版).rar (149.73 KB, 下載次數: 40)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:576088 發表于 2020-7-30 11:07 | 顯示全部樓層
你好,我想問下,這個仿真電路圖里 從機1的P1.0,P1.1,P1.2口我沒有找到連接了什么元件。主機的P1口也沒有接按鈕開關,是INT1和INT0連接的按鈕開關呀。
回復

使用道具 舉報

ID:105782 發表于 2021-3-22 21:20 | 顯示全部樓層
樓上的,連上了,總線的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂资源最新在线 | 亚洲精品久久久久久国产精华液 | 日韩精品免费播放 | 国产精品一区二区三 | 99精品国产一区二区三区 | 男女国产网站 | 亚洲成人在线免费 | 亚洲国产精品99久久久久久久久 | 久久久精品国产 | 国产精品一区二区三 | 欧美1区2区| 欧美成人自拍 | 麻豆视频国产在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 久久新| 日本成人在线观看网站 | 国产精品福利视频 | 久久大陆 | 黄色小视频入口 | 97视频在线看| 国产精品不卡一区 | 日本免费在线观看视频 | 在线精品一区 | 国产精品久久久久久久久久久新郎 | 日本不卡免费新一二三区 | www.夜夜骑| 欧美国产视频 | 欧美日韩免费 | 一区欧美 | 久久精品视频免费看 | 精品在线视频播放 | 久久9999久久 | 日本黄色一级片视频 | 国产精品揄拍一区二区久久国内亚洲精 | 天天天操操操 | 亚洲三级在线观看 | 国产传媒毛片精品视频第一次 | 国内av在线| 亚洲成人综合在线 | 精品国产欧美一区二区 | 天天色天天色 |