求助:stc12C5608运行速度慢的问题

[复制链接]
3237|4
 楼主| huzhongmoshui 发表于 2013-6-24 11:00 | 显示全部楼层 |阅读模式
如题,我这个stc12C5608AD的单片机使用的是内部5MHz的时钟,然后clk_div = 0;在做while(1)循环里翻转io口时,发现翻转的间隔是1.25us,而且在做io查询时,一个5us时长的信号检测不到。请教大家,是哪里设置的不对吗?
fp123123 发表于 2013-6-24 11:19 | 显示全部楼层
这个速度正常的,看看编译出来的汇编代码就知道了,while(1)是一个跳转,翻转1次是几条指令,不清楚STC有没有中断捕获,有的话可以用这个配合计数器在做,不然就要提高主频才行
coody 发表于 2013-6-24 11:56 | 显示全部楼层
比如:
while(1)
{
   P10 = ~P10;  //翻转
}

编译后将是:
L1:
CPL  P1.0   ;4T
SJMP  L1    ;3T

那么,输出频率就是 Fosc / 7 / 2, 假设fosc是14MHZ, 则输出频率为1MHZ。
chunyang 发表于 2013-6-24 16:44 | 显示全部楼层
对于时序要求很严格的应用场合应该使用汇编编程,否则具体时间是不好确定的。
fp123123 发表于 2013-6-24 16:57 | 显示全部楼层
楼上的代码,用软件方式产生脉冲,最快也只能是这样了,STC的1T型号,凡是对直接地址的操作,都需要4个时钟周期

5us的脉冲,对于5M的主频,只有25个时钟周期,用软件查询的方法时间太短,不可靠

看了一下这个型号STC的PDF,它的PCA模块支持捕获模式,有4个PCA模块,可以用来检测5us的脉冲。方法是把1路PCA设置为捕获脉冲上升沿,另1路PCA设置为捕获脉冲下降沿同时发出中断,在中断函数里读出2个PCA的捕获寄存器CCAPnL/CCAPnH,把数值相减就可以知道脉冲长度
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部