📄 iisc_step4.c
字号:
#include <stdio.h>
#include <string.h>
#include <reg8253.h>
sfr ldata=0x80; /* port0 for lcd data*/
sbit busy=P0^7; /*busy flag for lcd p0.7 */
sbit rs=P2^0; /*register select of lcd p2.0 */
sbit rw=P2^1; /*read or write select for lcd*/
sbit en=P2^2; /* enable lcd */
sbit led1=P2^3; /* indication start of programme execution*/
void serialsend(unsigned long);
unsigned char value1,buffer[10],index,value4,state,SEND1[4],BUFFER1[4],ascii[12];
unsigned long value2,value3,temp8;
// unsigned char second_line=0xc0 ;
void lcddisplay()
{
// unsigned char i;
unsigned char stringcmd[6]={0x38,0x0E,0x01,0x06,0x0C,0x80};
unsigned char string[]="B.M.S.C.E ELECTRICAL DEP. ";
unsigned char second_line=0xc0 ;
int len1 = strlen(stringcmd),countcmd,count;
unsigned int len=strlen(string);
unsigned char lccmd;
void lcddata(unsigned char);
void lcdcmd(unsigned char);
void delay(void);
void lcdready(void);
void msdelay(unsigned char);
for (countcmd = 0; countcmd < len1; countcmd++)
{
lccmd=stringcmd[countcmd];
lcdcmd(lccmd);
}
for (count =0;count<len;count++)
{
lcddata(string[count]);
}
lcdcmd(second_line);
}
/*---------------------------------------------*/
void lcdcmd(unsigned char value)
{
lcdready(); /*is LCD ready?*/
ldata=value; /*issue command code*/
rs=0; /*RS=0 for command*/
rw=0; /*R/W=0 to write to LCD*/
en=1; /*E=1 for H-to-L pulse*/
msdelay(1);
en=0;
}
/*---------------------------------------------*/
void lcddata(unsigned char value)
{
lcdready(); /*is LCD ready?*/
ldata=value; /*issue data */
rs=1; /*RS=1 for data*/
rw=0; /*R/W=0 to write to LCD*/
en=1; /*E=1 for H-to-L pulse*/
msdelay(1);
en=0;
}
/*---------------------------------------------*/
void lcdready()
{
busy=1; /*make P0.7 input port*/
rs=0; /*RS=0 access command reg*/
rw=1; /*R/W=1 read command reg*/
while(busy==1) /*stay until busy flag=0*/
{
en=0; /*E=1 for H-to-L pulse*/
msdelay(1);
en=1; /*E=0 H-to-L pulse*/
//busy=0; //forcing to zero for testing
}
}
/*-----------------------------------------------*/
void msdelay(unsigned char 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;
unsigned char 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,STATUS;
unsigned char value5;
while(1){
masterio(0x1E);
STATUS=masterio(0xFF);/* STATUS READ OF CS 5463 */
masterio(0xFF);
masterio(0XFF);
if((STATUS&0X80)==1)
{masterio(0x5E);
masterio(0x80);/* STATUS write OF CS 5463 */
masterio(0x00);
masterio(0X00);
break;
}
}
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[1];
//temp=(BUFFER1[0]*16777216)+ (BUFFER1[1]*65536)+ (BUFFER1[2]*256)+BUFFER1[3];
return(temp);
}
asciiconv(unsigned int bin)
{
unsigned char j,a[11],jj,mask=0x80,i;
long int val1=0,v1=50000000;
ascii[1]='0';
ascii[2]='.';
for(i=0;i<8;i++) /* converting fractional binary number to decimal*/
{ if(bin&mask)
val1=val1+v1;
v1=v1/2;
mask=mask>>1;
}
for(j=0;j<8;j++)
{ a[j]=(val1%0x0a)+48;
val1=val1/0x0a;
}
j=7;
for(jj=3;jj<10;jj++)
{
ascii[jj]=a[j];
j--;
}
ascii[10]='\n';
}
/*------------2's compliment---------------------*/
compliment(unsigned char HH)
{
int mask1=0x80;
unsigned char comp,num;
if(HH&mask1) /* if MSB is set */
{
num=(HH&0x7F); /* set MSB bit to zero*/
ascii[0]='-';
comp=(~num)+0x01; /* 2's compliment*/
asciiconv(comp);
}
else
{
ascii[0]='+';
asciiconv(HH);
}
}
serialport(unsigned char RS232)
{ ES=0;TI=0; /*ready to transmit */
SBUF=RS232;
while(TI==0);
TI=0; ES=1; /*poll TI until all the bits are transmitted */
//TR1=0;
}
void serialsend(unsigned long value6)
{unsigned char i,HH;
//value6=value6&0x000000ff;
HH=value6;//>>16;
compliment(HH);
for (i=0;i<11;i++)
serialport(ascii[i]);
lcddisplay();
for (i=0;i<11;i++)
lcddata(ascii[i]);
}
/*---------------- 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;
// lcddisplay();
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 :
//lcddisplay();
// lcdcmd(second_line);
// serialsend(value3);
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(0x80);
msdelay(3);
masterio(0xFF);
masterio(0xFF);
masterio(0xFF);
masterio(0XFE);
send_l(0x40000001);
send_l(0x64000060);
send_l(0x74000004);
masterio(0xE8);
state=0;break;
default: break;
}
}
}
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 + -