有人用过icl7135这个芯片么?
#include "reg51.h "
#include "absacc.h "
#define ad_run XBYTE[0x7fff]
#define ad_read XBYTE[0xbfff]
#define uchar unsigned char
uchar ad[5];
uchar A;
uchar i;
bit error;
main()
{
IT0=1; // interrupt edge trigger
IE=0x82; //interrupt 0 enable
ad_run=0x20; //ad start
}
void ad_result() interrupt 0
{
uchar i;
A=ad_read;
if(A&0x80==0x80)
{
i=0x04;
if(A&0x04==0x04)
error=1; //过量程处理
else if(A&0x01==0x01)
error=1; //欠量程处理
else if((A&0x04!=0x04)|(A&0x01!=0x01))
ad[i]=A;
i--;
}
else
{
if((i> 0|i==0)&i <0x04)
{
ad[i]=A;
i--;
}
else
ad_run=0x00;
}
}
这是我编的程序,目的是实现将ad转换的结果存到数组ad[i]中,可是ad转换不进行,我用示波器看了,给clk in 脚的驱动方波约125khz,幅值约为5伏,V+电压约5伏,V-电压越-5V,设置断点,运行ad_run=0x20; //ad start之后,ad启动信号约5V,电阻电容都按照datasheet所给电路进行连接,而且硬件没有坏!ad转换怎么不进行呢?我用strobe接中断零,可就是中断始终不产生!换了两个7135都不好使,唉!郁闷ing,望高人指点迷津!
[解决办法]
main()
{
IT0=1; // interrupt edge trigger
IE=0x82; //interrupt 0 enable
ad_run=0x20; //ad start
while (1); //在这里加一句,让单片机停在这,不再向下执行,这样试试
}
会不会是你的程序执行完了?过短的时候又从头开始了?
另外一个,没看到你的ADC的配置,呵呵
[解决办法]
这种情况是不太适合使用仿真器的,它和7135难于同步。
————————-————————————————
这句话是什么意思?不能用仿真器仿真?
---------------------------------------------------
当一个中断信号到来,MCU在你的断点上停下,你检查了某些东西后,
7135都不知道干什么了,以后不论单步或全速都可能得到错误结果。
再提醒你,strobe的脉冲你用电压表是量不到的,因它只在几百毫秒中出现几微秒。
我很想问你,你怎样确定中断服务程序没有运行呢?