搜索
bottom↓
回复: 11

keil中如何添加1T的单片机,要用到一些延时稍微准确的函数

[复制链接]

出0入0汤圆

发表于 2010-4-17 21:14:33 | 显示全部楼层 |阅读模式
keil中如何添加1T的单片机,我把UV3换成了STC提供的,可以函数函数的时间还是和12T的相同,因为要用到一些稍微准确点的延时,汇编不是很熟,用C,只要用KEIL调试的时间和实际时间差距不是太大就行了。

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-4-17 21:38:17 | 显示全部楼层
1T的单片机?没有听说过这个牌子,想要掩饰精确,直接nop不就好了。或者仿照TI的微秒延时程序,利用汇编循环执行nop。就一句话,很简单的。

出0入0汤圆

发表于 2010-4-17 22:13:18 | 显示全部楼层
回复【1楼】tiancaigao7 天才杨威利
-----------------------------------------------------------------------

1T的单片机,不是品牌,而是内核部分提速了 的增强型51。比如:ST C/MPC/的部分新型号、DS80c450等型号。


另外,keil里面针对1T/megawin芯片的仿真时间,到目前都是假的。本来12Mhz下,1nop应该是1/12us,而显示仍然是1us。可见keil根本没兴趣去更新那些个小厂所谓1T芯片的仿真部分的内容。。。。

出0入0汤圆

发表于 2010-4-18 09:00:19 | 显示全部楼层
那你就不要用仿真了,在实际中跑一下应该就是正确的时间。

出0入0汤圆

发表于 2010-4-18 09:51:49 | 显示全部楼层
增强型单片机, 如果使用定时器延时, 要看精确性很简单, 把KEIL时钟提高对应晶振的倍数, 如果1T的就乘12, 4T 6T同理.

如果要用汇编延时, 偷懒的方式是用C写一段延时函数, 编译后, 提出汇编代码, 根据每条指令需要的时间, 汇总总时间, 考虑跳转, 寄存器传值, 函数返回等因素, 制作100US MS级的精确延时.

如果是模拟SPI IIC等时序, 直接插入_nop_就好了.

18.432MHz晶振, 使用定时器产生真正的1MS精确延时, 精确性仅仅由晶振精度确定:
定时器工作于16位的1模式.
12T: 18432000/12/1000 = 1536 = 0x600, 在定时器的中断处理函数中, 不要关闭定时器, 直接给对应TH赋值0x6就可以了. 除非中断被挂起, 不然中断响应时间不可能超过256个机器周期.

1T: 18432000/1000 = 18432 = 0x4800,在定时器的中断处理函数中, 不要关闭定时器, 直接给对应TH赋值0x48就可以了.

4T 6T 同理.

出0入0汤圆

发表于 2010-4-20 11:03:15 | 显示全部楼层
有条件 就用示波器抓!懒得去数指令...哈哈!

出0入0汤圆

发表于 2010-4-20 11:55:59 | 显示全部楼层
to 4楼:你的思维真的很独特,STC的手册虽然广告多做得烂,但你也不能完全不看就认为懂了.
STC单片机并不是每条指令都1T,跟标准51的周期并不构成12倍的比例关系

出0入0汤圆

发表于 2010-4-20 12:32:28 | 显示全部楼层
仔细看看STC单片机中所谓1T指令的周期,再看看C8051F的指令周期!

出0入0汤圆

发表于 2010-4-22 21:19:05 | 显示全部楼层
to 6楼:定时器计数是根据时钟, 和指令需要多少个时钟毫无关系.

请先看明白我说的内容.

STC , 22.1184MHz 晶振, 近似1MS 软件延时.

; 22.1184MHz 晶振 1MS 延时, 22118个时钟为1MS
; C 文件中声明: extern void delay_ms(unsigned char count);
    ?PR?_delay_ms?delay SEGMENT CODE
    PUBLIC _delay_ms
    RSEG ?PR?_delay_ms?delay
   
_delay_ms:
    PUSH    ACC             ; 4时钟
    MOV     A, R5           ; 1时钟
    PUSH    ACC             ; 4时钟
    MOV     A, R6           ; 1时钟
    PUSH    ACC             ; 4时钟, 进栈共 14时钟

_cyc_ms:
    MOV     R5, #22         ; 2时钟
_ms:
    MOV     R6, #248        ; 2时钟
    DJNZ    R6, $           ; 4时钟, 248x4 = 992时钟
    DJNZ    R5, _ms         ; 4时钟, 从 _ms 上一条指令执行完此处一次, 一共1000时钟, 循环 22 次,
                            ; 22000时钟
    DJNZ    R7, _cyc_ms     ; 4时钟, 误差: 期望的毫秒数 (R7值x4)时钟 + 4时钟(RET) + 6时钟(LCALL) +
                            ; 4时钟(参数传递) + (进出栈)

    POP     ACC             ; 3时钟
    MOV     R6, A           ; 2时钟
    POP     ACC             ; 3时钟
    MOV     R5, A           ; 2时钟
    POP     ACC             ; 3时钟, 出栈共 13时钟

    RET                     ;

    END

出0入0汤圆

发表于 2010-4-22 21:29:53 | 显示全部楼层
回复【1楼】tiancaigao7 天才杨威利
1T的单片机?没有听说过这个牌子,想要掩饰精确,直接nop不就好了。或者仿照TI的微秒延时程序,利用汇编循环执行nop。就一句话,很简单的。
-----------------------------------------------------------------------

你真是个天才。

出0入0汤圆

发表于 2013-10-10 12:56:49 | 显示全部楼层
本帖最后由 hachineys2012 于 2013-10-10 12:57 编辑


确实像个天才~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-26 09:40

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

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