📄 testbedforcs5463.c
字号:
/* TEST BED FOR TESTING SINGLE PHASE ENERGY MEASUREMENT IC CS5463 IN HYPER TERMINAL*/
/* CREATED BY B.M.S.C.E FROM BANGALORE */
#include <stdio.h>
#include <string.h>
#include <reg8253.h>
sbit led1=P2^3; /* indication start of programme execution*/
void serialsend(unsigned long value6);
unsigned char value1,buffer[10],index,value4,state,SEND1[4],BUFFER1[4];
unsigned long value2,value3,temp8;
void msdelay(unsigned int itime)
{
unsigned int i,j;
for(i=0;i<itime;i++)
for(j=0;j<1275;j++);
}
masterio(unsigned char SENDDATA)
{ unsigned char RECEDATA;
SPDR = SENDDATA;
while ((SPSR & 0x80) == 0);
RECEDATA=SPDR;
return(RECEDATA);
}
void send_l(unsigned long dd)
{
unsigned long temp;
int I;
temp=dd&0xff000000;
temp=temp>>24;
SEND1[0]=temp;
temp=dd&0x00ff0000;
temp=temp>>16;
SEND1[1]=temp;
temp=dd&0x0000ff00;
temp=temp>>8;
SEND1[2]=temp;
temp=dd&0x000000ff;
SEND1[3]=temp;
for(I=0;I<4;I++)
masterio(SEND1[I]); /* reads the data from cs5463 to buffer*/
}
unsigned long read_l(unsigned char value4)
{ unsigned long int temp;
unsigned char I;
unsigned char value5;
temp=0x00000000;
value5=0x00;
value5=value4<<1;
value5=value5&0x3e;
SEND1[0]=value5;
SEND1[1]=0xFF;
SEND1[2]=0xFF;
SEND1[3]=0xFF;
for(I=0;I<4;I++)
BUFFER1[I]=masterio(SEND1[I]); /* reads the data from cs5463 to buffer*/
temp=(BUFFER1[0]*16777216)+ (BUFFER1[1]*65536)+ (BUFFER1[2]*256)+BUFFER1[3];
return(temp);
}
/*---------------- main-------------------*/
void main()
{
char m;
SPCR = 0x53;
SCON=0x50;EA=1;ES=1;
TMOD=0x25;TL0=0x00;
TH0=0x00;TH1=0xFD;TR1=1;
TR0=1;
index=0;state=0;
masterio(0xFF);
masterio(0xFF);
masterio(0xFF);
masterio(0XFE);
for(m=0;m<100;m++);
send_l(0x40000001);
send_l(0x64000060);
send_l(0x74000004);
masterio(0xE8);
state=0;
while(1)
{
switch (state)
{ case 0 :led1=0;
msdelay(2);
led1=1;
break;
case 1: masterio( value1);
state=0;
break;
case 2: send_l (temp8);
state = 0;
break;
case 3: value3=read_l(value4);
state=0;
serialsend(value3);
break;
case 4: masterio(0xFF);
masterio(0xFF);
masterio(0xFF);
masterio(0XFE);
masterio(0X80);
msdelay(3);
send_l(0x40000001);
send_l(0x64000060);
send_l(0x74000004);
masterio(0xE8);
state=0;
break;
default: break;
}
}
}
void serialsend(unsigned long value6)
{ unsigned long temp4,temp5;
unsigned char i,j,buf[8];
temp4=value6;
j=0;
temp5=0x0000000f;
for (i=0;i<8;i++)
{ buf[j]=(temp4&temp5);
temp4=temp4>>4;
if (buf[j]<10) buf[j]= (buf[j]+0x30);
else buf[j]= (buf[j]+0x37);
j++;
}
for (i=8;i>0;i--)
{ ES=0;TI=0;
SBUF=buf[i-1];
while (!TI);TI=0;
ES=1;
}
}
void serial (void) interrupt 4
{
unsigned char temp7,i;
if (TI)
TI=0;
if (RI)
{RI=0;
temp7=SBUF;
SBUF=temp7;
buffer[index]=temp7;
if (temp7=='z')
{ switch ( buffer[0])
{ case 'a' : if (buffer[1]>0x41)
buffer[1]=buffer[1]-0x57;
else buffer[1]=buffer[1]-0x30;
if (buffer[2]>0x41)
buffer[2]=buffer[2]-0x57;
else buffer[2]=buffer[2]-0x30;
buffer[1]=buffer[1]<<4;
value1=buffer[1]+buffer[2];
index=0; state=1;
break;
case 'b': for(i=1;i<9;i++)
{if (buffer[i]>0x41)
buffer[i]=buffer[i]-0x57;
else buffer[i]=buffer[i]-0x30;
buffer[i]=buffer[i]&0x0f;
}
temp8=0x00000000;
for(i=1;i<8;i++)
{ temp8=temp8 | buffer[i];
temp8=temp8<<4;
}
temp8=temp8|buffer[8];
value2=temp8;
state=2;
index=0;
break;
case 'c': buffer[1]=buffer[1]&0x0f;
buffer[2]=buffer[2]&0x0f;
value4= buffer[1]*10+buffer[2];
state=3;
index=0;
break;
case 'r': state=4;
index=0;
break;
}
}
else index++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -