实验名称: 蜂鸣器控制实验
实验目的: 熟悉ADS使用,熟悉c编程
实验原理:
ARM的GPB0控制蜂鸣器,当输出高电平时,三极管导通,蜂鸣器工作。输出低电平时,三极管未工作,蜂鸣器停止。
实验步骤:
先初始化指针sp,用不着中断,就不必设置了。文件Init.s,代码如下:
AREA DATA, CODE, READONLY
ENTRY
ldr r13,=0x1000
IMPORT BuzzerMain
b BuzzerMain
END
初始化完成后,跳转到Main.c,代码如下:
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
#define time 300
void Delay(unsigned int i);
void BuzzerMain()
{
GPBCON=0xfffffd;//GPB0
GPBUP =0xfff;//使用的口不上拉????
while(1)
{
GPBDAT ^=0x001;//异或 使buzzer间断地响
Delay(time);
}
}
void Delay(unsigned int i)
{
unsigned int j, k;
while(i--)
for (k=0;k<=0xff;k++)
for (j=0;j<=0xff;j++);
}
实验心得:
开始的GPB0的设置我照抄网上下的一个实验手册,它的硬件连接和我一样,本以为没什么问题的,结果它设置的没看明白,程序运行蜂鸣器不响,结果查了DATASHEET才知道GPBCON设置错了,0xfffffd最后两位01才是输出,开始设成00输入了。它GPBCON设了两次,即
GPB0CON&=0xfffffc; 这是设成输入的
GPB0CON&=0x0000001;这才是输出
搞不懂为什么这么做?还有关于上拉电阻的我大致搞清楚了,其实就是用一个电阻把电源引到输出引脚,可以加大输出电流,增强负载能力,我这个实验直接负载就够了,所以我没使能上拉电阻,一样可以响。