串口
#include<stc15f2k60s2.h>
#include"i2c.h"
extern unsigned char iic_n,iic_add;
extern bit flag_read;
void ConfigUART(unsigned int baud)
{
SCON=0x50;
AUXR|=0x10;
T2L=(65536-(11059200/4/12)/baud);
T2H=(65536-(11059200/12/4)/baud)>>8;
ES=1;
}
void uart_writeByte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void uart_write(unsigned char dat)//转化字符形式发送
{
unsigned char j;
unsigned char dat3[4];
dat3[0]=dat/100%10;
dat3[1]=dat/10%10;
dat3[2]=dat%10;
dat3[3]=',';
for(j=0;j<4;j++)
{
switch(dat3[j])
{
case 0:uart_writeByte('0');break;
case 1:uart_writeByte('1');break;
case 2:uart_writeByte('2');break;
case 3:uart_writeByte('3');break;
case 4:uart_writeByte('4');break;
case 5:uart_writeByte('5');break;
case 6:uart_writeByte('6');break;
case 7:uart_writeByte('7');break;
case 8:uart_writeByte('8');break;
case 9:uart_writeByte('9');break;
case ',':uart_writeByte(',');break;
default:break;
}
}
}
void uart_read(unsigned char da)
{
unsigned char dat3[3];
static unsigned char i,k,dat,add;
static bit tempread,tempwirte;
switch(da)
{
case '0':dat3=0;i++;break;
case '1':dat3=1;i++;break;
case '2':dat3=2;i++;break;
case '3':dat3=3;i++;break;
case '4':dat3=4;i++;break;
case '5':dat3=5;i++;break;
case '6':dat3=6;i++;break;
case '7':dat3=7;i++;break;
case '8':dat3=8;i++;break;
case '9':dat3=9;i++;break;
case '-':tempread=1;break;
case '+':tempwirte=1;break;
default:break;
}
if(i==3&&tempwirte==1)
{
dat=dat3[0]*100+dat3[1]*10+dat3[2];
if(k==0)
add=dat;
k=2;
if(k==2)
iic_write(add,dat);
add++;
tempwirte=0;
i=0;
}
if(i==3&&tempread==1)
{
dat=dat3[0]*100+dat3[1]*10+dat3[2];
if(k==2)
iic_add=dat;
k=0;
if(k==0)
{
iic_n=dat;
}
flag_read=tempread;
tempread=0;
i=0;
}
}
|