调试了几个小时,还是找不出哪里错了。大家帮忙看一下
[复制链接]
由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar temp=0; sbit beep=P3^6;//蜂鸣器引脚,低电平有效 //初始化 void init() { TMOD=0X20; SCON=0X50; TR1=1; TH1=TL1=0XFD; ES=1; EA=1; } //一毫秒延时 void delay(uint i) { uchar j; while(i--) { for(j=0;j<115;j++); } } //发送回PC void send(uchar dat) { SBUF=dat; while(!TI); //等待发送完成 TI=0; //把发送标志位置零 } //蜂鸣器 void beep0(uchar z) { while(1) { beep=0; delay(z); beep=1; delay(z); } } //判断从PC向单片机发送的数值 void p() { if(temp==1) beep0(200); else if(temp==2) beep0(100); else if(temp==3) beep0(50); else if(temp==4) beep=1; }
//主函数 void main() { init(); //初始化 while(1) { p(); } }
//串口接收中断函数 void ser() interrupt 4 { if(RI==1) { RI=0; temp=SBUF; send (temp); } }
出现的情况是:只能发送一次,而第二次、第三次、第四次无效。
例如发送数字1,后发送四蜂鸣器还在响,关不掉。
|