标题:
[求助]A/D转换的一个问题
[打印本页]
作者:
charlychan
时间:
2007-8-20 13:58
标题:
[求助]A/D转换的一个问题
#include
/* common defines and macros */
#include
/* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
word AD_wData = 0;
void wait() {
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++) ;
}
void ADCInit(void)
{
ATD0CTL2=0xC2; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断开放
ATD0CTL3=0x20; // 每个序列4次转换, No FIFO, Freeze模式下继续转换
ATD0CTL4=0x83; // 8位精度, 2个时钟, ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=3, divider=8
ATD0CTL5=0xA0; //右对齐无符号,单通道采样,通道0
ATD0DIEN=0x00; // 禁止数字输入
}
void main(void) {
DisableInterrupts;
ADCInit();
DDRB = 0xFF;
PORTB = 0x00;
//ATD0DIEN=0xFF;
EnableInterrupts;
for(;;) {
//PORTB = PORTAD0;
}
}
#pragma CODE_SEG NON_BANKED
void interrupt 22 Int_AD0(void)
{
DisableInterrupts;
wait();
AD_wData = ATD0DR0; //Read out the Result Register
PORTB = (byte)AD_wData;
EnableInterrupts;
}
目的:我在通道0口接了一个电位器,把电压值调节到了4V,想把通过a/d 转换之后的值通过portb上的发光管直接显示出来。
问题:可是我发现,不能显示正确的结果,总是显示0xff。不知道哪有问题啊?
注:确定已经进入中断。而且设置通道0允许数字输入(ATD0DIEN=0x01);然后//PORTB = PORTAD0;能看到通道0上的值为数字量1。应该能说明外接的电路没有问题。
谢谢解答。。。
作者:
xphyym
时间:
2007-8-21 23:06
这是不用中断的程序,可以用的
#include
/* common defines and macros */
#include
/* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
/* global variables definitions */
static long ADValue;
void AD_Init(void) //初始化
{
ATD0CTL2=0xC0; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x20; // 每个序列4次转换, No FIFO, Freeze模式下继续转换
ATD0CTL4=0x83; // 8位精度, 2个时钟, ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=3, divider=8
ATD0CTL5=0xE0; //右对齐无符号,单通道采样,通道6
ATD0DIEN=0x00; // 禁止数字输入
}
void AD_GetValue(void) //读取AD转换结果
{
ADValue = ATD0DR0; //Read out the Result Register
}
void main(void) {
AD_Init(); //AD初始化
DDRB = 0xFF;
PORTB = 0x00;
//EnableInterrupts;
for(;;)
{
while(!(ATD0STAT1 & 0x01)); //等待转换结束
AD_GetValue(); //读取转换结果
PORTB = (char)ADValue; //在B口显示转换值
}
}
[此贴子已经被作者于2007-8-21 23:06:21编辑过]
作者:
xphyym
时间:
2007-8-21 23:07
头文件自己加!这里显示不出来
作者:
xphyym
时间:
2007-8-21 23:08
用中断的话要再中断向量表加上指向地址!
作者:
charlychan
时间:
2007-8-27 14:21
谢谢仁兄。。。
作者:
charlychan
时间:
2007-8-27 16:35
中断那个程序,只要把wait();去掉就好用了。。。。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0