daw85 发表于 2024-2-22 17:16:29

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

MCU用STC8H8K64U,无中断,采用内部振荡24MHz,P11端口推挽输出,主代码如下,这样可以在P11上产生多少频率的方波?



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

乘风飞扬 发表于 2024-2-22 18:20:52

你这样写是不会产生输出信号的,做个简单修改:
void main()
{
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口

    while (1)
    {
      P11 = ~P11;
    }
}
主循环里面的指令转成汇编指令:
LOOP:
    CPL    P11
    SJMPLOOP
其中CPL消耗1个指令周期,SJMP消耗3个指令周期,总共4个指令周期。
IO口翻转频率是:24MHz / 4 = 6MHz
产生的脉冲翻转2次为一个周期,所以脉冲频率为:6MHz / 2 = 3MHz

daw85 发表于 2024-2-23 08:09:19

谢谢乘风老师的讲解,让我终于明白了为何这样一个取反命令怎么产生的方波的频率是3MHz,而不是12MHz。原来最终出来的代码中有跳转指令,会增加总的指令周期。非常感谢!

嵌入式之路 发表于 2024-2-23 09:07:58

乘风飞扬 发表于 2024-2-22 18:20
你这样写是不会产生输出信号的,做个简单修改:

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


学到了,另外想请教一个问题,如果不考虑其他代码的情况,像这么高的脉冲 3MHZ的IO切换在IIC和SPI等通讯协议上 可以正常的被从机解析吗
页: [1]
查看完整版本: 菜鸟问题:这样的代码产生的方波是多少频率?