LM75A的数字温度计的设计
void Write_intdata(unsigned char addr,unsigned int tempdata)//写16位寄存器
{
unsigned char datahigh;
unsigned char datalow;
datahigh=(unsigned char)(tempdata>>8);
datalow=(unsigned char)(tempdata&0x00FF);
start_lm75();
send_byte(WADDR);
Check_Ack();
if(F0)
{
}
Ack();
send_byte(addr);
Check_Ack();
if(F0)
{
}
Ack();
send_byte(datahigh);
send_byte(datalow);
Check_Ack();
if(F0)
{
}
Ack();
delay();
stop_lm75();
}
unsigned char read_chardata(unsigned char addr) //读8位寄存器
{
unsigned char temp;
start_lm75();
send_byte(WADDR);
Check_Ack();
if(F0)
{
}
Ack();
send_byte(addr);
Check_Ack();
if(F0)
{
}
Ack();
send_byte(RADDR);
Check_Ack();
if(F0)
{
}
Ack();
temp=read_byte();
stop_lm75();
return (temp);
}
unsigned int read_intdata(unsigned char addr) //读16位寄存器
{
unsigned char temphigh,templow;
start_lm75();
send_byte(WADDR);
Check_Ack();
if(F0)
{
}
Ack();
send_byte(addr);
Check_Ack();
if(F0)
{
}
Ack();
send_byte(RADDR);
Check_Ack();
if(F0)
{
}
Ack();
temphigh=read_byte();
templow=(read_byte())&0xe0;
stop_lm75();
if(!(temphigh&0x80))
{
return (((temphigh<8)|templow)>>5);
}
else
{
return (0x800-((temphigh<8)|templow)>>5);
}
}
void initial() // 初始化LM75A
{
Write_chardata(CONF,0X20); //0S中断模式,温度转换正常模式
Write_intdata(ALARM,0x3300); //100度极限 由高9位有效位组成 BIT15为1表示为负为0表示为正超过100度 触发外部中断0
Write_intdata(DELAY,0X4A80); // 95度后不报警
}
void int0_int() interrupt 0 using 1 // 外部中断0服务函数
{
BP=0;
delay_xms(1000);
BP=1;
delay_xms(1000);
}
void t0_int() interrupt 1 using 1 //定时器0中断服务函数
{
}
void main() // 入口函数
{
IP=0X01;
TMOD=0X01;
TH0=0xdc;
TL0=0xff;
IT0=0;
ET0=1;
TR0=1;
EX0=1;
EA=1;
initial();
while(1)
{
}
}
LM75A数字温度 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)