#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,a;
uchar x;uchar y;uchar z;
uchar code table[]="Voltage Current Power";
sbit SD0=P0^1;
sbit INT=P0^0;
sbit SCLK=P0^5;
sbit SDI=P0^3;
sbit CS=P0^4;
sbit RESET=P0^2;
void Delay(uchar k)
{
uchar i,j;
for(i=0;i<k;i++)
for(j=0;j<100;j++);
}
void CS5463Init(void)
{
uchar i;
RESET=1;Delay(5);
RESET=0;Delay(5);
RESET=1;
SDI=0;
SCLK=0;
CS=0;Delay(5);
SDI=1;
for(i=0;i<32;i++)
{
SCLK=1;Delay(2);
SCLk=0;Delay(2);
}
SDI=0;Delay(2);
SCLK=1;Delay(2);
SCLK=0;
}
void CS5463Write(uchar com,uchar dat1,uchar dat2,uchar dat3)
{
uchar o,p,r,q;
SCLK=0;
for(o=0;o<8;o++)
{
SDI=(bit)(com&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
com<<=1;
}
for(p=0;p<8;p++)
{
SDI=(bit)(dat1&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
dat1<<=1;
}
for(q=0;q<8;q++)
{
SDI=(bit)(dat2&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
dat2<<=1;
}
for(r=0;r<8;r++)
{
SDI=(bit)(dat3&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
dat3<<=1;
}
}
uchar CS5463Read(uchar coml,uchar x,uchar y,uchar z)
{
uchar s,t,u,v,f=0xfe,g=0xfe,h=0xfe;
SCLK=0;
for(s=0;s<8;s++)
{
SDI=(bit)(coml&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
coml<<=1;
}
for(t=0;t<8;t++)
{
SDI=(bit)(f&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
f<<=1;x<<=1;
x|=(uchar)SD0;
}
return (x);
for(u=0;u<8;u++)
{
SDI=(bit)(g&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
g<<=1;y<<=1;
y|=(uchar)SD0;
}
return (y);
for(v=0;v<8;v++)
{
SDI=(bit)(h&0x80);
SCLK=0;
Delay(2);
SCLK=1;
Delay(2);
h<<=1;z<<=1;
z|=(uchar)SD0;
}
return (z);
}
void ComInit()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
TR1=1;
REN=1;
EA=1;
ES=1;
}
void send(uchar m,uchar b)
{
uchar l;
if(flag==1)
{
ES=0;flag=0;
for(l=0;l<m;l++)
{
SBUF=TAB[1];
while(!TI);
Ti=0;
}
SUBF=b;
while(!TI);
TI=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
void main()
{
while(1)
{
ComInit();
CS5463Init();
CS5463Write(0x5e,0x80,0x00,0x00);
CS5463Write(0x40,0x00,0x00,0x01);
CS5463Write(0x4a,0x00,0x0f,0xa0);
CS5463Write(0x74,0x00,0x00,0x00);
CS5463Write(0x64,0x80,0x00,0x01);
CS5463Read(0xe8,x,y,z);
CS5463Read(0x10,x,y,z);
send(22,z);
send(22,y);
send(22,z);
}
}
void Srei() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
|