这个51单片机电路里边,需求用到:
下面是EEPROM里边的数据贮存结构[嘻嘻,图像得有点欠好,技术问题请见谅啦..]
首先从主控进口代码处进行剖析:
#define EEPROM_StartAddr 0x4E
#define EEPROM_StartFlag 0xB0
LED=1;
BitData=read_add(EEPROM_StartAddr);
if (BitData!=EEPROM_StartFlag) while(1);
ListTotal=read_add(EEPROM_StartAddr+1);
for(i=0;i
{
CtrlList[i].AlarmTemp=read_add((EEPROM_StartAddr+2)+i*3);
CtrlList[i].CtrlPort =read_add((EEPROM_StartAddr+2)+i*3+1);
}
LED=0;
代码首先会从EEPROM里边读取0x4E位里边的数据来和EEPROM初步数据位标志进行比照,判别这个EEPROM的数据格式的正确性,因为没有让
主控芯片对每一个数据位进行校验,那么这便是一个简略的验证办法,要是对每一位数据都要进行的验证的话得需求一个牢靠,高效的算法,这样虽
然安全,不过会对主控芯片初始化有必定的功能影响
判别初步数据位失利后,主控芯片会进入到卡死状况[见代码 while(1); ,死循环,处理器永久也跳不出这个循环到外面]
判别初步数据位成功后,下一步就从EEPROM的0x4F位读取出需求操控温度的项目总数,然后再依照这个项目总数来进行数据位偏移来读取即将
操控的温度数值和警报操控端口,留意两个操控数据结构中心需求用一个NULL[即0x00]来隔开来,避免数据结构被打乱
从EEPROM里边读取完结数据后,主控芯片作业指示灯发光,初步进入温度操控
首要代码:
while(1)
{
TempData=get_temp();
BitData=(TempData%1000/100)*10;//十位温度。
BitData=(TempData%1000%100/10)+BitData;//个位温度。
for(i=0;i
{
CtrlElec=(CtrlList[i].AlarmTemp>=BitData)?0:1;
CtrlListPort=CtrlList[i].CtrlPort;
CtrlPort(CtrlListPort,CtrlElec); //契合条件输出底电,不契合输出高电
delayb(100);
}
delayb(200);
}
这个可不像SetTimer()相同,用SetTimer()指定了的函数不需求加上while 循环,仅且把上面的代码当作线程来看待,让这个线程运转的代码段永久
都是这个,假设线程的代码一旦履行结束[也便是说跳出了while 死循环],那么它就会封闭掉自己和开释归于自己的TLS[线程本地贮存]
先从DS18B02里边读取出来温度值,然后再对温度进行转化,把转化好的温度再和从EEPROM里边读取出来的数据结构进行比较
一个温度操控判别周期约一秒[以12MHz来核算的话,应该是略大于一秒而不会小于一秒]..
下面是温度操控器的电路:
5V供电电路:
主控芯片及外围器材电路:
电路顶用继电器来操控外部电路的开闭,G[公共端] B[常闭端] K[常初步] 便是让继电器操控外部电路的开关,5V电压和P1^0端口是用来操控继电器的G端和B,K端通路.原理如下