找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4254|回复: 6
打印 上一主题 下一主题
收起左侧

C语言时钟频率MAIN_Fosc == 12000000L 表示的是什么意思呀,求助各位大神

[复制链接]
跳转到指定楼层
楼主
ID:894870 发表于 2021-4-3 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void  delay_ms(uchar ms)
{
#if MAIN_Fosc == 12000000L
    unsigned char i, j;
    do
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        }
        while (--i);
    }
    while(--ms);


问题:MAIN_Fosc == 12000000L  表示的是什么意思呀,是12MHz???[size=10.6667px]后面的程序是自动生成的还是自己写出来的呀??


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390416 发表于 2021-4-3 22:13 | 只看该作者
表示 这些参数只适合12000000晶振。不过,你研究这种死等延迟是没有意义的。

真正搞工程项目设计的,压根就不去计算这种参数的。理由如下:
1、假设在同一个硬件上做测试,单片机CPU指令周期是一致的。那么 变量i、K,存放在data跟存放在XDATA,读写速度能一样?精确计算有意义吗?
2、假设都存放在data,延迟1ms只需要char类型的变量即可完成,但是,延迟100ms必须16位变量,那么执行时间还能照着公式去套算?
3、假设上述条件都一样,计算好的延迟时间是1ms并且误差1%,打开中断之后,延迟时间变成了5毫秒了。误差500%了,精确计算有意义吗?
4、假设上述条件不影响延迟时间,那么,编译器呢?谁敢说编译器不同的优化等级不影响delay的延迟时间?
5、还有硬件不同的情况,就需要重新计算了。比如晶振频率不同,CPU内核速度不同,STC8H单片机就比STC15快了很多了比89系列快了十几倍了。

所以,不要去精确的计算delay 延迟了多少时间,毕竟单片机的运行情况有很多变数。学会提高CPU的代码执行效率,是很有必要的!
“什么是单片机?咱玩的就是时间!”
回复

使用道具 举报

板凳
ID:584814 发表于 2021-4-4 10:48 | 只看该作者
#if MAIN_Fosc == 12000000L
就是说满足这个条件以下语句生效直到下一个如#ENDIF的止
按这个程序的写法程序开头一般会定义MAIN_Fosc的值并且备注有多个以选择不同值以选择相关代码
12000000L一般指12M主频(晶振)在延时中如楼上所说也就是供参考的东东而且延时一般在上下限内就OK
回复

使用道具 举报

地板
ID:302703 发表于 2021-4-4 15:27 | 只看该作者
MAIN_Fosc == 12000000L是判断当前系统时钟主频是不是12M主频(晶振),L表示12000000是一个无符号long整形数据
回复

使用道具 举报

5#
ID:894870 发表于 2021-4-4 21:38 | 只看该作者
人人学会单片机 发表于 2021-4-3 22:13
表示 这些参数只适合12000000晶振。不过,你研究这种死等延迟是没有意义的。

真正搞工程项目设计的,压 ...

谢谢呀
回复

使用道具 举报

6#
ID:894870 发表于 2021-4-4 21:40 | 只看该作者
醉逍遥 发表于 2021-4-4 15:27
MAIN_Fosc == 12000000L是判断当前系统时钟主频是不是12M主频(晶振),L表示12000000是一个无符号long整形数 ...

懂了,谢谢
回复

使用道具 举报

7#
ID:894870 发表于 2021-4-4 21:42 | 只看该作者
man1234567 发表于 2021-4-4 10:48
#if MAIN_Fosc == 12000000L
就是说满足这个条件以下语句生效直到下一个如#ENDIF的止
按这个程序的写法程 ...

好的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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