完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
***it led1=P0^1; ***it led2=P0^2; ***it led3=P0^3; void main() { TMOD=0X01; TH0=(65536-50000) /256; TL0=(65536-50000)%256; EA=1;//中断开关 ET0=1;//定时0 TR0=1; led1=0; led2=1; led3=0; while(1) ;/*为什么要有这条语句?猜想: TH0+TL0共用50ms>led1~led3这三条语句执行的时间 , 所以主函数执行完了,而TR0未来得及跳转到中断函数去执行。*/ } void T0_time() interrupt 1 { TH0=(65536-50000) /256; TL0=(65536-50000)%256; a++; //为什么有这样一条if语句? if(a==20) { a=0; led1=~led1; led2=~led2; led3=~led3; } } |
|
相关推荐
8个回答
|
|
喔喔,谢谢,但后面那个我还不明白,中断函数里面没循环语句,怎么可以使 a++; 再执行呢? 非常感谢,嘿嘿 |
|
|
|
中断:CPU在执行一个程序时,对系统发生的某个事件(程序自身或外界的原因)作出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去处理相应的事件,处理完该事件后,到适当的时候返回断点,继续完成被打断的程序。
这里你是用的是T0定时器/计数器的中断,一旦开启定时器,定时器便开始计数,当计数溢出时,自动进入中断服务程序执行代码(TH0,TL0又被重新赋值),执行完中断服务程序后再回到原来处继续执行(while(1))。至于定时器为什么会自增,咱也不明白,这都是芯片层次的了。 |
|
|
|
|
|
|
|
这个是led间隔1秒闪烁的程序,因为方式1最多能记65536us,所以取50000us也就是50ms中断一次,中断一次a的值+1,中断20次50ms就是1s,a=20,led状态就变化一次,不知道这样能理解不?
|
|
|
|
谢谢,你的好意,,嗯嗯 ![]() |
|
|
|
怎么觉得的你的程序"TMOD=0X01;"中的x是大写 你确定程序能行 我觉得应该是TMOD=0x01
|
|
|
|
嘿嘿,你忘了十六进制 中的X与x 是一样的。。。我们都要复习啊。。对你的回帖表示 感谢
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
电赛:mspm0l1306的开发板可以烧录程序,但是程序运行不了,怎么解决这个问题?
409 浏览 1 评论
【xG24 Matter开发套件试用体验】Silicon Labs 基于 EFR32MG24 Explorer Kit 开发板 开箱试用体验
641 浏览 0 评论
嵌入式设备在远端运行,会有偶发性代码跑飞的情况,无法到现场调试的情况下如何检查出问题?
1565 浏览 3 评论
写一个程序控制像图上这样控制电磁阀 但是没什么头绪 请各位大神帮帮忙
1560 浏览 1 评论
819 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10475 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-2 17:11 , Processed in 0.756341 second(s), Total 92, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191