微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有一个关于STC12C5620AD系列的定时问题

有一个关于STC12C5620AD系列的定时问题

时间:10-02 整理:3721RD 点击:
用汇编写了一段测试定时器的小程序(程序如下所述),采用了T1在方式2工作模式,要求是在100uS中断一次,MPU工作在1T模式,定时器1设置在T1x12(传统的8051模式),在KEIL的调试模式设置中使用与实际频率相等,晶振采用11.0529MC,然而在试验时却发现P1口的状态翻转比1秒钟快许多,不知是什么原因,还望各位前辈指点一二,小子在这里先谢谢。
#include <STC12C56.INC>
        SYS1        EQU 20H                ;定义用户位控制区域
        SYS2        EQU 21H
        SYS3        EQU 22H
        T500US        BIT 00H                ;500uS中断标志
        T1MS        BIT 01H                ;1ms中断标志
        T10MS        BIT 02H                ;10ms中断标志
        T50MS        BIT 03H                ;50ms中断标志
        T100MS        BIT 04H                ;100mS中断标志
        T500MS        BIT 05H                ;0.5S中断标志
        T1S        BIT 07H                ;1秒中断标志
        ORG        0000H
        AJMP        MAIN
        ORG        001BH                ;T1中断服务入口地址
        LJMP        T1INTSVRS
        ORG 0040H
MAIN:
        MOV        CLK_div,#00H        ;设定1T工作模式
        MOV        A,#00H
        MOV        R0,#20H                ;清零用户标志寄存器20H~22H
        MOV        @R0,A
        INC        R0
        MOV        @R0,A
        INC        R0
        MOV        @R0,A
        SETB        RS0
        SETB        RS1                ;指向第4组寄存器组
        MOV        R1,#05H                ;设定500us时间常数
        MOV        R2,#02H                ;设定1ms时间常数
        MOV        R3,#0AH                ;设定10ms时间常数
        MOV        R4,#05H                ;设定50ms时间常数
        MOV        R5,#02H                ;设定100ms时间常数
        MOV        R6,#05H                ;设定500ms时间常数
        MOV        R7,#02H                ;设定1秒时间常数
        CLR        RS0
        CLR        RS1                        ;返回第0组寄存器组
        MOV        SP,#80H                ;堆栈指针指向80H
        MOV        AUXR,#00H                ;仅设定了t1计时时钟为T1x12模式(12T)方式
        MOV        WAKE_CLKO,#02H        ;用于将来设置时钟输出时和掉电模式唤醒用
        MOV        TMOD,#20H                ;设定T1为方式2工作模式
            MOV        TH1,#0D2H
        MOV        TL1,#0D2H                ;基准时钟在1T模式11.0592晶振100uS
        MOV        IE,#00H
            SETB        ET1                ;允许T1中断
/*---------------------------------
               通过P_1口的1秒钟的周期移位显示
               测试1秒钟的工作(临时测试)
------------------------------------*/
            MOV        A,#00H
            MOV        P1,A
            MOV        P2,A
            MOV        A,#01H
            SETB        EA                ;开放中断
            SETB         TR1                ;启动T1计时工作
TESTLOOP1:
        MOV        P1,A
        ACALL        TIMEWAIT1
        JNB        T1S,$
        RL        A
        CLR        T1S
        SJMP        TESTLOOP1
/*---------------------------------------------------------------------------
                      临时等待延时处理子程序,延时时间1毫秒
-----------------------------------------------------------------------------*/
TIMEWAIT1:
        PUSH        PSW                ;1mS延时子程序
        CLR        RS0                ;选择0组寄存器
        CLR        RS1
        MOV        R2,#08H
DL1:        MOV        R1,#0C5H
DL0:        MOV        R0,#02H
        DJNZ        R0,$
        DJNZ        R1,DL0
        DJNZ        R2,DL1
        POP        PSW
        RET
/*-------------------------------------
          T1中断服务子程序
--------------------------------------*/
T1INTSVRS:
        PUSH        PSW
        SETB        RS0
        SETB        RS1
        DJNZ        R1,T1INTSVRE
        MOV                R1,#05H
        SETB        T500US
        DJNZ        R2,T1INTSVRE
        MOV                R2,#02H
        SETB        T1MS
        DJNZ        R3,T1INTSVRE
        MOV                R3,#0AH
        SETB        T10MS
        DJNZ        R4,T1INTSVRE
        MOV                R4,#05H
        SETB        T50MS
        DJNZ        R5,T1INTSVRE
        MOV                R5,#02H
        SETB        T100MS
        DJNZ        R6,T1INTSVRE
        MOV                R6,#05H
        SETB        T500MS
        DJNZ        R7,T1INTSVRE
        MOV                R7,#02H
        SETB        T1S
T1INTSVRE:
        POP        PSW
        RETI
        END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top