麻烦给看下51单片机程序,程序为通过串口发送字符数组,问题是通过串口调试助手接受到的数据多了个

12(16进制),还有字符数组是循环发送的,可我也没有对程序添加循环啊#include<reg52.h>unsignedcharcodetable[]={0x3f,0x0... 12(16进制),还有字符数组是循环发送的,可我也没有对程序添加循环啊
#include<reg52.h>
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void initial_uart()
{
TMOD=0x20; //设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
//ES=1; //串口查询法不打开中断
}
void send_uart(char *parr)
{
do
{
SBUF=*parr++;
while(!TI);
TI=0;
}
while(*parr);
}
void main()
{
initial_uart();
send_uart(table);

}
展开
 我来答
lishimin1972
2014-02-06 · TA获得超过741个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:454万
展开全部

问题有2:

  1. main()退出后将可能会重启程序,建议:在main的最后加不退出的死循环:while(1);

  2. send_uart(char *parr)要求有退出循环的字符串标记0,但是对你的程序来说,最好不用这种方法,应该send_uart(char *parr, int n),用n决定待发送字符个数。事实上table并没有结束标记0,所以send_uart将会一直发送,直到偶然遇到一个0才退出发送。

追问
我在程序末尾加了个while(1),的确不重复发送了,但是接受到的数组多了个12,为啥多了个12,能给解释下最好。
追答
还是2中所说的,...0x39,0x5e,0x79,0x71后面是什么内容,谁都说不上来,碰巧后面跟的是12,0,...,造成这种现象。你实在不想改,就这样吧:(后面加一个结束符0)

unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式