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

2020-01-26 12:58发布

keil中如何添加1T的单片机,我把UV3换成了STC提供的,可以函数函数的时间还是和12T的相同,因为要用到一些稍微准确点的延时,汇编不是很熟,用C,只要用KEIL调试的时间和实际时间差距不是太大就行了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
XA144F
1楼-- · 2020-01-27 09:00
 精彩回答 2  元偷偷看……
gycsy
2楼-- · 2020-01-27 13:18
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
flkflk
3楼-- · 2020-01-27 14:17
回复【1楼】tiancaigao7 天才杨威利
1T的单片机?没有听说过这个牌子,想要掩饰精确,直接nop不就好了。或者仿照TI的微秒延时程序,利用汇编循环执行nop。就一句话,很简单的。
-----------------------------------------------------------------------

你真是个天才。
hachineys2012
4楼-- · 2020-01-27 16:57
本帖最后由 hachineys2012 于 2013-10-10 12:57 编辑


确实像个天才~

一周热门 更多>