#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void delay_1ms(void){
unsigned int i;
for(i=0;i<1280;i++); //1280是调节关键
}
//**********初始化AD模块**********************//
void AD_Init(void) //初始化
{
ATD0CTL2=0xC2; // AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
delay_1ms();
ATD0CTL3=0x10; // 转换序列长度为2, FIFO=0, Freeze模式下继续转换
ATD0CTL4=0x83; // 8位精度, 2个时钟, ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=3,
//divider=8
ATD0CTL5=0xB4; // 右对齐无符号,多通道采样,通道4为输入通道
ATD0DIEN=0x00; // 禁止数字输入
}
//**********AD中断模块**********************//
#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
void AD_inturrept(void){ //AD中断程序
if(ATD0STAT1_CCF4==0) PORTB =~(char)ATD0DR4;//在B口显示转换值
if(ATD0STAT1_CCF5==0) PORTA =~(char)ATD0DR5;//在A口显示转换值
}
//**********主程序**********************//
void main(void) {
DisableInterrupts;
DDRB=0xFF;
DDRA=0XFF;
PORTB=0xFF;
PORTA=0X00;
AD_Init(); //AD初始化
EnableInterrupts;
for(;;){}
}
当FIFO=0时,ATD0中通道4、5的转化结果不是应该存储在ATD0DR4和ATD0DR5中吗 但我在这两个结果寄存器中却读不到数据 在ATD0DR0中能够读到 不知这是为什么 请各位高人为我指点迷津 先谢了! |