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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機單總線接口學生實驗報告

[復制鏈接]
跳轉到指定樓層
樓主
ID:274161 發表于 2018-1-10 10:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
(理工類)

課程名稱:專業班級:
學生學號:學生姓名:
所屬院部:指導教師:
20——20學年          第學期
金陵科技學院教務處制

實驗項目名稱:實驗學時:

同組學生姓名:實驗地點:

實驗日期:實驗成績:

批改教師:批改時間:

一、實驗目的和要求

1、進一步熟練Keil uVision3的項目文件創建、編譯、運行和軟件仿真的基本操作方法;
2、鞏固程序調試的方法;
3、掌握單總線的工作原理;
4、掌握單總線器件18B20溫度傳感器的使用方法;
5、掌握對采集數據后續處理方法;
實驗任務:編寫程序,實時(定時器0中斷每隔0.5s)采集單總線溫度傳感器18B20的數據,能單獨顯示溫度。顯示格式要求如下:
當溫度高于或低于上、下限值時繼電器吸合燈亮,蜂鳴器鳴叫報警。可自行修改上下限值。

二、實驗儀器和設備

單片機編譯軟件Keil uVision3,計算機,USB下載線,CT107D單片機綜合開發平臺

三、實驗過程

目前,溫度測量方法很多,溫度傳感器也非常普遍。本實驗是基于DS18B20芯片的“一線式”溫度傳感器。該傳感器只需占用微處理器的一個普通端口, 獨特的單線接口僅需一個端口引腳進行通訊,并且多個傳感器可以并聯在一起使用,適用于多點溫度檢測系統,節約了大量系統資源。
主機(單片機)使用時間隙(time slots)來讀寫DSl8B20 的數據位和寫命令字的位。
(1)初始化
主機總線t0 時刻發送一復位脈沖(最短為480us 的低電平信號) 接著在t1時刻釋放總線并進入接收狀態。DSl820 在檢測到總線的上升沿之后等待15-60us 接著DS1820 在t2 時刻發出存在脈沖(低電平持續60-240 us)
(2)寫時間隙
  •        當主機總線 t0 時刻從高拉至低電平時就產生寫時間隙;
  •        從 t0時刻開始15us 之內應將所需寫的位送到總線上DSl820 在t0后15-60us 間對總線采樣若低電平寫入的位是0;若高電平寫入的位是1 。
  •        連續寫2 位間的間隙應大于1us
(3)讀時間隙
見圖,主機總線t0時刻從高拉至低電平時總線只須保持低電平1us 之后,單片機將總線拉高,釋放總線以產生讀時間隙。讀時間隙在t1 時刻后t2 時刻前有效, t2距t0為15us。也就是說t2時刻前主機必須完成讀位。每次讀周期至少 60us,兩次讀之間至少隔1us。
存儲器操作指令
發送CC:跳過ROM命令
發送44: 啟動溫度變換
發送BE: 讀暫存存儲器
數據格式
DS18B20,用12位存儲溫度,S為符號位:
正溫度S全部為0;
負溫度S全部為1,數據為二進制補碼;

使用buzz=0;relay=0;ULN2003_Latch();命令即可實現當溫度超過上下限制時,繼電器吸合燈亮,蜂鳴器響。

當動態掃描在while(1)中掃描時,數碼管顯示的只會閃動,當在循環后面掃描時,數碼管才不閃動。

四、實驗結果與分析

