Board logo

标题: MC9S12dg128B的AD转换中断问题,请各位帮忙看看. [打印本页]

作者: chenxi    时间: 2007-1-9 10:12     标题: MC9S12dg128B的AD转换中断问题,请各位帮忙看看.

初学Freescale单片机,根据数据手册写了个中断方式的AD转换程序,但是不能进中断,请各位帮忙看看。谢谢!
用的是清华的邵贝贝老师提供的监控程序,他把中断向量区向前移动了0x1000,在Simulater_link.prm文件中,我设置的AD转换中断向量为VECTOR ADDRESS 0xEFD2 ADC_ISR。程序如下:
#include <hidef.h>/* common defines and macros */
#include <mc9s12dg128.h>/* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

void Port_Init(void)
{
PORTB = 0x00;
DDRB = 0xFF;
}

void AD_Init(void)
{
//中断使能
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE);
//转换通道数为1
ATD0CTL3 = (ATD0CTL3_S1C_MASK);
//8位精度,2MHz时钟

ATD0CTL4 = (ATD0CTL4_SRES8|0x05);
//右对齐,连续转换模式
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
//禁止数字输入缓冲
ATD0DIEN = 0x00;
}

#pragma CODE_SEG NON_BANKED
__interrupt void ADC_ISR(void)
{
PORTB = ATD0DR0; //用PORTB表示AD转换结果
}
#pragma CODE_SEG DEFAULT

void main() {
Port_Init();
AD_Init();
EnableInterrupts;//开总中断
for(;;);
}

请大家帮忙看看这个程序在哪里出的问题,谢谢。

[此贴子已经被作者于2007-1-9 10:10:15编辑过]

[此贴子已经被作者于2007-1-9 10:12:14编辑过]


作者: strongchen    时间: 2007-1-9 11:48

为什么要用监控程序,你没有BDM吗?
作者: chenxi    时间: 2007-1-9 14:43

BDM还没有使用,觉得用bootloader挺方便的,就没用BDM。
我用查询的方式做ADC是没问题的,用中断就不行了。

作者: strongchen    时间: 2007-1-9 15:49

如果没有BDM,你如何将监控程序写入芯片呢。
作者: chenxi    时间: 2007-1-9 16:39

可以通过监控程序bootloader,把.s19文件写入单片机
作者: chenxi    时间: 2007-1-9 16:40

我还是不知道上面的程序哪里有问题,向斑竹请教哦
作者: hudron    时间: 2007-1-9 18:28

你这几句话是不是有问题啊。这样的写法能达到你想要的设置要求吗?
疑惑中……
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE);
ATD0CTL3 = (ATD0CTL3_S1C_MASK);
ATD0CTL4 = (ATD0CTL4_SRES8|0x05);
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
作者: chenxi    时间: 2007-1-9 18:40

这个是头文件里定义的,应该没什么问题。
作者: chenxi    时间: 2007-1-9 21:57

我太粗心了,写错东西了
问题解决了,谢谢
作者: dongwanjing1128    时间: 2007-2-21 20:15

什么错了?
作者: lionet1985    时间: 2007-3-31 22:24

是啊,什么地方错了说一下嘛
作者: terencejia    时间: 2008-1-16 09:03

粗心的错误.....




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0