weixin_70996210 2023-03-24 20:59 采纳率: 75%
浏览 12
已结题

为什么在进入结束函数时只是关闭了中断,BUZZ没有取反,蜂鸣器却不响l呢。

使用51单片机中的无源蜂鸣器 在进入启动函数后进入中断,BUZZ端口取反,问题是为什么在进入结束函数时只是关闭了中断,BUZZ没有取反,蜂鸣器却不响l呢。

#include<reg52.h>

sbit BUZZ=P1^6;                         //蜂鸣器控制引脚

unsigned char T0RH=0;                 //T0重载值高字节
unsigned char T0RL=0;                 //T0重载值低字节

void OpenBuzz(unsigned int frequ);     //打开蜂鸣器
void StopBuzz();                     //关闭蜂鸣器

void main()
{
    unsigned int i;
    TMOD=0x01;                           //指定模式  但不启动
    EA=1;                               //中断总使能

    while(1)
    {
        OpenBuzz(4000);                    //以4khz的频率启动蜂鸣器
        for(i=0;i<40000;i++);            //延时
        StopBuzz();
        for(i=0;i<40000;i++);
        OpenBuzz(1000);                    //以1khz的频率启动蜂鸣器
        for(i=0;i<40000;i++);
        StopBuzz();
        for(i=0;i<40000;i++);
    }
}

void OpenBuzz(unsigned int frequ)
{
    unsigned int reload;

    reload=65536-(11059200/12)/(frequ*2);             //计算所需的定时器重载值    强制类型转换
    T0RH=(unsigned char)(reload>>8);                  //由给定频率计算定时器重载值      reload两个字节,把16位reload进行转换后得到的低8位移出,把高八位给到T0RH 
    T0RL=(unsigned char)reload;                          //16位重载值分解为高低两个字节  把reload低八位赋值给T0RL
    TH0=0xFF;
    TL0=0xFE;                                          //设定接近溢出的初值,让定时器马上投入工作   随意给定的
    ET0=1;                                              //使能t0中断
    TR0=1;                                              //启动t

}
void StopBuzz()
{
    ET0=0;                                              //关闭定时器和中断
    TR0=0;
}

/*t0中断服务函数,用于控制蜂鸣器发声*/
void interrupttimer0() interrupt 1
{
    TH0=T0RH;                                           //重新加载重载值
    TL0=T0RL;
    BUZZ=~BUZZ;                                           //反转蜂鸣器控制点平
}

  • 写回答

2条回答 默认 最新

  • IT_service_mesh 2023-03-24 21:02
    关注

    参考GPT和自己的思路:根据代码和描述来看,可能是由于结束函数没有将BUZZ端口重新设置为高电平,导致蜂鸣器始终处于反转状态,无法响应。建议在结束函数中添加BUZZ=1这行代码来解决问题。另外,建议在中断服务函数中添加一个延迟,使蜂鸣器可以持续一段时间后再停止,而不是立即停止。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题