原创 STC12C5A60S2的ADC转换

2010-5-15 20:25 5420 6 7 分类: MCU/ 嵌入式

今天下午把STC12C5A60S2的ADC转换函数写了,查询法只要检查ADC_FLAG是否为1,再进行相关程序就行了。下面这个是用中断法。这是STC技术手册上提供的中断号,直接在PDF上复制过来的,显示顺序乱了,自己可以在中断寄存器 那一节可以看到

?void Int0_Routine(void) interrupt 0;
void LVD_Routine(void) interrupt 6;
void ADC_Routine(void) interrupt 5;
void PCA_Routine(void) interrupt 7;
void Timer0_Routine(void) interrupt 1;
void Int1_Routine(void) interrupt 2;
void Timer1_Routine(void) interrupt 3;
void UART_Routine(void) interrupt 4;
void UART2_Routine(void) interrupt 8;
void SPI_Routine(void) interrupt 9;

STC12C5A60AD/S2系列带A/D转换的单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转
换器,速度可达到250KHz(25 万次/ 秒)。8 路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、
频谱检测等。上电复位后P1 口为弱上拉型I/O 口,用户可以通过软件设置将8 路中的任何一路设置为A/D
转换,不需作为A/D 使用的口可继续作为I/O 口使用。


具体寄存器设置见STC的datasheet.

注:此函数只是读取寄存器中的值,没有进行电压的转换

#include <reg52.h>
#include <lcm12864.h>
#include <intrins.h>


sfr P1ASF = 0x9D;
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr AUXR1 = 0xa2;
sbit EADC = IE^5;

#define ADC_Power_On_Speed_Channel_0 0x88

unsigned int val;

void ADC_Routine() interrupt 5 //ADC中断函数
{
ADC_CONTR &= 0xef;//清楚转换结束标志位
_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();
val = ADC_RES*256 + ADC_RESL; //读取转换数据
}
void main()
{
Init_12864Word();
LCM12864_wr_String(1,1,"ADC 测试 ");
EA = 1; //开总中断
EADC = 1; //开ADC中断
while(1)
{
P1ASF = 0x01; //设置P1.0口位模拟功能

//设置控制寄存器,10001000B,开ADC电源,转换速度控制00,模拟通道选择000(P1.0),开始转换
ADC_CONTR = ADC_Power_On_Speed_Channel_0;
_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();
AUXR1 = 0x04; //数据格式设置

LCM12864_wr_Cmd(0x88); //液晶显示
LCM12864_wr_Byte(val/10000+0x30);
LCM12864_wr_Byte(val%10000/1000+0x30);
LCM12864_wr_Byte(val%1000/100+0x30);
LCM12864_wr_Byte(val%100/10+0x30);
LCM12864_wr_Byte(val%10+0x30);

}


}



PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2013-5-2 00:28

写得很好,谢谢版主的分享。也无意中解决了困扰我很久的一个难题,在此感谢。

相关推荐阅读
用户240939 2010-06-13 17:24
SAA3010红外解码
SAA3010的红外解码。SAA3010是遥控器中常用的红外编码芯片,采用的是PHILIPS的RC-5协议。一个全码包括 2位起始位+1位控制位+5位系统位+6位数据位.采用双相位编码发送。发送一位的...
用户240939 2010-05-15 19:50
STC12C5A60S2看门狗的应用
什么是看门狗(watchdog)看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗...
用户240939 2010-05-14 16:49
12864液晶的基本操作
我使用的12864液晶是st7920的主控,带字库,所以文本操作很容易,但是使用绘图功能有点麻烦绘图功能有点麻烦。下面这个是12864液晶的最基础的操作 下面是程序,使用STC12C5A60S2,12...
我要评论
1
6
关闭 站长推荐上一条 /3 下一条