51单片机 串口程序
发布网友
发布时间:2022-04-20 04:00
我来回答
共5个回答
热心网友
时间:2022-07-10 01:35
首先要确定串口调试助手的波特率也是2400,并接收要以十六进制数显示,最好发送也以十六进制数发送。
程序没有问题,是因为发送的num1在0-255之间,而用串口调试助手的字符显示方式不是全部都能显示出来的,有一部分就是显示乱码的,而显示十六进制数就没有问题了。
热心网友
时间:2022-07-10 01:35
void
main()
{
scon
=
0x50;
tmod
=
0x20;
//设置定时器1为工作方式2
th1
=
0xf4;
tl1
=
0xf4;
tr1
=
1;
ea
=
1;
es
=
1;
while(1)
{
if(flag)
{
flag
=
0;
//不关闭串口中断,要让它继续接收
num1++;
//超过255,自动就是0
sbuf
=
num1;
while(!ti);
ti
=
0;
sbuf
=
a;
while(!ti);
ti
=
0;
}
}
}
void
ser()
interrupt
4
{
if
(ri)
{
ri
=
0;
a
=
sbuf;
flag
=
1;
}
}
热心网友
时间:2022-07-10 01:36
void main()
{
SCON = 0x50;
TMOD = 0x20; //设置定时器1为工作方式2
TH1 = 0xf4;
TL1 = 0xf4;
TR1 = 1;
EA = 1;
ES = 1;
while(1) {
if(flag) {
flag = 0; //不关闭串口中断,要让它继续接收
num1++; //超过255,自动就是0
SBUF = num1; while(!TI); TI = 0;
SBUF = a; while(!TI); TI = 0;
}
}
}
void ser() interrupt 4
{
if (RI) {
RI = 0;
a = SBUF;
flag = 1;
}
}
热心网友
时间:2022-07-10 01:36
楼主的tmod 跟 你的中断程序 应该不相符吧~~~ void ser() interrupt 4
是否 应该是void ser() interrupt 3
如果是串口中断,那你的中断程序是对的,那就考虑TMOD的赋值追问TMOD的赋值也每有错,是串口中断
追答不好意思,解决不了你的问题
热心网友
时间:2022-07-10 01:37
TMOD=0x20;是00110000, 是方式3吧