标题: 单片机单总线接口学生实验报告 [打印本页]
作者: 悠哉悠哉 时间: 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语言写出全部程序,并编译,调试。
- #include <reg52.h>
- #include<intrins.h>
- #include"18b20.h"
- sbit DQ = P1^4;
- //延时函数
- void delay2us(unsigned char t) //2us
- {
- while(t--);
- }
- //DS18B20初始化函数
- bit init_ds18b20(void)
- {
- bit initflag = 0;
- DQ = 1;
- delay2us(1);
- DQ = 0;
- delay2us(250); // 延时大于480us
- DQ = 1;
- delay2us(10); // 15us<waits<80us
- initflag = DQ; // initflag等于1初始化失败
- delay2us(40); //< 60us<presebcepulse<240us
- return initflag;
- }
- //通过单总线向从器件写一个字节
- void WriteOneChar(unsigned char byt)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DQ = 1;
- _nop_();
- DQ = 0;
- DQ = byt&0x01;
- delay2us(15);
- DQ = 1;
- byt >>= 1;
- }
- delay2us(5);
- }
- //通过单总线从从器件读一个字节
- unsigned char ReadOneChar(void)
- {
- unsigned char i;
- unsigned char byt;
- for(i=0;i<8;i++)
- {
- DQ = 0; // 拉低开始读时间隙
- byt >>= 1;
- DQ = 1; //单片机释放总线
- if(DQ) //18b20有效数据出现
- byt |= 0x80;
- delay2us(30);
- }
- return byt;
- }
- //温度转换、读取及数据处理器函数
- unsigned char rd_temperature(void)
- {
- unsigned char low,high;
- char temp;
- init_ds18b20();
- WriteOneChar(0xCC);
- WriteOneChar(0x44); //启动温度转换
- init_ds18b20();
- WriteOneChar(0xCC);
- WriteOneChar(0xBE); //读取寄存器
- low = ReadOneChar(); //低字节
- high = ReadOneChar(); //高字节
- temp = high<<4;
- temp += ((low&0xf0)>>4);
- return temp;
- }
- #include<reg52.h>
- #include "18b20.h"
- #include "display.h"
- #include "timer0.h"
- #include "Uln2003.h"//用来关掉烦人的蜂鸣器
- #define uint unsigned int
- #define uchar unsigned char
- sbit buzz = P0^4;
- sbit relay = P0^6;
- uchar disData[]={2,0,10,1,0,10,0,0};
- uchar times=0;
- uchar temperature;
- bit OneSecFlag=0;
- void main(void)
- {
- //消除蜂鸣器叫声
- buzz=0;
- relay=0;
- ULN2003_Latch();
- Init_timer0();
- while(1)
- {
- if(OneSecFlag)
- {
- temperature=rd_temperature();
- disData[6]=temperature / 10;
- disData[7]=temperature % 10;
- OneSecFlag = 0;
- if(temperature<10||temperature>20)
- {
- buzz=1;
- relay=1;
- ULN2003_Latch();
- }
- else
- {
- buzz=0;
- relay=0;
- ULN2003_Latch();
- }
- }
- display(disData); //也可以在这里动态扫描
- }
- }
- void Timer0_isr(void) interrupt 1 using 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- times++;
- //中断扫描数码管显示,也可以放在while(1)中
- if(times == 10)//0.5s
- {
- times=0;
- OneSecFlag = 1;
- }
- }
- 2.思考若要显示小数点后面2位,数据该如何处理? 写出数据处理部分程序片段
- DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xf7,0x7f};
- uchar disData[]={0,0,0,0,0,13,0,0};
-
- void main(void)
- {
- //消除蜂鸣器叫声
- buzz=0;
- relay=0;
- ULN2003_Latch();
- Init_timer0();
- while(1)
- {
- display(disData);//中断扫描数码管显示,也可以放在while(1)中
- if(OneSecFlag)
- {
- temperature=rd_temperature();
- disData[3]=temperature /1000;
- disData[4]=temperature %1000/100;
- disData[6]=temperature %100/10
- disData[7=temperature/10
- OneSecFlag = 0;
复制代码
全部资料51hei下载地址:
-
-
实验八.doc
254.5 KB, 下载次数: 3, 下载积分: 黑币 -5
-
-
实验要求.docx
173.04 KB, 下载次数: 2, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |