利用单片机串口通信,使蜂鸣器发音

题目:由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。
我的程序如下:(略)
在做这个实验的时候~发现~只能一次控制蜂鸣器的响灭~~即必须复位之后才能再次发送~!不知是什么原因~
由于本人实在是没有财富值~还是请大侠们帮个忙啊~!
我学的是郭天祥的51单片机!
悬赏分:0 - 解决时间:2010-1-28 22:52
====================================
最佳答案:
楼主的程序,有明显不足,略去了。
楼主关于频率的提法,也有些瑕疵,但是做而论道还是按照楼主的意图和思路,把程序改好,如下所示:
//---------------------------------
#include
#define uchar unsigned char
#define uint unsigned int
uchar a;
sbit d = P3^7;
//---------------------------------
void init()
{
    TMOD = 0x20; //设置定时器1为工作方式2
    TH1 = 0xfd;
    TL1 = 0xfd;
    TR1 = 1;      //开定时器1
    SM1 = 1;      //设置串口通信方式1
    SM0 = 0;
    REN = 1;      //开串口通信.
    EA = 1;       //开总中断.
    ES = 1;       //开串口中断.
}
//---------------------------------
void delay(uint z)
{
    uint x, y;
    for(x = z; x > 0; x--) for(y = 110; y > 0; y--);
}
//---------------------------------
void main()
{
    init();
    a = '4';
    while(1) {
      if(a == '1') {
        d = 0; delay(400);
        d = 1; delay(400);
      }
      else if(a == '2') {
        d = 0; delay(200);
        d = 1; delay(200);
      }
      else if(a == '3') {
        d = 0; delay(100);
        d = 1; delay(100);
      }
      else if(a == '4') {
        d = 1;
      }
    }
}
//---------------------------------
void ser() interrupt 4
{
    if (TI == 1) TI = 0;
    else if (RI == 1) {
      RI = 0;
      P0 = SBUF;
      a = SBUF;          //中间变量.
    }
}
//---------------------------------
回答者:做而论道 - 十二级   2010-1-28 09:33
呵呵,做而论道给出的正确答案,在网上被“zhjso”剽窃了,网友可以到原题网址去甄别一下。
原题网址:http://zhidao.baidu.com/question/135267677.html。
====================================
后记:上述程序经过了 PROTEUS 软件仿真实验,使用 Virtual Terminal 向单片机传送1、2、3...等等,可以控制蜂鸣器发音。仿真画面截图如下:

利用单片机串口通信,使蜂鸣器发音_第1张图片

图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/d8186c3c19e3c443bba16700.html
图中的蜂鸣器,其属性需要稍做修改,工作电压和内阻,按照图中红圈所示修改即可。

Virtual Terminal 使用方法可见前一篇文章。
====================================

你可能感兴趣的:(串口通信)