这个字符串初始化好怪异,我定义并初始化一个字符串:uchar str[] = "uchar str: hello world test.\r\n";
使用SendString(str);输出的数据都是0,若修改str[],再打印字符串就能正常显示。
包括串口接收,我的串口功能是收到什么就发什么,但第一次通信赛元接收不到数据无输出,第二次开始才能发送本次已接收数据。
第一次接触赛元单片机,看不出哪儿有毛病,是硬件缺陷么?
以下是我的代码:
1、串口中断
void UartInt(void) interrupt 4
{
static uchar rx_counter = 0;
if(TI)
{
TI = 0;
UartSendFlag = 1;
}
if(RI)
{
RI = 0;
UartReceiveFlag = 1;
rx_buf[rx_counter++] = SBUF;
if((rx_buf[rx_counter-1]==13)||(rx_counter)==RX_LEN) // \r 结束符
{
command = 1; // 收到指令待处理
rx_buf[rx_counter] = 0;
rx_counter = 0;
}
}
}
2、串口发送
void SendByte(uchar tx_data)
{
SBUF = tx_data;
while(!UartSendFlag);
UartSendFlag = 0;
}
void SendString(uchar *s)
{
while (*s) //Check the end of the string
SendByte(*s++); //Send current char and increment string ptr
}
3、主函数
void main(void)
{
uchar str[] = "uchar str: hello world test.\r\n"; // code存放在ROM不可修改,const存放在RAM不可修改
MyIO_Init();
Uart0_Init();
BTM_Init();
while(1)
{
if(command)
{
SendString(rx_buf);
command = 0;
}
if(BTM_Counter==1000)
{
SendString(str);
BTM_Counter = 0;
}
}
}
已检测调试,串口可以收发,故串口配置没问题,这里就不贴代码了。
|