📄 adc.c
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
//===================================
byte ad_h;//ADC转换结果的高2位
byte ad_l;//ADC转换结果的低8位
byte ch_s;//通道选择
//===================================
//函数名:Init_ADC
//作用:初始化ADC
//================================================================================================================
void Init_ADC(void)
{
ADC1CFG=0x98;//低功耗模式,10位精度,ADCK=总线频率
ADC1SC2=0x00;//0x00:软件触发,比较功能禁止;0x40:RTI触发,比较功能禁止
APCTL1=0x03;//通道引脚使能:0x01:AD0;0x02:AD1依此类推
ch_s=1;//选择0通道
ADC1SC1=0x40;//0x40:中断使能,单次转换,选择AD0,并启动了转换;0x41:中断使能,单次转换,选择AD1,并启动了转换;AD26为温度传感器引脚。
}
//===============================================================================================================
//函数名:Init_RTI
//作用:RTI初始化
//===================================
void Init_RTI(void)
{
SRTISC=0x01;//RTI设置,8mS,不允许中断
}
void main(void) {
Init_ADC();
Init_RTI();
EnableInterrupts; /* enable interrupts */
/* include your code here */
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
//=========================================
//==========================================
//ADC转换完成中断服务程序
//==========================================
interrupt VectorNumber_Vadc1 ADC_ISR(void)
{
switch(ch_s)
{
case 0:
ad_h=ADC1RH;
ad_l=ADC1RL;
ch_s=1;
ADC1SC1=0x41;
break;
case 1:
ad_h=ADC1RH;
ad_l=ADC1RL;
ch_s=0;
ADC1SC1=0x40;
break;
default:
break;
}
asm(nop);//在此设置一个断点,观测ad_h和ad_l的变化
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -