一、使用ADS1.2平台设计程序,并具有以下功能:(40分)
要求:在Micro 2440 平台下实现,A/D转换后信号输入字符控制蜂鸣器发声及LED灯发光。
当扭动可调电阻阻值由小变大,得到变化的模拟输入量,控制LED1-LED4灯依次点亮并且蜂鸣器发生依次变得急促。
(汇编语言,C、汇编混合编程都可以)
AREA XIE,CODE,READONLY
ENTRY
ldr r13, =0x1000
IMPORT Main
b Main
END
#define GPBDAT (*(volatile unsigned*)0x56000014)
#define GPBCON (*(volatile unsigned*)0x56000010)
#define GPBUP (*(volatile unsigned*)0x56000018)
#define rADCCON (*(volatile unsigned*)0x58000000)
#define rADCDAT0 (*(volatile unsigned*)0x5800000C)// 数据转换寄存器
int read()
{
rADCCON=(1<<14)|(19<<6)|(0<<3);
rADCCON|=0X01;
while(rADCCON&0X01);
// 0001 启动A/D转换,转换开始时自动变为0
//如果结果为0,结束循环 结果为不为0,在验证下一个条件
while(!(rADCCON&0X8000));
//结果为0,表示正在转换中 取反为真,
//结果非0 表示转换结束 取反为假 最高位为转换位 0 转换中, 1转换结束
return((int)rADCDAT0&0X3FF);//保证范围在0X3FF之间
}
void delay(int n)
{
int i,j;
for(i=0;i
for(j=0;j<1000;j++)
j=j+0;
}
int Main()
{
int a=0;
GPBUP=0X00;
GPBCON=0X15400;
GPBCON|=0X01;
while(1)
{ a=read();
GPBDAT=0XFFF;
if(a<100)
{
GPBDAT=0XFCF;;
delay(10000);
GPBDAT-=1;
delay(10000);
}
if(a<500&&a>=100)
{
GPBDAT=0XF8F;
delay(7000);
GPBDAT-=1;
delay(7000);
}
if(a<1000&&a>=500)
{
GPBDAT=0XF0F;
delay(4000);
GPBDAT-=1;
delay(4000);
}
if(a>=1000)
{
GPBDAT=0X00F;
delay(1000);
GPBDAT-=1;
delay(1000);
}
}
}
//(temp&0x01)&&!(temp&(1<<16))
//这个是条件语句temp&0x01 变量temp和0x01按位与,
// 得到一个结果,
// .
//!(temp&(1<<16)) 逻辑非语句,先验证temp&(1<<16)先把1向左位移16位,
// 得到的就结果,在后temp按位与,得到的结果条件temp&(1<<16) 取反
// 结果为0,取反为真;结果非0,取反为假