- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
微控制器AduC812的P1口的应用
现以我们研制的家用心电图机为例,说明ADC的使用方法与功能实现。在该心电图机中,ADC0用于心电信号的模拟输入,将2.5V参考电压接至VREF,由于人体心电信号在0.5mV~4mV,典型值在1mV左右,需经过500倍的放大,落在ADC输入电压0~2.5V范围之内。因此,心电信号经过LM324放大、滤波后输入ADC0,进行A/D转换,得到数字量以进行显示、存储、发送、打印等功能。在这里,A/D转换后的12位数字量,最小可分辨的信号是0.6mV。对于最小的心电信号0.5mV,经放大后为0.25V,对于最大的心电信号4mV,经放大后为2V,均在ADC的输入范围之内。
心电图机使用电池作为电源,当电池电压不足时需要提醒用户更新电池。电源电压为+5V,所以不能直接接至ADC的输入端。电源电压要经过分压电路进行分压,使分压的电压在ADC的输入范围之内。ADC1用于电源电压分压后的模拟输入,进而监测电源电压的变化,当电源电压低于一定值时蜂鸣器报警,同时液晶显示提醒用户更换电池。若电源电压低于4.5V时报警,则分压后为1.5V,当ADC1的输入低于1.5V(0999H)时则启动报警系统。
下面是利用ADC0采集心电信号的部分程序,ADC首先要初始化,即送适当的控制字,根据前面介绍的ADC的SFR,选择适当的SFR值。
由于ADC0作为心电信号的模拟输入,选择ADCCON1可使ADC正常工作,ADC时钟分频比为2。由于LM324输出阻抗远远小于8kΩ,所以选择ADC采集时钟1,得到ADCCON1=50H。选择通道0,可利用ADCCON2的默认值00H。
由于ADC1作为电源监测的模拟输入,选择ADCCON1可使ADC正常工作,ADC时钟分频比为2。由于电源阻抗远远小于8kΩ,所以选择ADC采集时钟1,得到ADCCON1=50H。选择通道1,ADCCON2=01H。
在下面程序中,堆栈设置在60H,利用定时器0中断后执行采样程序,选取采样频率为200Hz,因而定时器0的定时值为TL0=3CH,TH0=F6H。由于启动单个转换周期完成一次A/D转换需要16×2+1=33个AduC812主时钟,程序中一次延时循环为2个主时钟,因而在采样程序中利用R0=16作为单个转换周期,延时36个主时钟,以完成一次采样后的A/D转换。ADCDATAL为A/D转换低8位,ADCDATAH为A/D转换高4位;R1、R2用于存放12位A/D转换结果,设置00H位作为采样结束标志位。
2.2按键控制
当不需要使用AduC812的ADC的全部8个通道时,剩余的ADC输入可用作数字输入端。例如,我们将P1口中的几位用于按键控制的输入端口,此时要先将0写至端口值。需要注意的是,AduC812的P1口用作按键时是高电平有效,在没有按键输入时,P1口应保持低电平,因此在用作按键的P1口应加下拉电阻(即P1.3~P1.7在没有输入时为低电平),阻值一般为几千欧。在前面的例子中,按键分别连接到P1.3~P1.7,它们通过2kΩ的下拉电阻接至地;插座的第6脚接高电平VCC,用于触发按键。当有键按下时,P1.3~P1.7中的相应位接至高电平VCC,这样就给出了按键信息。通过上面的程序就可以进行判断并执行相应的按键功能,并且采用防抖方法来提高可靠性,具体程序如下:
2.3 定时器和计数器的数字输入
AduC812具有3个16位的定时器/计数器,即定时器0、定时器1和定时器2。定时器/计数器硬件已包含在片内,用以减轻用软件实现定时器/计数器功能时,处理期内核固有的负担。每一个定时器/计数器包含两个8位寄存器THx和TLx(x=0、1、2)。所有3个定时器/计数器均可配置成定时器或事件计数器。
在定时器功能中,每个机器周期TLx寄存器增量。因此可以把它看作对机器周期计数。在计数器功能中,TLx寄存器根据其对应的外部输入引脚T0、T1或T0上的1至0的跳变增量。
来源:电子发烧友
上一篇:基于DSP的1553B总线系统设计与实现
下一篇:简析IPv6技术在物联网中的应用