📄 275.c
字号:
/*****************************************************************
*文件名: IIC_Test.C
*版权: 周立功单片机研究所
*功能: LPC900 IIC总线互为主从演示程序
*日期: 2004/5/20
******************************************************************/
#include "reg932.h"
#define uchar unsigned char
#define uint unsigned int
//uchar buff[2];
union
{
uchar buff[2];
uint ttt;
}kkk;
unsigned long temp;
uint temp1;
uchar len;
uchar wendu[9];
void UART_Init();
void IIC_Init();
void SetSlave();
void SendAddr(uchar c);
void SendData(uchar c);
bit ReadData(uchar *c);
void Delayms(unsigned int iii);
//--------------------------------
void delay()
{
uchar k;
for(k=0;k<10;k++)
{
_nop_();
}
}
void Start()
{
EA=0;
SDA=1;
delay();
SCL=1;
delay();//INI
SDA=0;
delay();//START
SCL=0;
delay();
}
void Stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
EA=1;
}
void WaitAck(void)
{
unsigned char time=0;//因故障接收方无ACK,超时值为255。
SDA=1;
delay();
SCL=1;
delay();
SCL=0;
/*while((SDA)&&(time<254))
{
time++;
}*/
while(SDA);
SCL=0;
}
void Ack()
{
SCL=0;
delay();
SDA=0;
delay();
SCL=1;
delay();
SCL=0;
}
void SendByte(unsigned char WriteData)
{
unsigned char i;
for (i=0; i<8; i++)
{
SCL=0;
delay();
if (((WriteData >> 7) & 0x01) == 0x01)
{
SDA=1;
}
else
{
SDA=0;
}
delay();
SCL=1;
WriteData = WriteData << 1;
delay();
}
SCL=0;
SDA=1;
delay();
}
unsigned char ReceiveByte(void)
{
unsigned char i;
unsigned char TempBit = 0;
unsigned char TempData = 0;
SCL=0;
delay();
SDA=1;
for (i=0; i<8; i++)
{
delay();
SCL=1;
delay();
if (SDA)
{
TempBit = 1;
}
else
{
TempBit = 0;
}
TempData = (TempData << 1) | TempBit;
SCL=0;
}
delay();
return(TempData);
}
void Read275(unsigned char address)
{
Start();
SendByte(0x91); //读
WaitAck();
kkk.buff[0]=ReceiveByte(); //读高8位
Ack(); //CUP送低
kkk.buff[1]=ReceiveByte(); //读低8位
Ack();
Stop();
temp1=kkk.ttt;
if(temp1&0x8000) //等于1则温度为零下,原因参见TMP275手册
{
kkk.ttt = kkk.ttt>>4;
kkk.ttt = kkk.ttt-0x01;
kkk.ttt = ~kkk.ttt;
kkk.ttt = kkk.ttt & 0x0fff;
wendu[0]='-';
}
else
{
kkk.ttt= kkk.ttt>>4;
wendu[0]='+';
}
temp = (unsigned long)kkk.ttt*625;
temp1 = temp/100;
wendu[1]=temp1/10000+0x30;
temp1 = temp1%10000;
wendu[2]=temp1/1000+0x30;
temp1 = temp1%1000;
wendu[3]=temp1/100+0x30;
temp1 = temp1%100;
wendu[4]=0x2e;
wendu[5]=temp1/10+0x30;
wendu[6]=0x0d;
wendu[7]=0x0a;
}
void main()
{
Delayms(1); //延时1ms,等待从机完成IIC初始化
Start();
SendByte(0x90); //写
WaitAck();
SendByte(0x01); //指向温度寄存器
WaitAck();
SendByte(0x60); //指向温度寄存器
WaitAck();
Stop();
Start();
SendByte(0x90); //写
WaitAck();
SendByte(0x00); //指向温度寄存器
WaitAck();
Stop();
while(1)
{
Read275(0x90);
for(len=0;len<9;len++)
{
TI=0;
SBUF=wendu[len];
while(!TI);
}
Delayms(1000);
}
}
void Delayms(unsigned int iii)
{
unsigned int j;
while(iii>0)
{
for(j=0;j<=669;j++); iii--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -