?? tmain.c
字號(hào):
//工程模版
#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_();
}
//--------------檢查應(yīng)答位-------------------/
bit IICRecAck(void)
{
SCL=0;
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
CY=SDA; //因?yàn)榉祷刂悼偸欠旁贑Y中的
SCL=0;
return(CY);
}
//---------------對(duì)IIC總線產(chǎn)生應(yīng)答-------------------/
void IICACK(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
SDA=1;
}
//-----------------不對(duì)IIC總線產(chǎn)生應(yīng)答---------------/
void IICNoAck(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SCL=0;
}
//-------------------向IIC總線寫(xiě)數(shù)據(jù)---------------------/
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j=8;
for(;j>0;j--)
{
SCL=0;
sendbyte<<=1; //無(wú)論C51怎樣實(shí)現(xiàn)這個(gè)操作,始終會(huì)使CY=sendbyte^7;
SDA=CY;
SCL=1;
}
SCL=0;
}
//----------------------從IIC總線上讀數(shù)據(jù)子程序----------/
unsigned char IICReceiveByte(void)
{
register receivebyte,i=8;
SCL=0;
while(i--)
{
SCL=1;
receivebyte=(receivebyte<<1)|SDA;
SCL=0;
}
return(receivebyte);
}
//---------------一個(gè)簡(jiǎn)單延時(shí)程序------------------------/
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;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -