完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
定时器里的全局变量自加不起作用,非常简单的程序,请看:
void main() { // hong_fashe是p1^2. hong_fashe =0; //开机后先低电平,防止烧毁。 Delay500ms() ; Delay500ms() ; Delay500ms() ; time0_init(); hong_fashe=1; EA =1; while(1) { if(ms_mark==1) hong_fashe =0; if(ms_mark==2) hong_fashe =1; } } void time0()interrupt 1 { TF0 =0; TH0 =T0_MS_H; TL0 =T0_MS_L; ms_mark++; } void time0_init() { TMOD &=0XF1; //定时器0工作于模式一下,定时器1的位数保持不变 TH0 =T0_MS_H; //晶振12m 另一个有语句#define T0_MS_H 0XEC ,#define T0_MS_L 0X78 //需要定时的系统基准时间,5ms TL0 =T0_MS_L; ET0 =1; TR0 =1; } 应该是每5ms变量 ms_mark自动加一,进入while前是高电平,过5ms为低电平,再过5ms为高电平,,是这样吧?? 实际显示的图像见附件 |
|
相关推荐
8个回答
|
|
|
|
|
|
什么很快呀?
进入while前为高电平,进入while等待5ms,ms_mark加1 hong_fashe变成低电平,再等待5ms再加一,hong_fashe变为高电平。以后没有if语句适合了,一直保持高电平。应该这样吧?? |
|
|
|
|
|
可是实际波形不是这样的!!
|
|
|
|
|
|
|
|
对,关键是开始的1,2个脉冲的周期是不对的。。
我把TMOD &=0XF1,改成了TMOD =0X01;就正常了, 我只是用了定时器0,工作于模式一,TMOD &=0XF1的作用不就是,让t0定时、工作模式1与int0无关,定时器1保持不变嘛!和TMOD =0X01;等价的呀!错误找到了,不知道什么原因 |
|
|
|
|
|
|
|
哎,犯了个低级错误,那天写程序写糊涂了。。。谢谢站长同志啊!
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3457 浏览 1 评论
8995 浏览 16 评论
4050 浏览 18 评论
1105浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1858浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 00:07 , Processed in 1.129024 second(s), Total 65, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号