4.2 初始化程序及主程序框图
(1) 初始化程序: ORG 0100H
MOV TMOD,#20H ;T1位方式2 MOV TH1,#0FAH ;波特率为4800 MOV TL1,#0FAH MOV PCON,#80H
MOV SCON,#0F0H ;串口方式为3 SETB TR1 ;启动T1
SETB PS ;串口中断优先级位高级 SETB EA ;开所有中断 SETB ES ;开串口中断 SETB IT0 ;INT0为边沿触发 SETB EXO ;开INT0
(2) 主程序框图 (图4-1) 开始 T1为方式2,波特率4800b/s 设串口中断为高级,串口方式为3,SM2=1 INT0设为边沿触发 开T1中断,串口中断,INT0中断 设置数据区地址指针 数据采集,处理 显示调用报警程序图4-1 主程序框图
19
4.3 子程序框图
(1) 串口中断 (2) 数据采集
保护现场N 接收?N 地址相符? 接受数据 数据处理 送相应存储区 恢复现场 返回
图4-2 串口中断
保护现场 工作寄存器赋初值 DPTR指向0809测温口 设INT1中断为边沿触发开INT1中断启动0809等待中断图4-3数据采集
20
4.4系统的主要程序
1温度采集程序 #include
#define uchar unsigned char #define uint unsigned int
sbit DQ=P1^3; //ds18b20 端口
uchar Temp_Integer=0; uchar Temp_Decimal=0; uchar fg=0;
void delay2(uint us) {
while(us--); }
uchar Init_DS18B20(void) { uchar x=0;
DQ = 1; //DQ复位 delay2(8); //稍做延时
DQ = 0; //单片机将DQ拉低 delay2(80); //精确延时 大于480us DQ = 1; //拉高总线
21
delay2(10);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay2(5); return x; }
uchar ReadOneChar(void) //读一个字节,\{
uchar i=0; uchar dat = 0; for (i=8;i>0;i--) {
DQ = 0; // 给脉冲信号 dat>>=1;
DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay2(5); }
return(dat); }
void WriteOneChar(unsigned char dat) //写一个字节 {
uchar i=0; for (i=8; i>0; i--) {
DQ = 0; DQ = dat&0x01; delay2(5);
22
DQ = 1; dat>>=1; } delay2(5); }
/**********************DS18b20读取主函数,整个流程5ms************************/
uchar ReadTemperature(void) //读取温度 {
uchar L_18B20=0; uchar H_18B20=0;
Init_DS18B20();
WriteOneChar(0xCC); // skip:跳过读序号列号的操作 WriteOneChar(0x44); // convert:启动温度转换 delay2(200);
Init_DS18B20();
WriteOneChar(0xCC); //skip:跳过读序号列号的操作
WriteOneChar(0xBE); //read:读取温度寄存器,前两个就是温度
L_18B20=ReadOneChar(); //读取温度低八位数据 H_18B20=ReadOneChar(); //读取温度高八位数据
if(H_18B20>0x7f) //最高位为1时温度是负 {
左右
23
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库毕业设计(论文)-基于单片机的大棚温湿度检测报警系统1(5)在线全文阅读。
相关推荐: