打印
[51单片机]

STC15系列单片机的宏定义不懂,求解答

[复制链接]
8806|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
autopccopy| | 2014-3-18 13:24 | 只看该作者
第一行的FOSC 18432000L 定义你的芯片时钟值,后面的是程序自动通过该值计算一些重载值和参数。
例如你用的是11.0592M的晶振或STC15系列定义了11.0592M的时钟,将第一行改为:【#define FOSC 11059200L】即可。

(19)

使用特权

评论回复
板凳
ayb_ice| | 2014-3-18 13:30 | 只看该作者
每秒中断1000次的初值

使用特权

评论回复
地板
btliugtnavy| | 2014-3-18 13:38 | 只看该作者
学习了

使用特权

评论回复
5
langzizhishang|  楼主 | 2014-3-18 16:16 | 只看该作者
autopccopy 发表于 2014-3-18 13:24
第一行的FOSC 18432000L 定义你的芯片时钟值,后面的是程序自动通过该值计算一些重载值和参数。
例如你用的 ...

请问,第二句话得到的值是多少,怎么来的额?

使用特权

评论回复
6
langzizhishang|  楼主 | 2014-3-18 16:16 | 只看该作者
ayb_ice 发表于 2014-3-18 13:30
每秒中断1000次的初值

请问,第二句话得到的值是多少,怎么来的额?

使用特权

评论回复
7
coody| | 2014-3-18 16:25 | 只看该作者
第二句话得到的值 = 65536-FOSC/1000, 取整数

使用特权

评论回复
8
ayb_ice| | 2014-3-18 16:26 | 只看该作者
本帖最后由 ayb_ice 于 2014-3-18 16:27 编辑
langzizhishang 发表于 2014-3-18 16:16
请问,第二句话得到的值是多少,怎么来的额?

#define FOSC 18432000L(假定芯片工作频率为18.432MHz)
#define T1MS (65536-FOSC/1000)  //1T模式,18.432MHz

简单数学你不会吗

(65536-FOSC/1000) = 65536 - 18432000/1000 = 65536 - 18432 = 47104 = 0xB800

使用特权

评论回复
9
langzizhishang|  楼主 | 2014-3-18 16:36 | 只看该作者
ayb_ice 发表于 2014-3-18 16:26
#define FOSC 18432000L(假定芯片工作频率为18.432MHz)
#define T1MS (65536-FOSC/1000)  //1T模式,18.43 ...

抱歉,没说清楚,刚百度了下,#define T1MS (65536-FOSC/1000)这个好像是计算定时1ms时所需要的定时器初值,不知道这个是怎么计算的?求解答。

使用特权

评论回复
10
ayb_ice| | 2014-3-18 17:17 | 只看该作者
本帖最后由 ayb_ice 于 2014-3-18 17:25 编辑
langzizhishang 发表于 2014-3-18 16:36
抱歉,没说清楚,刚百度了下,#define T1MS (65536-FOSC/1000)这个好像是计算定时1ms时所需要的定时器初 ...

一秒钟中断1000次,周期不是1MS吗

这又不是什么高深的东西

自己反推一下就知道了

使用特权

评论回复
11
onewaiting| | 2014-3-19 09:33 | 只看该作者
ayb_ice 发表于 2014-3-18 17:17
一秒钟中断1000次,周期不是1MS吗

这又不是什么高深的东西

补充一下:你要是还没明白他说的是什么意思,那你应该好好补下单片机的机器周期、时钟周期、指令周期这些基本的东西了

使用特权

评论回复
12
coody| | 2014-3-19 14:56 | 只看该作者
支持11#

使用特权

评论回复
13
lkl0305| | 2014-3-23 20:34 | 只看该作者
https://bbs.21ic.com/forum.php?mod=attachment&aid=MjYzODY0fGQ3ZDMwZDI2ODQ5NzkwMWI1MGU2NGEyMzk5MjJmMmZkfDE3MzI2MTU4Nzg%3D&request=yes&_f=.jpg

初值.jpg (32.33 KB )

初值.jpg

使用特权

评论回复
14
langzizhishang|  楼主 | 2014-3-25 15:54 | 只看该作者
lkl0305 发表于 2014-3-23 20:34
https://bbs.21ic.com/forum.php?mod=attachment&aid=MjYzODY0fGQ3ZDMwZDI2ODQ5NzkwMWI1MGU2NGEyMzk5MjJmMmZkfDE3MzI2MTU4Nzg%3D&request=yes&_f=.jpg

谢谢大侠,偶懂了。

使用特权

评论回复
15
她是光芒| | 2015-7-27 11:04 | 只看该作者
ayb_ice 发表于 2014-3-18 17:17
一秒钟中断1000次,周期不是1MS吗

这又不是什么高深的东西

你说的周期应该存在误差吧,在FOSC:18432000L的情况在#define        T1MS        (65536-FOSC/1000),此周期为3.324ms(实际测量的值)

使用特权

评论回复
16
ayb_ice| | 2015-7-27 15:08 | 只看该作者
她是光芒 发表于 2015-7-27 11:04
你说的周期应该存在误差吧,在FOSC:18432000L的情况在#define        T1MS        (65536-FOSC/1000),此 ...

有误差也正常嘛,
人有也没有说不允许有误差,

使用特权

评论回复
17
linlh11| | 2017-6-3 16:02 | 只看该作者
本帖最后由 linlh11 于 2017-6-3 16:07 编辑

1T模式下,我推导出来的公式和手册上的以一样,可是12T模式下,我推导出来的公式是:65536-FOSC/12*1000,而手册上是65536-FOSC/12/1000,怎么回事?推导公式步骤如下:12T模式下,计数一次的采样周期Tcy=12/FOSC,1ms=1/1000秒=T定,则定时1ms,需要的计次数n=T定/Tcy=(1/1000)/(12/FOSC)=FOSC/(12*1000)。我的推导错在哪里了?

使用特权

评论回复
18
datouyuan| | 2017-6-5 10:08 | 只看该作者
linlh11 发表于 2017-6-3 16:02
1T模式下,我推导出来的公式和手册上的以一样,可是12T模式下,我推导出来的公式是:65536-FOSC/12*1000, ...

马大哈

使用特权

评论回复
19
coody| | 2017-6-5 14:42 | 只看该作者
linlh11 发表于 2017-6-3 16:02
1T模式下,我推导出来的公式和手册上的以一样,可是12T模式下,我推导出来的公式是:65536-FOSC/12*1000, ...

FOSC/12/1000 == FOSC/(12*1000) != FOSC/12*1000,基础啊基础,看仔细了。

各个论坛经常看到有人计算的公式都没搞对就开骂的,骂MCU或编译器都有,有的是计算时没有注意变量长度的匹配,比如用一个char型变量做大数据的乘法(溢出错误),等等。

使用特权

评论回复
20
linlh11| | 2017-7-22 14:39 | 只看该作者
小学学数学时,多个数字做四则运算,是用括号区分的,数据手册里可没有,所以容易犯错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

118

帖子

1

粉丝