1.請用c語言寫出全部程序,并編譯,調試。
  1. #include <reg52.h>

  2. #include<intrins.h>

  3. #include"18b20.h"

  4. sbit DQ = P1^4;

  5. //延時函數

  6. void delay2us(unsigned char t)              //2us

  7. {

  8.   while(t--);

  9. }

  10. //DS18B20初始化函數

  11. bit init_ds18b20(void)

  12. {

  13.   bit initflag = 0;

  14.   DQ = 1;

  15.   delay2us(1);

  16.   DQ = 0;

  17.   delay2us(250);  // 延時大于480us

  18.   DQ = 1;

  19.   delay2us(10);   // 15us<waits<80us

  20.   initflag = DQ;  // initflag等于1初始化失敗

  21.   delay2us(40);                //< 60us<presebcepulse<240us

  22.   return initflag;

  23. }

  24. //通過單總線向從器件寫一個字節

  25. void WriteOneChar(unsigned char byt)

  26. {

  27.   unsigned char i;

  28.   for(i=0;i<8;i++)

  29.   {

  30.     DQ = 1;

  31.               _nop_();

  32.               DQ = 0;

  33.     DQ = byt&0x01;

  34.     delay2us(15);

  35.     DQ = 1;

  36.     byt >>= 1;

  37.   }

  38.   delay2us(5);

  39. }

  40. //通過單總線從從器件讀一個字節

  41. unsigned char ReadOneChar(void)

  42. {

  43.   unsigned char i;

  44.   unsigned char byt;

  45.   for(i=0;i<8;i++)

  46.   {

  47.     DQ = 0;                // 拉低開始讀時間隙

  48.     byt >>= 1;

  49.     DQ = 1;                //單片機釋放總線

  50.     if(DQ)                //18b20有效數據出現

  51.        byt |= 0x80;

  52.               delay2us(30);

  53.   }

  54.   return byt;

  55. }

  56. //溫度轉換、讀取及數據處理器函數

  57. unsigned char rd_temperature(void)

  58. {

  59.   unsigned char low,high;

  60.   char temp;

  61.   init_ds18b20();

  62.   WriteOneChar(0xCC);

  63.   WriteOneChar(0x44); //啟動溫度轉換

  64.   init_ds18b20();

  65.   WriteOneChar(0xCC);

  66.   WriteOneChar(0xBE); //讀取寄存器

  67.   low = ReadOneChar();  //低字節

  68.   high = ReadOneChar(); //高字節

  69.   temp = high<<4;

  70.   temp += ((low&0xf0)>>4);

  71.   return temp;

  72. }

  73. #include<reg52.h>

  74. #include "18b20.h"

  75. #include "display.h"

  76. #include "timer0.h"

  77. #include "Uln2003.h"//用來關掉煩人的蜂鳴器            

  78. #define uint unsigned int

  79. #define uchar unsigned char

  80. sbit buzz = P0^4;

  81. sbit relay = P0^6;

  82. uchar disData[]={2,0,10,1,0,10,0,0};

  83. uchar times=0;

  84. uchar temperature;

  85. bit OneSecFlag=0;

  86. void main(void)

  87. {

  88.       //消除蜂鳴器叫聲

  89.    buzz=0;

  90.    relay=0;

  91.    ULN2003_Latch();

  92.    Init_timer0();

  93.    while(1)

  94.    {

  95.                  if(OneSecFlag)

  96.                  {

  97.        temperature=rd_temperature();

  98.        disData[6]=temperature / 10;

  99.        disData[7]=temperature % 10;

  100.                  OneSecFlag = 0;

  101.                  if(temperature<10||temperature>20)

  102.                  {

  103.                       buzz=1;

  104.             relay=1;

  105.             ULN2003_Latch();

  106.                  }              

  107.                  else

  108.                                           {

  109.                                                         buzz=0;

  110.                 relay=0;

  111.                 ULN2003_Latch();

  112.                                           }

  113.      }

  114.      display(disData); //也可以在這里動態掃描

  115.    }

  116. }

  117. void Timer0_isr(void) interrupt 1 using 1

  118. {

  119. TH0=(65536-50000)/256;            

  120. TL0=(65536-50000)%256;

  121. times++;

  122. //中斷掃描數碼管顯示,也可以放在while(1)中

  123. if(times == 10)//0.5s

  124.    {

  125. times=0;

  126.                  OneSecFlag = 1;

  127.    }

  128. }

  129. 2.思考若要顯示小數點后面2位,數據該如何處理? 寫出數據處理部分程序片段

  130. DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xf7,0x7f};

  131. uchar disData[]={0,0,0,0,0,13,0,0};



  132. void main(void)

  133. {

  134.       //消除蜂鳴器叫聲

  135.    buzz=0;

  136.    relay=0;

  137.    ULN2003_Latch();

  138.    Init_timer0();

  139.    while(1)

  140.    {

  141.      display(disData);//中斷掃描數碼管顯示,也可以放在while(1)中

  142.                  if(OneSecFlag)

  143.                  {

  144.        temperature=rd_temperature();

  145. disData[3]=temperature /1000;

  146. disData[4]=temperature %1000/100;

  147. disData[6]=temperature %100/10

  148. disData[7=temperature/10

  149. OneSecFlag = 0;
復制代碼

全部資料51hei下載地址:

實驗八.doc

254.5 KB, 下載次數: 3, 下載積分: 黑幣 -5

實驗要求.docx

173.04 KB, 下載次數: 2, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文久久| 国产精品一区在线 | 91视视频在线观看入口直接观看 | 国产精品久久一区 | 日韩视频在线免费观看 | 欧美一a一片一级一片 | 黄色大片在线免费观看 | 国产日韩精品久久 | 中文字幕在线观看视频网站 | 中文字幕 在线观看 | 亚洲欧美在线视频 | 网址黄 | 亚洲精品久久久久中文字幕二区 | 成人国产a | 国产一区二区精品在线 | 欧美成人综合 | 亚洲 日本 欧美 中文幕 | 91视频大全 | 自拍偷拍第一页 | 中文字幕亚洲欧美日韩在线不卡 | 国产一区2区 | 青久草视频 | 国产精品国产精品 | 欧美精品日韩精品国产精品 | 精品一区二区在线观看 | 日本涩涩视频 | 超碰在线免费公开 | 久久精品国产v日韩v亚洲 | 最新中文字幕 | 久久久久久免费毛片精品 | 麻豆一区二区三区精品视频 | a免费视频 | 午夜网| 欧美国产精品一区二区三区 | 国产欧美日韩在线一区 | 中文成人在线 | 欧美视频一区 | 久久最新精品视频 | 亚洲视频欧美视频 | 欧美高清dvd | 国产中文在线 |