📄 tmain.c
字号:
//工程模版
#include <Reg52.H>
#include <globe.h>
#include <const.h>
#include <function.h>
sbit SDA=P1^0;
sbit SCL=P1^1;
void IICStart(void)
{
SCL=0; //
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
SCL=0;
SDA=1; //
}
//-----------------停止IIC总线----------------/
void IICStop(void)
{
SCL=0;
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
}
//--------------检查应答位-------------------/
bit IICRecAck(void)
{
SCL=0;
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
CY=SDA; //因为返回值总是放在CY中的
SCL=0;
return(CY);
}
//---------------对IIC总线产生应答-------------------/
void IICACK(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
SDA=1;
}
//-----------------不对IIC总线产生应答---------------/
void IICNoAck(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SCL=0;
}
//-------------------向IIC总线写数据---------------------/
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j=8;
for(;j>0;j--)
{
SCL=0;
sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
SDA=CY;
SCL=1;
}
SCL=0;
}
//----------------------从IIC总线上读数据子程序----------/
unsigned char IICReceiveByte(void)
{
register receivebyte,i=8;
SCL=0;
while(i--)
{
SCL=1;
receivebyte=(receivebyte<<1)|SDA;
SCL=0;
}
return(receivebyte);
}
//---------------一个简单延时程序------------------------/
void Delay(unsigned char DelayCount)
{
while(DelayCount--);
}
//---------------------A/D PCF8591 operation --------------
//waddr:0x0000~0x02F1 RAM Adress
//buf_data: 0x0000~0xffff RAM DATA
//num:data number
#define PCF8591_WRITE 0x92
#define PCF8591_READ 0x93
void WritePCF8591(unsigned char controlbyte,unsigned char wdata)
{
IICStart();
IICSendByte(PCF8591_WRITE); //SLAVE
IICRecAck();
IICSendByte(controlbyte&0x77); //Control byte
IICRecAck();
IICSendByte(wdata); //data byte
IICRecAck();
IICStop();
Delay(255);
Delay(255);
Delay(255);
Delay(255);
}
//wdata:data buffer of AD convert
//num: valid data buffer count
//
void ReadPCF8591(unsigned char *wdata,unsigned char num)
{
IICStart();
IICSendByte(PCF8591_READ); //SLAVE
IICRecAck();
while(--num)
{
*wdata++=IICReceiveByte();
IICACK();
}
*DataBuff=IICReceiveByte(); //read last byte data
IICNoAck();
IICStop();
}
//---------------------END A/D PCF8591 operation --------------
unsigned char buf[10];
main()
{
MCU_Init();
Val_Init();
while(1)
{
WritePCF8591(PCF8591_WRITE,0x80);
WritePCF8591(buf,4);
}
}
//--------------------------------------------
//T0 Interrupt Time is 1ms
//#define TF0_VECTOR 1 /* 0x0B Timer 0 */
//
Timer0Interrupt(void) interrupt TF0_VECTOR using 3
{
TH0 = 0xFC;
TL0 = 0x66;
sys_ms_count++;
}
//-------------------------------------------
//#define UART_VECTOR 4 /* 0x23 UART */
SIOInterrupt(void) interrupt UART_VECTOR using 2
{
if(RI)
{
RI=0;
}
if(TI)TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -