发布网友 发布时间:2024-10-23 16:43
共5个回答
热心网友 时间:2024-11-06 13:14
有以下几点建议给你:
1. 发送的是 1 在接收到会是ASCII码 0x31, 所以根本匹配不到 case 语句,
2. 注意在写 switch 语句是一定要有一个 default 值;
3. 还有最好选用可以在线调试的单片机, 掌握好追踪调试才是学好单片机最重要的部分.
祝你成功!
热心网友 时间:2024-11-06 13:13
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,a,b,num;
sbit beep=P2^3;
void chuankou() interrupt 4 //串口中断 将受到的数据送给a
{
if(RI)
{
RI=0;
a=SBUF;
flag=1;
}
}
void TIME0()interrupt 1 //启动计时器0 用于蜂鸣器频率的控制
{
TH0=(65536-50000)/256;
TL0=(65535-50000)%256;
num++;
if(num>b)
{
num=0;
beep=~beep;
}
}
void main()
{
TMOD=0x21;
TH1=0Xfd;
TL1=0Xfd;
TR1=1;
SM0=0;
SM1=1;
TH0=(65536-50000)/256;
TL0=(65535-50000)%256;
REN=1;
EA=1;
ES=1;
ET0=1;
while(1)
{
if (flag==1)
{
ES=0;
flag=0;
switch(a)
{
case 1:TR0=1;b=4;break;
case 2:TR0=1;b=2;break;
case 3:TR0=1;b=1;break;
case 4:TR0=0;beep=1; break;
default:break;
}
ES=1;
}
}
}
热心网友 时间:2024-11-06 13:13
使用串口助手发送数据时,采用16进制的数据(01、 02 、03 或04),因为串口发送的数据均为ASCII码。
热心网友 时间:2024-11-06 13:13
参考一下:
http://hi.baidu.com/do_sermon/item/dbb28331ac9b4b4d3175a172
热心网友 时间:2024-11-06 13:15
有一个地方你可以查一下,应该可以加打印吧?
a=SBUF 的时候,你看下接收到的a值是多少
因为你是用串口发的,所以不确定你发的是ascii码 1-4还是字符'1'-'4'
这里可能出错,你先查下