完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#define MAIN_Fosc 22118400L //定义主时钟
#define Systick 10000 // 次/秒, 系统滴答频率, 在4000~16000之间 #define Timer0_Reload (65536UL - ((MAIN_Fosc + SysTick/2) / SysTick)) //Timer 0 中断频率, 在config.h中指定系统滴答频率, 在4000~16000之间. AUXR = 0x80; //Timer0 set as 1T, 16 bits timer auto-reload, TH0 = (u8)(Timer0_Reload / 256); TL0 = (u8)(Timer0_Reload % 256); ET0 = 1; //Timer0 interrupt enable TR0 = 1; //Tiner0 run 这些代码是STC试验箱里面的代码 是在官网下载的 请问#define Timer0_Reload (65536UL - ((MAIN_Fosc + SysTick/2) / SysTick))这个是怎么写的 虽然我知道是什么意思 我想问的是 这句代码怎么推导来的! 假如我要定时300US怎么写这个宏呢? |
|
相关推荐
4个回答
|
|
1、STC单片机的定时器部分是自己设计的,跟通常8051单片机不同所以计算方式不同。具体在技术手册上有详细说明。根据代码只知道你的单片机是工作在 1T模式,16位定时器。
2、附上个人意见,仅供参考,勿怪:2.1、你问问题不说是哪款单片机?怎么解决?2.2、做开发成长学习的过程是 问题--思考--查找答案--验证答案--解决问题!你问的这种问题在芯片的技术手册上有详细说明。看过即可解决。在论坛是无法问出所以然的。还是建议以自己动手为先。 |
|
|
|
|
|
好吧 那我说下我的个人理解:
1.1T单片机的意思就是1个时钟周期既是一个机器周期,22.1184Mhz晶振则说明1秒有22118400个时钟周期或者机器周期,那么要是延时1ms应该是有22118400/1000个时钟周期,所以除以10000 是延时100us的所需时钟周期数, 2、至于为什么加入Systick/2,只是为了保证时钟周期的准确性,因为22118400/10000是2211.84,在程序中进行强制类型转换成整数是2211,但是2211.84更接近2212,加入Systick/2后的强制类型转换后是2212,所以保证了计时的准确性。 |
|
|
|
同意3楼的看法。这种问题应该多看数据手册,多看几次就会理解的。
|
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9004 浏览 16 评论
4052 浏览 18 评论
1115浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 15:30 , Processed in 1.739255 second(s), Total 88, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号