打印

pic脉冲和adc不能同时进行?

[复制链接]
637|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huandaczq|  楼主 | 2017-12-19 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic16f72
大致流程是这样,编好程序发现只有pwm,于是把程序pwm屏蔽,adc正常工作且读出正确数据。屏蔽adc,pwm也正常工作。然后连在一起就不工作了,有大神知道原因吗?
INTCON=0xc0;
PIE1=0x42;   //4代表开启ad中断
PR2=255;
CCPR1L=0x80;
T2CON=0x07;   //预分频1,后分频16,开始
CCP1CON=0x0f;   //pwm模式
ADCON0=0x41;   //fosc/8,   channel 0,   开启adc但是未运行
ADCON1=0x05;   //a口输入口的选择已经相对电压

对应pwm中断就是
tmr2if=0
对应adc操作是
GO=1;
while(GO);  //GO就是对应的运行位,1代表开始,转换结束,硬件清0
a=ADRES;
return(a);

独立运行都是正常的,合起来pwm工作,adc就不工作了,有人知道是什么原因吗?

相关帖子

沙发
huandaczq|  楼主 | 2017-12-19 15:15 | 只看该作者
自己解决掉了!一条一条的试,芯片擦出编写!
上面pie1=0x42中的4:0(1)00,0010.中的4也就是前面带括号的1,代表着adie.应该清0.
---猜想,看原理图上ccp 和ad这些中断和timer012有关,如果intcon里的最高2位,开启,如果再开启adie的话,估计就是需要timer来启动,所以导致无法读出数据,系统卡死在读取数据那条指令。
1,如果把intcon里的最高2位关闭,同时只开启adie或只开启intcon里的timer0中断使能(ie)程序照样执行下去,相当于废操作。
2,如果开启intcon的最高2位(gie,peie),同时开启timer0ie关闭adie也能执行下去,开启adie关闭timer0ie还没测试过。
3,关闭timer0ie和adie,开启gie,peie,同时打开pwm和adc转换,问题解决。
最后问题解决了,这个问题应该是我自己画蛇添足了,单独的adc和pwm都好的,然后去看intcon,觉得adie要开启结果一直把自己困在困境里,浪费了大半天!!
最后的最后,可能有些地方没说对,如果你看到了,可以回复告诉我一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

186

帖子

0

粉丝