用串口调试助手向单片机发送数据时,没有任何反应,求助高人解惑~!!!
代码如下:
#include
#include
#include
unsigned char ch;
#define STR_LEN 7
bit read_flag= 0 ;
unsigned char inBUF0[STR_LEN]={'0','s','u','c','c','e','0'};
unsigned char inBUF1[STR_LEN]={'0','h','e','l','l','o','0'};
unsigned char inBUF2[STR_LEN]={'0','e','x','i','s','t','0'};
unsigned char inBUF3[STR_LEN]={'0','e','r','r','o','r','0'};
void init_serialcom( void ) //串口通信初始设定
{
SCON = 0x50 ;//UART为模式1,8位数据,
TMOD = 0x20 ;//定时器1为模式2,8位自动重装
PCON = 0x00 ;//波特率加倍
TH1 =0xDD ;//波特率:600 fosc=8MHz
IE = 0x90 ;//允许串行中断
TR1 = 1 ; // timer 1 run
TI=1;
EA = 1; //单片机中断允许
ES = 1; //允许串行口中断
}
void send_char_com( unsigned char ch)
//向串口发送一个字符
{
SBUF=ch;
while (TI== 0);
TI= 0 ;
}
void sendString(unsigned char *str, char length)
{
unsigned char strlen = 0;
for (strlen;strlen<length;strlen++)
{
send_char_com( *str );
str++;
}
}
void serial () interrupt 4 using 3 //串口接收中断函数
{
if (RI)
{
RI = 0 ;
ch=SBUF;
read_flag= 1 ; //就置位取数标志
}
}
main()
{
init_serialcom(); //初始化串口
while ( 1 )
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
switch(ch)
{
case '0':sendString(inBUF0,STR_LEN);read_flag= 0 ;break; case '1':sendString(inBUF1,STR_LEN);read_flag= 0 ;break;
case '2':sendString(inBUF2,STR_LEN);read_flag= 0 ;break;
default:sendString(inBUF3,STR_LEN);read_flag= 0 ;
}
}
}
}
电路接法如下:
proteus 仿真时用max232,就出错!
晶振是8M的波特率为600bps!
|