找回密码
 立即注册
查看: 431|回复: 3

菜鸟问题:这样的代码产生的方波是多少频率?

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2024-2-22 17:16:29 | 显示全部楼层 |阅读模式
MCU用STC8H8K64U,无中断,采用内部振荡24MHz,P11端口推挽输出,主代码如下,这样可以在P11上产生多少频率的方波?



void main(void)
{
     P11=~P11;
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6857

积分

论坛元老

积分
6857
发表于 2024-2-22 18:20:52 | 显示全部楼层
你这样写是不会产生输出信号的,做个简单修改:
  1. void main()
  2. {
  3.     P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
  4.     while (1)
  5.     {
  6.         P11 = ~P11;
  7.     }
  8. }
复制代码

主循环里面的指令转成汇编指令:
  1. LOOP:
  2.     CPL    P11
  3.     SJMP  LOOP
复制代码

其中CPL消耗1个指令周期,SJMP消耗3个指令周期,总共4个指令周期。
IO口翻转频率是:24MHz / 4 = 6MHz
产生的脉冲翻转2次为一个周期,所以脉冲频率为:6MHz / 2 = 3MHz
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2024-2-23 08:09:19 | 显示全部楼层
谢谢乘风老师的讲解,让我终于明白了为何这样一个取反命令怎么产生的方波的频率是3MHz,而不是12MHz。原来最终出来的代码中有跳转指令,会增加总的指令周期。非常感谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:450
  • 最近打卡:2025-05-06 04:24:11

17

主题

533

回帖

1330

积分

金牌会员

积分
1330
发表于 2024-2-23 09:07:58 | 显示全部楼层
乘风*** 发表于 2024-2-22 18:20
你这样写是不会产生输出信号的,做个简单修改:

主循环里面的指令转成汇编指令:

学到了,另外想请教一个问题,如果不考虑其他代码的情况,像这么高的脉冲 3MHZ的IO切换在IIC和SPI等通讯协议上 可以正常的被从机解析吗
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 03:37 , Processed in 0.113266 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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