找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1637|回复: 1
打印 上一主题 下一主题
收起左侧

利用单片机T1控制发出1kHz的音频信号程序

[复制链接]
跳转到指定楼层
楼主



利用T1的中断控制P1.7引脚输出频率为1kHz方波音频信号,驱动蜂鸣器发声。系统时钟为12MHz。方波音频信号周期1ms,因此T1的定时中断时间为0.5 ms,进入中断服务程序后,对P1.7求反。电路见图7-18。
     先计算T1初值,系统时钟为12MHz,则机器周期为1μs。1kHz音频信号周期为1ms,要定时计数的脉冲数为a。则T1初值:      
          TH1=(65 536 −a) /256;        
          TL1=(65 536 −a) %256

单片机源程序如下:
  1. #include<reg51.h>                          //包含头文件
  2. sbit sound=P1^7;                          //将sound位定义为P1.7脚
  3. #define f1(a) (65536-a)/256                //定义装入定时器高8位时间常数
  4. #define f2(a) (65536-a)%256                    //定义装入定时器低8位时间常数
  5. unsigned int i=500;
  6. unsigned int j=0;

  7. void main(void)
  8. {
  9.         EA=1;                                  //开总中断.
  10.           ET1=1;                                //允许定时器T1中断         .
  11.            TMOD=0x10;                         //TMOD=0001 000B,使用T1的方式1定时    TH1=f1(i);                      //给T1高8位赋初值.
  12.            TL1=f2(i);                      //给T1低8位赋初值.
  13.            TR1=1;                                 //启动T1
  14.            while(1)  
  15. {                                              //循环等待
  16.              i=460;
  17.               while(j<2000);
  18.               j=0;
  19.               i=360;
  20.               while(j<2000);
  21.               j=0;
  22.     }
  23. }

  24. void T1(void) interrupt 3 using 0        //定时器T1中断函数
  25. {
  26.             TR1= 0;                         //关闭T1
  27.            sound=~sound;                         //P1.7输出求反
  28.             TH1=f1(i);                           //T1的高8位重新赋初值.
  29.             TL1=f2(i);                           //T1的低8位重新赋初值.
  30.         j++;                                
  31.             TR1=1;                         //启动定时器T1
  32. }
复制代码

Keil代码与Proteus8.13仿真下载(注意只能用Proteus8.13打开):
利用T1控制发出1KHz音频.zip (54.22 KB, 下载次数: 12)

评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2022-10-4 21:10 | 只看该作者
方式2没用过吗? 中断内不需要重新赋初值,这种写法误差较大。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表