完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
RT。用51单片机来驱动红外发射管,采用定时器0,方式2在中断翻转IO口的方式。。
/*************TCC相关配置****************/ TMOD = 0x02; EA=1; ET0=1; TH0 = 243; //11.0592 50Hz TL0 = 243; TR0 = 1; /*************************************************** **函数名称:void timer0(void) interrupt 1 **函数功能:TCC中断服务函数 ***************************************************/ void timer0(void) interrupt 1 { // count++; if(flag == 1) SEND = !SEND; else SEND = 0; } 中断及TCC配句语句如上,在中断里如果将count++这句屏蔽掉,输出的波形就是38KHZ,但如果把count++回复后,输出的波形就变成了25KHZ,也就是原先13us翻转一次变成了20us才能翻转一次。也试着改成8us进一次中断,但输出波形依旧是20us。。。求解~~ |
|
相关推荐
4个回答
|
|
本帖最后由 andy_wsj 于 2015-11-4 16:48 编辑
我不禁想问:单片机主频多少啊?一条++语句编译之后需要7个us来执行.... 既然++占了时间,把它放后面呗 void timer0(void) interrupt 1 { if(flag == 1) SEND = !SEND; else SEND = 0; count++; //放这里试试看 } 还有一种可能,就是编译器处理问题,是不是增加了++语句之后 需要计算,某些寄存器需要压栈,这个时间挺可观的,我的同时测试过 只要压栈,那个时间是固定的 没有计算的时候,编译器是不是优化了? 我瞎掰的,你看看就好,别被我忽悠了 |
|
|
|
位置的话试过了。。没啥区别。。 |
|
|
|
*************TCC相关配置****************/
TMOD = 0x02; EA=1; ET0=1; TH0 = 243; //11.0592 50Hz TL0 = 243; TR0 = 1; /*************************************************** **函数名称:void timer0(void) interrupt 1 **函数功能:TCC中断服务函数 ***************************************************/ void timer0(void) interrupt 1 { // count++; if(flag == 1) SEND = !SEND; else SEND = 0; } |
|
|
|
解决了吗.我也遇到这个问题了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
479 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
229 浏览 0 评论
334 浏览 0 评论
165 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
496 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 13:39 , Processed in 0.564024 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191