找回密码
 立即注册
查看: 511|回复: 15

一直不明白的定义

[复制链接]
  • TA的每日心情
    擦汗
    2024-5-6 07:46
  • 签到天数: 59 天

    [LV.5]常住居民I

    28

    主题

    46

    回帖

    484

    积分

    中级会员

    积分
    484
    发表于 2024-2-11 12:07:57 | 显示全部楼层 |阅读模式
    在STC单片机C语言编程上,开头部分一直有这样两行定义,在别的单片机上一直没看到。

       #define FOSC 12000000UL
       #define (65535-(FOSC/115200+2)/4)
    是不是这样定义以后,不管你原来设定的是多少,内部的工作频率,软件都把它固定到12Mhz了,波特率也成立第二行设定的了?
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 121 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2040

    积分

    荣誉版主

    积分
    2040
    发表于 2024-2-11 12:12:49 | 显示全部楼层
    不是的,这个只是给编译器用的,真正的运行频率只能通过STC-ISP设定或者内部IRC频率寄存器来调节。
    这个只是方便程序进行调用计算,比如说波特率需要使用你的主频来计算,外部改成24Mhz,同步更改FOSC的定义频率,就可以让代码自动计算出来合适的寄存器数值了。
    主要作用是让代码自动计算填入,不用改了频率以后还一句一句的把时钟相关的代码都改过来
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-5-6 07:46
  • 签到天数: 59 天

    [LV.5]常住居民I

    28

    主题

    46

    回帖

    484

    积分

    中级会员

    积分
    484
     楼主| 发表于 2024-2-11 13:26:26 | 显示全部楼层
    王昱顺 发表于 2024-2-11 12:12
    不是的,这个只是给编译器用的,真正的运行频率只能通过STC-ISP设定或者内部IRC频率寄存器来调节。
    这个只 ...

    就是说,以后无论采用什么频率,什么波特率,程序中与频率有关的语句(比如延时),就不用改了,只要改这两行就可以了?

    点评

    是的,这个就是给编译器看的。程序里面引用的都是这个定义进行计算。相当于简化了操作  详情 回复 发表于 2024-2-11 14:14
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 121 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2040

    积分

    荣誉版主

    积分
    2040
    发表于 2024-2-11 14:14:48 | 显示全部楼层
    cjtdz 发表于 2024-2-11 13:26
    就是说,以后无论采用什么频率,什么波特率,程序中与频率有关的语句(比如延时),就不用改了,只要改这 ...

    是的,这个就是给编译器看的。程序里面引用的都是这个定义进行计算。相当于简化了操作
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    26

    主题

    820

    回帖

    2058

    积分

    金牌会员

    积分
    2058
    发表于 2024-2-11 15:13:00 | 显示全部楼层
    cjtdz 发表于 2024-2-11 13:26
    就是说,以后无论采用什么频率,什么波特率,程序中与频率有关的语句(比如延时),就不用改了,只要改这 ...

    这个需要设定值和isp写入的频率值一样,不然可能得不到想要的结果
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 110 天

    [LV.6]常住居民II

    10

    主题

    582

    回帖

    924

    积分

    高级会员

    积分
    924
    发表于 2024-2-11 17:33:22 | 显示全部楼层
    #define FOSC 12000000UL         //这句的意思是C51预编译时用FOSC代替了12000000
    #define AAA   (65535-(FOSC/115200+2)/4)          //C51预编译时,会自动计算这个AAA的具体值,并在编译时赋予定时器装载

    这样写法的目的是简化晶振频率的修改复杂度,只改第一行的FOSC的值即可,且这句在文件的最前面很好找。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2140

    积分

    荣誉版主

    积分
    2140
    发表于 2024-2-12 07:28:24 | 显示全部楼层
    不会影响芯片实际工作的频率
    只是便于 开发 维护 移植  
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 172 天

    [LV.7]常住居民III

    67

    主题

    861

    回帖

    2886

    积分

    金牌会员

    积分
    2886
    发表于 2024-2-12 09:04:23 | 显示全部楼层
    本帖最后由 xxkj2010 于 2024-2-12 09:11 编辑

    如果是使用内部IRC的,下载时必须根据设置的FOSC来选择主频率。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    难过
    昨天 00:10
  • 签到天数: 102 天

    [LV.6]常住居民II

    11

    主题

    69

    回帖

    235

    积分

    中级会员

    积分
    235
    发表于 2024-2-12 11:13:12 | 显示全部楼层
    哦 原来如此
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:55
  • 签到天数: 116 天

    [LV.6]常住居民II

    25

    主题

    304

    回帖

    1053

    积分

    荣誉版主

    Cyber Hamster

    积分
    1053
    发表于 2024-2-12 14:48:08 | 显示全部楼层
    本帖最后由 DebugLab 于 2024-2-12 14:49 编辑

    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6670
    软件延时也可以使用这种方式
    (=・ω・=)
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-17 15:00 , Processed in 0.074100 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表