mini2440 PWM驱动蜂鸣器

本文介绍了一种使用微控制器的PWM技术驱动蜂鸣器的方法,包括初始化定时器TIMER0,配置GPB0管口为TOU0模式,实现5秒周期的高低电平转换,进而驱动蜂鸣器发声。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PWM(Pulse Width Modulation)——脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域。

本实验通过定时器TIMER0的pwm功能驱动GPB0管口的蜂鸣器。需要设置GPB0的GPBCON为TOU0功能,设置定时器为5秒定时,当rTCMPB0 = rTCNTB0时进行反转电平,实现高低电平转换,驱动蜂鸣器发生。具体实验代码如下:

#define    GLOBAL_CLK              1

#include <stdlib.h>

#include <string.h>

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "mmu.h"

#include "profile.h"

#include "memtest.h"

 

void clock_init()

{

rLOCKTIME = 0x00ffffff;

rCLKDIVN = 0x03;

 

//以下在mmu_init()函数中已经对其初设置这里无需设置

 

rMPLLCON = 0x5c0040;

}

 

void beep_init(void)//蜂鸣器初始化

{

   rGPBCON =0x2;// 设置GPB0为TOU0模式

   rGPBUP |=(1<<0);//禁止GPB0上拉功能

}

     

void inter_init()//中断初始化函数

{

       rINTMSK &=~(1<<10); //屏蔽Timer0以外的中断源

       rINTMOD &=~(1<<10);//把Timer0中断设为IRQ模式

}

 

void Timer0_init()//定时器初始化

{

      

       rTCFG0=119;//设置TCG0

       rTCFG1 &=(0x2<<0);//8分频

       rTCNTB0=25000;//设置TCNTB0数据

       rTCMPB0 = rTCNTB0>>1; // 50%  即占空比

       rTCON |=(1<<1);//将TCNTBn和TCMPBn的值分别写入TCNTn和TCNPn

       rTCON=0x9;//将Timer0设为自动装载并开启Timer0

}

static void __irq Timer0_ISR(void)   //TIMER0发生时的中断处理函数

 

{

      

       rSRCPND |=(1<<10);//清除Timer0中断器标记位

       rINTPND |=(1<<10);//清除总中断器标记位  

}

 

void Main(void)

      

       MMU_Init();//初始化内存,实现内存地址重定向

      

       clock_init();

      

       beep_init();//初始化蜂鸣器

 

       inter_init();//中断初始化

      

       Timer0_init();//配置定时器

 

       pISR_TIMER0 = (U32)Timer0_ISR;//将中断服务函数的地址传给对应的中断向量表位置

 

       while(1); //死循环等待中断的发生

 

}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值