完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我是51单片机的一名初学者,在学中断时候遇到了一些问题,希望大家能够解答。
代码如下: //大家请看我下边的程序,想法是流水灯,delay 函数延时,然后加入定时器中断, aa控制定时器进入次数,现在定时器进入一次计时50ms。可是我的delay(1500)值为1.5s,为什么最后结果显示还是进入了if函数?(结果:数码管变化) 我的想法是delay运行的时候不断定时,最终aa==40的时候在delay里面,也就是说运行完delay后aa必然大于40,但是最终为什么又进入了if呢? 谢谢大家!!! #include #include #define uchar unsigned char #define uint unsigned int uchar t,n,aa; ***it dula=P2^6; ***it wela=P2^7; //数码管声明 uchar code table []= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //数码管段选 void delay (uint); void main () { n=0; TMOD=1; TH0=19964/256; TL0=19964%256; //定时器50ms中断赋值 EA=1; ET0=1; TR0=1; //中断设置 t=0xfe; P1=t; dula=1; P0=table [0]; dula=0; wela=1; P0=0xfe; wela=0; while (1) { delay (1500); //重点!!!!!! if (aa==40) { aa=0; n++; if (n==16) n=0; dula=1; P0=table [n]; dula=0; } t=_crol_ (t,1); P1=t; } } void delay (uint x) { uint y; for (;x>0;x--) for (y=114;y>0;y--); } void timer() interrupt 1 { TH0=19964/256; TL0=19964%256; aa++; }谢谢! |
|
相关推荐
6个回答
|
|
你delay的时间1500ms,中断一次的时间是50,在delay的这段时间里怎么会让它产生40+次中断呢?
|
|
|
|
某一次delay完后的某个时点 aa恰好=40 单片机速度很快,这种可能是可以发生的
|
|
|
|
我想的是下一次delay中aa达到了40,那么出了delay之后就不可能有aa==40 (>) |
|
|
|
这个程序确实有问题,但程序执行速度相当快,可以进去,但每次显示的值是你预算不到的
|
|
|
|
你的晶振是多少,延时你确定有1.5S吗?
|
|
|
|
我的晶振是11.05MHZ,我想问,如果延时不是1.5s,aa==40一定会被判定成立吗? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1226 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1453 浏览 1 评论
1457 浏览 0 评论
615 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-串口通讯编程示例之串口编写程序
1283 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11602 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-4 15:42 , Processed in 1.149463 second(s), Total 103, Slave 86 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号