完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如果我在主程序写b=1234,数码管就能显示1234.所以我想应该没进中断,但都按照书上的步骤都设置了,不知道哪错了。用的是20M晶振 想定时1ms,所以定时器TMR0的初值写的是96(设置的是32分频)定时器每加1的时间((1/20000000)*4*32)=0.0000064=6.4us 若定时1ms,定时器增加的数=1024us/6.4us=160 TMR0 的初值为256-160=96
#include main(){TRISD=0;TRISA=0XE3;T0CS=0;PSA=0;PS2=1;PS1=0;PS0=0;T0IF=0;T0IE=1;GIE=1;TMR0=96;//此处再加一句b=1234,则数目管则显示1234while(1){display(b);}} void interrupt tiMER0() {if(T0IE&&T0IF){T0IF=0;b=1234;}} |
|
相关推荐
3个回答
|
|
没搞过PIC,呵呵。帮顶。。。
|
|
|
|
enum _T0MODE{ TOMODE_Timer=0 , T0MODE_Counter= (1<<5) };
void Timer0_Ini(u8 mode, u8 div, FunctionalStatus irEN){OPTION_REG &= 0xc0;//预分配给Timer0OPTION_REG |= mode;OPTION_REG |= div;T0IF = 0;T0IE = (DISABLE==irEN)?0:1;} |
|
|
|
您帮我看看这两个程序有什么区别 我感觉都一样呢 但执行的效果就不一样
void interrupt TIMER0() { GIE=0; if(T0IE&&T0IF) { T0IF=0; for(count=0;count<10000;count++) count=0; if(b==0) { b=10000; } b--; TMR0 = 0x05; } GIE=1; } void interrupt Time0(void) { GIE = 0;//关总中断 if(T0IF)//定时器0计数溢出 { T0IF = 0;//清中断标志 count++;//计数器加1 if(count >= 10000)//计数器到10000,即1s { count = 0; if(b== 0) { b= 100; } b--;//时间减1 } TMR0 = 0x05; } GIE = 1;//开总中断 } |
|
|
|
只有小组成员才能发言,加入小组>>
3303 浏览 9 评论
2978 浏览 16 评论
3479 浏览 1 评论
9039 浏览 16 评论
4071 浏览 18 评论
1163浏览 3评论
597浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
586浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2322浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1887浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 12:13 , Processed in 1.302785 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号