pcf8591测试程序
#include "24c02.h" SCL = 0;
iic_stop(); void iic_start(void) return 0;
{ }
SDA = 1; else
_nop_(); {
SCL = 1; SCL = 0;
somenop; return 1;
SDA = 0; }
somenop; }
SCL = 0;
} void iic_sendbyte(unsigned char byt)
{
void iic_stop(void) unsigned char i; { for(i=0;i<8;i++)
SDA = 0; {
_nop_(); if(byt&0x80)
SCL = 1; SDA = 1;
somenop; else
SDA = 1; SDA = 0; } somenop;
SCL = 1;
void iic_ack(bit ackbit) byt <<= 1; { somenop;
if(ackbit) SCL = 0;
SDA = 0; }
else }
SDA = 1;
somenop; unsigned char iic_recbyte(void)
SCL = 1; {
somenop; unsigned char da;
SCL = 0; unsigned char i;
SDA = 1; for(i=0;i<8;i++)
somenop; {
} SCL = 1;
somenop;
bit iic_waitack(void) da <<= 1;
{ if(SDA)
SDA = 1; da |= 0x01;
somenop; SCL = 0;
SCL = 1; somenop;
somenop; }
if(SDA) return da;
{ }
1
#ifndef _24C02_H
void wrbyte_24c02(unsigned char #define _24C02_H
add,unsigned char dat)
{ #include "reg52.h"
// Device Address 1100 000 R/W #include "intrins.h"
iic_start();
iic_sendbyte(0xa0); #define somenop
iic_waitack(); {_nop_();_nop_();_nop_();_nop_();_nop_();}
iic_sendbyte(add);
iic_waitack();
iic_sendbyte(dat); sbit SCL = P2^0;
iic_waitack(); sbit SDA = P2^1;
iic_stop();
delay(10); void iic_start(void); } void iic_stop(void);
void iic_ack(bit ackbit); unsigned char rdbyte_24c02(unsigned char void iic_sendbyte(unsigned char byt); add) void wrbyte_24c02(unsigned char { add,unsigned char dat);
// Device Address 1100 000 R/W void delay(unsigned char t);
unsigned char da;
iic_start(); bit iic_waitack(void);
iic_sendbyte(0xa0); unsigned char i2c_recbyte(void);
iic_waitack(); unsigned char rdbyte_24c02(unsigned char
iic_sendbyte(add); add);
iic_waitack();
iic_start();
iic_sendbyte(0xa1); #endif
iic_waitack();
da = iic_recbyte(); #include "reg52.h"
iic_ack(0); #include "24c02.h"
iic_stop();
return da; unsigned char dspflag; } unsigned char cnt;
unsigned char tflag; void delay(unsigned char t) unsigned char code dsp_code_ca[] = { {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0
unsigned char i; x80,0x90};
while(t--)
{ void display(unsigned char d);
for(i=0;i<112;i++); void init_t0(void);
}
} void main()
{
2
//wrbyte_24c02(0x00,0x00); P2 |= 0xC0;
cnt = rdbyte_24c02(0x00); P2 &= 0x3F;
wrbyte_24c02(0x00,cnt+1); }
if((dspflag == 1)&&(d>9))
init_t0(); {
while(1) P0 = 0xFF;
{ P2 |= 0xE0;
display(cnt); P2 &= 0x1F;
}
} P0 = dsp_code_ca[d%100/10];
P2 |= 0xE0; void isr_t0(void) interrupt 1 P2 &= 0x1F; { P0 = 0x40;
tflag++; P2 |= 0xC0;
if(tflag == 16) P2 &= 0x3F;
{ }
tflag = 0; if(dspflag == 2)
dspflag ++; {
if(dspflag == 3) P0 = 0xFF;
dspflag = 0; P2 |= 0xE0;
} P2 &= 0x1F; }
P0 = dsp_code_ca[d%100%10];
void init_t0(void) P2 |= 0xE0; { P2 &= 0x1F;
TMOD = 0x02; P0 = 0x80;
TH0 = 0x06; P2 |= 0xC0;
TL0 = 0x06; P2 &= 0x3F;
ET0 = 1; }
EA = 1; }
TR0 = 1;
}
void display(unsigned char d) {
if((dspflag == 0)&&(d>99))
{
P0 = 0xFF;
P2 |= 0xE0;
P2 &= 0x1F;
P0 = dsp_code_ca[d/100];
P2 |= 0xE0;
P2 &= 0x1F;
P0 = 0x20;
3