amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 1152|回复: 10

51单片机I/O管脚最快翻转速度

[复制链接]
发表于 2015-12-4 18:31:01 | 显示全部楼层 |阅读模式
本帖最后由 net20 于 2015-12-4 18:39 编辑

单片机晶振11.0592MHz,单片机型号:STC89C52RC
#include <reg52.h>
sbit pulse1=P2^0;
main()
{
        pulse1=1;
       
        while(1)
        {
        pulse1=~pulse1;
       
        };
       
}

用福禄克124示波表测了一下,输出频率为153.6KHz
当ISP下载软件“使能6T(双倍速)模式(相当于晶振是22.1184
MHz)”,单片机输出频率还是153KHz左右,没有变化。
 楼主| 发表于 2015-12-4 18:36:29 | 显示全部楼层
是否可以认为最快翻转速度是153KHz , 即6.535947712us
不知道有没有51单片机I/O翻转速度相关说明...
发表于 2015-12-4 19:05:25 | 显示全部楼层
C语言的一句话,跟汇编的一条指令是两码事
发表于 2015-12-4 19:17:39 | 显示全部楼层
STC89C52   没有双倍速吧   15   12C 系列 才有
发表于 2015-12-4 19:20:00 | 显示全部楼层
51的好像没有设置倍频的锁存器,只能用外部晶振,最大速度取决于晶振,而且C语言跟汇编也是两码事,不知道使能6T具体是干嘛的。
发表于 2015-12-4 19:45:01 | 显示全部楼层
你反一次转移一次,影响严重,你复制1000个翻转放到while中再测量
发表于 2015-12-4 22:19:38 | 显示全部楼层
LZ测得不够仔细,STC89C52RC在6T模式下速度翻翻,等效于12T的22.1184MHZ,你要下载后重新上电才起作用。

while(1)
{
        pulse1=~pulse1;
};
C语言编译后,等效为:
L_Loop:
      CPL    pulse     ; 12T 或 6T
      SJMP  L_Loop  ; 24T 或 12T

11059200 12T时输出频率就是 11059200 / 2 / 36 = 153600HZ。
如果用6T,频率加倍。
你可以使用Timer2输出更快的时钟,不需要中断,可以输出fosc/24/N(12T时)或fosc/12/N,N为T2的16位重装值。

对于STC15系列,则翻转速度更快:
L_Loop:
      CPL    pulse     ; 3T
      SJMP  L_Loop  ; 3T
11059200时输出频率就是 11059200 / 2 / 6 = 921600HZ。
你可以使用任何一个Timer输出更快的时钟,不需要中断,可以输出fosc/2/N,N为Timer的16位重装值。比如11059200主频,可以用任何Timer输出高达11059200/2 = 5529600HZ的方波。

对于将要推出的STC15H系列,则翻转速度更快:
L_Loop:
      CPL    pulse     ; 1T
      SJMP  L_Loop  ; 3T
11059200时输出频率就是 11059200 / 2 / 4 = 1382400HZ。
如果这样的话,可以输出高达fosc/2的翻转速度(忽略随后的跳转指令的话)。
while(1)
{
        pulse1=~pulse1;
        pulse1=~pulse1;
        pulse1=~pulse1;
        pulse1=~pulse1;
        pulse1=~pulse1;
        pulse1=~pulse1;
};

你同样可以使用任何一个Timer输出更快的时钟,不需要中断,可以输出fosc/2/N,N为Timer的16位重装值。


 楼主| 发表于 2015-12-5 08:26:26 | 显示全部楼层
本帖最后由 net20 于 2015-12-5 08:31 编辑
小李非刀 发表于 2015-12-4 22:19
LZ测得不够仔细,STC89C52RC在6T模式下速度翻翻,等效于12T的22.1184MHZ,你要下载后重新上电才起作用。

  ...


受教了~!
使能6T模式后,从新上电,频率变为307KHz
发表于 2015-12-6 11:04:33 | 显示全部楼层
NJ8888 发表于 2015-12-4 19:45
你反一次转移一次,影响严重,你复制1000个翻转放到while中再测量

可能这样最快
发表于 2015-12-6 12:38:07 | 显示全部楼层
循环判断占用时间了。
发表于 2015-12-6 13:09:05 来自手机 | 显示全部楼层
直接输出高,输出低,这样,不要用翻转。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-8-23 14:05

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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