欢迎来到天天文库
浏览记录
ID:40259068
大小:40.50 KB
页数:6页
时间:2019-07-29
《C语言单片机开发精确延时》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这是C程序:#include#include#include#defineucharunsignedchar#definetempintDBYTE[0X30]#definetempdfDBYTE[0X31]ucharcodetab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};sbitdat="P1"^4;voidset_ds18b20(); //初始化DS18B20子程序voidget
2、_temperature(); //获得温度子程序voidread_ds18b20(); //读DS18B20子程序voidwrite_ds18b20(ucharcommand);//向DS18B20写1字节子程序voiddelayms(ucharcount); //延时count毫秒子程序voiddisp_temp(); //显示温度子程序voidmain(){ EA="0"; //禁止中断
3、SP="0x60"; //设置堆栈指针 while(1) { get_temperature(); //获得温度 disp_temp(); //显示温度 }}voidset_ds18b20(){ while(1) { uchardelay,flag; flag="0"; dat="0"; //数据线置低电平 delay="250
4、"; while(--delay); //低电平保持500us dat="1"; //数据线置高电平 delay="30"; while(--delay); //低电平保持60us while(dat==0) //判断DS18B20是否发出低电平信号 { delay="120"; //DS18B20响应,延时240us
5、 while(--delay); if(dat) //DS18B20发出高电平初始化成功,返回 { flag="1"; //DS18B20初始化成功标志 break; } } if(flag) //初始化成功,再延时480us { delay="240"; wh
6、ile(--delay); break; } }}voidget_temperature() //温度转换、获得温度子程序{ set_ds18b20(); //初始化DS18B20 write_ds18b20(0xcc); //发跳过ROM匹配命令 write_ds18b20(0x44); //发温度转换命令 disp_temp(); //显示温度,等待转换结束,大于60
7、0ms set_ds18b20(); write_ds18b20(0xcc); //发跳过ROM匹配命令 write_ds18b20(0xbe); //发出读温度命令 read_ds18b20(); //将读出的温度数据保存到tempint和tempdf处}voidread_ds18b20(){ uchardelay,i,j,temp,temph,templ; j="2"; //读2位字节数据 do
8、 { for(i=8;i>0;i--) //一个字节分8位读取 { temp>>=1; //读取1位右移1位 dat="0";
此文档下载收益归作者所有