麻烦给看下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);
} 展开
#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);
} 展开
展开全部
问题有2:
main()退出后将可能会重启程序,建议:在main的最后加不退出的死循环:while(1);
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};
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询