完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用C8051F340的定时器0输出了一个250Hz的PWM(没用PCA模块是因为PCA输出的PWM好像到不了这么低的频率),我要用这个PWM去调节并输出一个电压,然后再用C8051F340内部的ADC0去采集硬件输出的电压值,再用程序实现闭环控制,定时器输出PWM的程序是从网上找的,如下:
定时器中断程序的思路是:定时器输出完PWM之后,再打开ADC0启动转换信号,这样会输出一个5kHz的AD采样频率(定时器设置的就是5k),也就是说,在1个PWM波里面进行20次采样;ADC0的转换完成中断是允许的,即EADC0 = 1;ADC0的时钟源(SAR CLK)设置的2MHz;低功耗跟踪模式;右对齐;AD0BUSY触发模式;ADC0的中断程序如下:
上面两个程序都有配置用于示波器测量的外置引脚(变量aaaa和变量bbbb),示波器测量得到的波形如下: 黄色的为定时器中断里的aaaa信号,相位靠前;绿色的为ADC0中断里的bbbb信号,相位靠后,其中bbbb有一段高电平较长的波段,那个是在第20次中断里面做的除法运算,所以耗时较长。 /*********************************************************************************/ 问题是:在允许了ADC0的中断后,定时器0的PWM没有了,但从上图示波器的情况可以看出,定时器0中断进去了,而且里的程序跑完了(因为有aaaa的下降沿)。然后我去掉ADC0的中断后,PWM波就恢复正常了;于是我debug进行单步调试,发现timer0中断里面PWM输出的相关程序只运行了20次,即,前20次定时器中断里面,一切正常,输出了一个PWM波,之后,定时器0里面的整个一段程序就不执行了,不执行的程序如下:
debug中看到i_PWM跑飞了(本来应该只是0、1、2三个值循环的),说明上面的程序在定时器0中断里面没在跑,这程序为啥还能跳过去了呢?求各位大神帮忙解决一下呀 |
|
相关推荐
1个回答
|
|
j_PWM这个变量一直在增加吗?好像没有复位的程序
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 03:58 , Processed in 0.737056 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号