📄 tmp100.txt
字号:
#include <stdio.h>
#include <REG52.H>
#include <intrins.h>
#define nop() _nop_()
//-------------------------
sbit led2=P1^6;
sbit scl=P3^7; // SCL
sbit sda=P3^6; // SDA
//-----------------
static unsigned char tmp[2];//温度寄存器:tmp[0]为高八位,tmp[1]低八位。
void IIC_read(unsigned char address); //从IIC设备的地址address中读取一个字节数据
void IIC_write(unsigned char address,unsigned char info);
//向IIC设备的address地址中写入一字节数据info
void IIC_init(); //初始化子程序
void delay(unsigned char x);
void delay_ms(unsigned int n);
void IIC_init();
void start();
void stop();
void writex(unsigned char j);
//unsigned char readx();
void T_Ack();
void S_Ack();
void delay(unsigned char x)
{
unsigned int i;
for(i=0;i<x;i++);
_nop_();
}
void IIC_init()
{
scl=1; nop(); sda=1; nop();
}
void start()
{
sda=1; nop(); scl=1; nop(); sda=0; nop(); scl=0; nop();
}
void stop()
{
sda=0; nop(); scl=1; nop(); sda=1; nop();
}
void writex(unsigned char j)
{
unsigned char i,temp;
temp=j;
for (i=0;i<8;i++){
temp=temp<<1; scl=0; nop(); sda=CY; nop(); scl=1; nop();
}
scl=0; nop(); sda=1; nop();
}
/*
unsigned char readx()
{
unsigned char i,j,k=0;
scl=0; nop(); sda=1;
for (i=0;i<8;i++){
nop(); scl=1; nop();
if (sda==1) j=1;
else j=0;
k=(k<<1)|j; scl=0;
}
nop(); return(k);
}
*/
void T_Ack()
{
unsigned char i=0;
scl=1; nop();
while ((sda==1)&&(i<255))i++;
scl=0; nop();
}
void S_Ack()
{
sda=0;
scl=1;
scl=0;
sda=1;
}
void IIC_read(unsigned char address)
{
unsigned char i,j,k;
start();
writex(0x90); //器件地址,写入
T_Ack();
writex(address); //寄存器地址
T_Ack();
start();
writex(0x91); T_Ack(); //器件地址,读出
//------------------------char readx()--------------------
for(j=0;j<2;j++)
{
scl=0; nop(); sda=1;
for (i=0;i<8;i++)
{
nop(); scl=1; nop();
if (sda==1) k=1;
else k=0;
tmp[j]=(tmp[j]<<1)|k; scl=0;
}
S_Ack();
}
//-----------------------------------------------------
stop();
delay(10);
}
void IIC_write(unsigned char address,unsigned char info)
{
EA=0;
start();
writex(0x90); //器件地址
T_Ack();
writex(address); //寄存器地址
T_Ack();
writex(info);
T_Ack();
stop();
EA=1;
delay(50);
}
/********************延时函数***********************************/
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
for(j=0;j<1140;j++)
;
}
/*******************************************************************/
//================主函数=================================//
main (){
unsigned char c=0;
IIC_init();
IIC_write(0x01,0x60);//配置tmp100,精度为0.0625,温度连续转换,
SCON=0x50; //串口模式1,允许接收
TMOD=0x20; //定时器1为模式2,8-bit 自动装载方式
PCON=0x00; //波特率不倍增
TL1=0xfd;
TH1=0xfd; //波特率9600
TI=1; //TI 置1,以发送第一个字节
TR1=1; //启动定时器 T1
EA=1; // CPU所有中断开(IE最高位MSB)
for(;;){
IIC_read(0X00);
printf("%c",tmp[0]);
printf("%c",tmp[1]);
led2=0;
delay_ms(100);
c=0xaa;
printf("%c",c);
led2=1;
}
}
//===================================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -