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

2020-01-26 12:58发布

keil中如何添加1T的单片机,我把UV3换成了STC提供的,可以函数函数的时间还是和12T的相同,因为要用到一些稍微准确点的延时,汇编不是很熟,用C,只要用KEIL调试的时间和实际时间差距不是太大就行了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
gycsy
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

一周热门 更多>