本帖最后由 中航_夏工 于 2009-9-2 10:34 编辑
/********************************************************
传送字符串函数
/********************************************************/
void send_str(unsigned char str[])
{
unsigned char j = 0;
while (str[j] != 'm')
{
SBUF = str[j++];
while (!TI)
;
//等待数据传送完毕
TI = 0; //清中断标志
}
}
/*********************************************************
主函数
*********************************************************/
void main(void)
{
unsigned char buff,i,x,rxd1[4]={'1','2','3',';'};
SCON = 0x50; //设定串口工作方式1,接收使能(允许接收)
PCON = 0x00; //波特率不倍增
TMOD = 0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA = 1;
TL1 = 0xfd;
TH1 = 0xfd; //波特率9600
TR1 = 1;
// delayms(100);
send_str(str1); //发送英文字符串
//delayms(1000);
send_str(str2); //发送中文字符串
//delayms(1000);
txdata('O');
txdata('K');
txdata('\n'); //换行
delayms(1000);
ES=1;
while (1)
{P0 = 0x0;
P2 = 0x0;
delayms(1000);
P0 = 0xff;
P2 = 0xff;
delayms(1000);
}
}
/**********************************************************
串口中断函数
**********************************************************/
void server_sio() interrupt 4 using 3
{ unsigned char i=0,buf;
ES=0;
buf=rxdata();
while(buf!=';')
{
rxd=buf;
i++;
buf=rxdata();
}
send_str(str1);
ES=1;
}
一旦被中断就停不下来,如果在中断里加了个延时100MS,就只能中断一次,仿真的时候进不了中断,小弟实在是没辙了,各位大虾帮帮忙! |