|
#include
#include //Keil library
#include
//#include
#define uchar unsigned char
#define uint unsigned int
#define BEGINFLAG 'k'
#define ENDFLAG 'j'
#define CONNECTION_ORDER '0'
#define MAXLEN 24
uchar combuf[MAXLEN];
uchar t_buf[MAXLEN];
uchar RI_len;
//uchar code str[20]={'0','1','2','3','4','5','6','7','8','9'};
void com_init()
{
TMOD=0x20; /*晶振11.0592,波特率9600*/
TL1=0xfd;
TH1=0xfd;
SCON=0xd8; /*串口接受字符RI置位,允许串口接收*/
PCON=0x00;
IP=0x00;
TR1=1;
//REN=1;
RI=1;
}
void sendbyte(unsigned char word)
{
SBUF=word;
while(TI==0);
TI=0;
}
void send_data(uint strLen) //将strlen个字符发送到上位机
{
uint i=0;
do
{
sendbyte( *(t_buf + i) );
i++;
}while( i
}
void serial(void) interrupt 4
{
uchar word;
//uchar a[10];
uchar i=0;
if(RI) //确实有接收中断了
{
RI=0;
word=SBUF;
//combuf=word;
/*do
{
combuf[RI_len++]=word;
}
while(word!='\n');
RI_len=0;*/
if(RI_len==0) //如果还没有接收到起始位
{
if(word=='k') //判断是否起始标志位
RI_len++; //是准备接收下一位
else
RI_len=0; //不是,继续等待起始位
}
else if(RI_len>0&&RI_len<10) //判断是否接收够十位数据
t_buf[RI_len++]=word; //不够,把接收到的数据放入接收缓存区
else RI_len=0; //缓冲区已满,清除缓存区内数据重新接收
}
if(TI) //处理发送中断
{
TI=0;
}
}
void main()
{
com_init();
EA=1;ES=1; //开中断,允许串行口中断
REN=1;
send_data(10); |
|