完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
为什么我用PWM做呼吸灯,为什么不亮呢?求教各位大神
#include typedef unsigned char uchar; typedef unsigned int uint; ***it led0=P0^0; uint count,time0,time1,DIR; void unit ( ); void main( ){ unit ( ); count=0; time0=0; time1=0; DIR=0; while (1){ if(count==100){ count=0; if(DIR==0) time1++; else time1--; } if(time1==1000) DIR=1; if(time1==0) DIR=0; if(time0==1000) time0=0; if(time0 else led0=0; } } void unit ( ){ EA=1; ET0=1; TMOD=0x01; TH0=0xFF; TL0=0xFF; TR0=1; } void zhongduan0( ) interrupt 1 { time0++; count++; TH0=0xFF; TL0=0xFF; } |
|
相关推荐
10个回答
|
|
基本可以认定是这个原因,if(count==100),这里有漏洞,因为中断频繁,count有可能会大于100,程序就跑乱套了,你看图就能明白,程序跑第一次就飞了,就算偶尔碰巧能行,循环到下一次是还是要飞掉。红圈处都无法执行到。
最佳答案
|
|
|
|
你确定你的中断能进去吗?
|
|
|
|
P0^0上拉了没?换一个端口再试试看。
|
|
|
|
在天祥开发板试了,LED可以亮,貌似中断时间太短,看不到变化。
|
|
|
|
//改了4个运算符就可以呼吸了
#include typedef unsigned char uchar; typedef unsigned int uint; ***it led0=P0^0; uint count,time0,time1,DIR; void unit ( ); void main( ) { unit ( ); count=0; time0=0; time1=0; DIR=0; while (1) { if(count>=100) { count=0; if(DIR==0) time1++; else time1--; } if(time1>=1000) DIR=1; if(time1==0) DIR=0; if(time0>=1000) time0=0; if(time0<=time1) led0=1; else led0=0; } } void unit ( ) { EA=1; ET0=1; TMOD=0x01; TH0=0xFF; TL0=0xFF; TR0=1; } void zhongduan0( ) interrupt 1 { time0++; count++; TH0=0xFF; TL0=0xFF; } |
|
|
|
//改成这样效果更好些
#include typedef unsigned char uchar; typedef unsigned int uint; ***it led0=P0^0; uint count,time0,time1,DIR; //void unit ( ); void main( ) { // unit ( ); count=0; time0=0; time1=0; DIR=0; while (1) { time0++; count++; if(count>=200) { count=0; if(DIR==0) time1++; else time1--; } if(time1>=500) DIR=1; if(time1==0) DIR=0; if(time0>=500) time0=0; if(time0<=time1) led0=1; else led0=0; } } /* void unit ( ) { EA=1; ET0=1; TMOD=0x01; TH0=0xFF; TL0=0xFF; TR0=1; } void zhongduan0( ) interrupt 1 { time0++; count++; TH0=0xFF; TL0=0xFF; } */ |
|
|
|
|
|
|
|
为什么我那个不行呢求教 |
|
|
|
好像有点明白了,每次进入中断所用的时间因为很短,导致单片机在执行每条指令时很可能多次进入中断,本来count累加到200l,结果在未执行完一条语句时,又加了一,,,,,错误是出现在这吗? |
|
|
|
wulinwl 发表于 2017-3-17 17:02 嗯嗯,学到了,谢谢你 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:20 , Processed in 0.746923 second(s), Total 65, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号