完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define A 0x9e #define B 0x58 #define C TR0=1 #define D 40 #define E P0 #define F P1&=0xf0;P1|=0x01 unsigned char G=0; void timer() interrupt 1 { static unsigned char H=0; TH0=A; TL0=B; F; if(H!=D) { H++; } else { H=0; if(G!=9) { G++; } else { G=0; } } void Initial(void) { IE=0x82; TMOD=0x01; TH0=A; TL0=B; C; F; } void main() { unsigned char code L[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; Initial(); while(1) { E=L[G]; } } 这是我遇到的第一个关于中断的源代码,小弟的理解是这样的。首先在main函数里开始设好初始值,开启内部中断,然后到了E=L[G]这里,不停的循环,到了计数器溢出了就开始执行中断函数,跳动了子函数timer() 里,但是问题来了,这里设计计数器加四十次就算一秒,但是在函数timer() 里执行if语句一次后不就是会跳出这个函数吗?就是H就加到1就跳出了timer() 函数了吗?然后又回main()函数里的E=L[G]不是吗,但是这时G也不变啊!数码管不是一样显示原来的数吗?怎么会每隔一秒变一个数呢?小弟实在是想不懂、、、、求指教,最好是教懂小弟怎么看懂这个源代码,这跟小弟的理解有什么不同、、、、、 |
|
相关推荐
3个回答
|
|
中断时硬件计数。和软件没关系。硬件时计数变量增加1,E=L[G],只是个显示函数,
|
|
|
|
那怎么样才能跳出timer()函数,小弟实在不懂,请指教、谢谢、、 |
|
|
|
中断时硬件计数
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2024年上海海思MCU开发者体验官招募,手机/MatePad大奖等你拿!
1111 浏览 0 评论
【xG24 Matter开发套件试用体验】蓝牙控制板载LED
876 浏览 0 评论
1043 浏览 0 评论
电赛:mspm0l1306的开发板可以烧录程序,但是程序运行不了,怎么解决这个问题?
1094 浏览 1 评论
【xG24 Matter开发套件试用体验】Silicon Labs 基于 EFR32MG24 Explorer Kit 开发板 开箱试用体验
857 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10525 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-6 22:26 , Processed in 0.578558 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号