搜索
bottom↓
回复: 12

51IO翻转速率最大能到多少?

[复制链接]

出0入0汤圆

发表于 2013-1-17 20:20:02 | 显示全部楼层 |阅读模式
如果超出了范围会出现什么现象?我的实验是IO处在高电平。请大侠指教指教

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-1-17 20:25:37 | 显示全部楼层
如何超出?

出0入0汤圆

发表于 2013-1-17 20:46:45 | 显示全部楼层
stc 1T 系列,22.1184M晶振,全速翻转,C语言,试过,大约1.2MHz

出0入93汤圆

发表于 2013-1-17 21:28:25 | 显示全部楼层
xinfa190 发表于 2013-1-17 20:46
stc 1T 系列,22.1184M晶振,全速翻转,C语言,试过,大约1.2MHz

这个,这个,和理论计算相差非常巨大啊……

这个程序,估计是使用指令翻转最快的了(不考虑时钟输出和PCA):
  1. CY=1;
  2. P1_0 = 0;                  // CLR P1.0,4个时钟周期
  3. P1_0 = CY;                // MOV P1.0, C,3个时钟周期
  4. P1_0 = 0;
  5. P1_1 = CY;
  6. ...
复制代码
计算得到22.1184M晶振时翻转速率为22.1184/(4+3) = 3.16MHz,差别巨大啊

PCA高速脉冲输出模式中,f =  Fosc / (4 * CCAPnL_Value )
则fmax = 22.1184 / 4 = 5.5296MHz

T0、T1的时钟输出模式中:按1T模式,输出频率 = SysClk / (256 - TH0) / 2
fmax = 22.1184 / 1 / 2 = 11.0592MHz

BTW:以上结果均未经过实际验证,仅仅是理论计算,因为我不用STC。不知道实际和理论之间到底有多少差距。

出0入0汤圆

发表于 2013-1-18 00:01:50 | 显示全部楼层
试过40Mhz然后2分频输出。。20Mhz,波形已经失真,输出的低电平达不到0V,在1v那样。   手册上给出的IO最大翻转速度为15Mhz,四分频后输出10Mhz,波形还算ok,但是也不是矩形波了,上升沿和下降沿有点圆滑了。而且带负责能力差,用示波器1:10测的。1:1的时候波形就变成正弦波了。

出0入0汤圆

发表于 2013-1-18 10:03:45 | 显示全部楼层
takashiki 发表于 2013-1-17 21:28
这个,这个,和理论计算相差非常巨大啊……

这个程序,估计是使用指令翻转最快的了(不考虑时钟输出和PC ...

不知道你的代码是不是最快的,我是这么写的
sbit  clk=P1^0;
main()
{
while(1)
{
clk=~clk;
}
}
直接翻转IO就不要想了,stm32系列ARM,72MHz主频,类似上面的代码,不到2.5MHZ

出0入93汤圆

发表于 2013-1-18 10:10:19 | 显示全部楼层
xinfa190 发表于 2013-1-18 10:03
不知道你的代码是不是最快的,我是这么写的
sbit  clk=P1^0;
main()


嗯,我知道了,你这个的确不是最快的,看来STC官方手册还是没错的。
因为clk=~clk;并不是占用时间最短的指令(4个周期,clk=~clk, clk=1, clk=0都是4个周期,但是clk=CY只要三个周期),while在这里占用了大量的时间,因为需要进行跳转。
测试最大IO速度时一定不能打断程序固有的流程,否则就人为的降低了速度。

72M的STM32是可以达到18MHz的,我测试过,不管是直接对ODR赋值,还是对BSRR赋值,还是通过位带方式,都是18MHz。

出0入0汤圆

发表于 2013-1-18 10:40:04 | 显示全部楼层
不妨试试:
P1 ^= 0x01;

出0入0汤圆

发表于 2013-1-18 11:36:12 | 显示全部楼层
CPL BIT
有没试过
填满ROM,不用循环

出0入0汤圆

发表于 2013-1-18 11:37:57 | 显示全部楼层
Louis_Bright 发表于 2013-1-18 10:40
不妨试试:
P1 ^= 0x01;

这条指令2个字节,在stc10,11,12上是4个时钟周期。


最短的是
while:
CPL P1^0   ;2B4T
SJMP while ;2B3T

一共7个时钟周期。35Mhz晶振的时候 IO翻转就有5M,最高也是5M了。

出0入93汤圆

发表于 2013-1-18 13:19:04 | 显示全部楼层
wx85105157 发表于 2013-1-18 11:37
这条指令2个字节,在stc10,11,12上是4个时钟周期。

算法有误哦。翻过去了还要翻回来才能算作一个周期,因此你的方案是35/7/2=2.5MHz,而我的方案在25M时钟下则是真实的5MHz。
  1. SETB C
  2. CLR P1.0            ;翻了一次了,2字节,4周期
  3. MOV P1.0, C       ;再翻一次,2字节,3周期
  4. CLR P1.0
  5. MOV P1.0, C
  6. ...
复制代码

出0入0汤圆

发表于 2013-1-18 13:58:57 | 显示全部楼层
takashiki 发表于 2013-1-18 13:19
算法有误哦。翻过去了还要翻回来才能算作一个周期,因此你的方案是35/7/2=2.5MHz,而我的方案在25M时钟下 ...

哈哈,我是忘记了,不过你也说错了,应该是在35M的时钟下。

而且你这个没跳转。。


如果只是要输出1~5个脉冲的话,用串口的方式0同步移位输出,选用syckl/2,在35M的情况下,能做到8.75Mhz的翻转。

出0入45汤圆

发表于 2013-1-18 18:09:27 | 显示全部楼层
试过,STC的I/0翻转最快是13.5MHZ
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 07:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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