首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]AD中断问题(C语言)

[求助]AD中断问题(C语言)

我用GZ48作的AD转换中断函数如下


ADBUF是一个全局变量



 void AtoD(int channel)
 { 
  unsigned char tmp,adbuf1,adbuf2;
 
  tmp=ADSCR & 0xe0;  //给0-4位清零
  tmp=tmp | channel; 
  ADSCR=tmp;       //选取通道ADCH4-ADCH0=00000-10111:AD0 pin-AD23 pin
 }
interrupt 16 void ADreceive(void)


{


  adbuf1=ADRH;
  adbuf2=ADRL;
  ADBUF=adbuf1*256+adbuf2;


}


请指教,告诉我问题所在。谢谢!

希望能和大家多多交流。
你的程序出什么问题了?

channel为什么要定义成int类型?

ADBUF=adbuf1*256+adbuf2;
adbuf1是char型,如果不用类型转换乘以256就溢出了


现在AD转换接收不到转换结果。

channel定义为int类型,应该没有问题。

我把ADBUF定义为long int 类型了,我感觉不存在溢出的问题。但我确实没有注意到。

我只想知道我的中断函数写的是否正确,不正确问题出在哪里?应该怎么改写,谢谢!
希望能和大家多多交流。
是进不了AD中断还是进了AD中断后读出的结果不对?
海纳百川  有容乃大
应该是没有进中断,因为我现在根本就接受不到转换结果。
我是第一次使用AD中断,所以对自己写的程序有些怀疑。

对上面函数的修改,但问题仍然存在。
ADBUF是一个全局变量
adbuf1,adbuf2也应该是全局变量或者在中断接受函数内要进行定义。

void AtoD(int channel)
{
unsigned char tmp;

tmp=ADSCR & 0xe0; //给0-4位清零
tmp=tmp | channel;
ADSCR=tmp; //选取通道ADCH4-ADCH0=00000-10111:AD0 pin-AD23 pin
}

interrupt 16 void ADreceive(void)
{
adbuf1=ADRH;
adbuf2=ADRL;
ADBUF=adbuf1*256+adbuf2;
}
希望能和大家多多交流。
设一个断点看看是否进了AD中断服务程序。
海纳百川  有容乃大
好像是没进去。


谁能发一个AD中断程序,CPU最好是8位的,我参考一下
希望能和大家多多交流。
你的ADC的初始化是怎么做的?
AIEN bit有没有置位,整个MCU的中断放开没有?
AIEN 已经置位,整个MCU的中断我没有处理
是不是要用EnableInterrupts命令设置的?
希望能和大家多多交流。
是的。
海纳百川  有容乃大

AD初始化如下:
ADCLK=0x44; //初始化A/D转换为4分频,外部总线 Right justifide mode
ADSCR=0x5F; //置位AIEN 或者此处改写为ADSCR_AIEN=1;

AIEN 已经置位,我用EnableInterrupts命令对MCU进行开中断,但还是没有接收到转换结果
希望能和大家多多交流。
我刚才设置了,但还是没有接收到转换结果。
AD的初始化设置如下:

ADCLK=0x44; //初始化A/D转换为4分频,外部总线 Right justifide mode
ADSCR=0x5F; //AIEN使能,或者此处改写为ADSCR_AIEN=1;
希望能和大家多多交流。
还是进不了AD中断吗?别的中断进得了吗?
海纳百川  有容乃大
我把MCU的中断设置了,但仍然没有收到转换结果。
AD的初始化如下:

ADCLK=0x44; //初始化A/D转换为4分频,外部总线 Right justifide mode
ADSCR=0x5F; //此处开AD中断
希望能和大家多多交流。
不好意思,没有看到第二页,导致了一样的结果让我发了多次。

原来进行的CAN中断是可以的
希望能和大家多多交流。
返回列表