一直不明白的定义
在STC单片机C语言编程上,开头部分一直有这样两行定义,在别的单片机上一直没看到。#define FOSC 12000000UL
#define (65535-(FOSC/115200+2)/4)
是不是这样定义以后,不管你原来设定的是多少,内部的工作频率,软件都把它固定到12Mhz了,波特率也成立第二行设定的了?
不是的,这个只是给编译器用的,真正的运行频率只能通过STC-ISP设定或者内部IRC频率寄存器来调节。
这个只是方便程序进行调用计算,比如说波特率需要使用你的主频来计算,外部改成24Mhz,同步更改FOSC的定义频率,就可以让代码自动计算出来合适的寄存器数值了。
主要作用是让代码自动计算填入,不用改了频率以后还一句一句的把时钟相关的代码都改过来 王昱顺 发表于 2024-2-11 12:12
不是的,这个只是给编译器用的,真正的运行频率只能通过STC-ISP设定或者内部IRC频率寄存器来调节。
这个只 ...
就是说,以后无论采用什么频率,什么波特率,程序中与频率有关的语句(比如延时),就不用改了,只要改这两行就可以了? cjtdz 发表于 2024-2-11 13:26
就是说,以后无论采用什么频率,什么波特率,程序中与频率有关的语句(比如延时),就不用改了,只要改这 ...
是的,这个就是给编译器看的。程序里面引用的都是这个定义进行计算。相当于简化了操作 cjtdz 发表于 2024-2-11 13:26
就是说,以后无论采用什么频率,什么波特率,程序中与频率有关的语句(比如延时),就不用改了,只要改这 ...
这个需要设定值和isp写入的频率值一样,不然可能得不到想要的结果 #define FOSC 12000000UL //这句的意思是C51预编译时用FOSC代替了12000000
#define AAA (65535-(FOSC/115200+2)/4) //C51预编译时,会自动计算这个AAA的具体值,并在编译时赋予定时器装载
这样写法的目的是简化晶振频率的修改复杂度,只改第一行的FOSC的值即可,且这句在文件的最前面很好找。 不会影响芯片实际工作的频率
只是便于 开发 维护 移植
本帖最后由 xxkj2010 于 2024-2-12 09:11 编辑
如果是使用内部IRC的,下载时必须根据设置的FOSC来选择主频率。 哦 原来如此 本帖最后由 DebugLab 于 2024-2-12 14:49 编辑
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6670
软件延时也可以使用这种方式
页:
[1]
2