用汇编写了一段测试定时器的小程序(程序如下所述),采用了T1在方式2工作模式,要求是在100uS中断一次,MPU工作在1T模式,定时器1设置在T1x12(传统的8051模式),在KEIL的调试模式设置中使用与实际频率相等,晶振采用11.0529MC,然而在试验时却发现P1口的状态翻转比1秒钟快许多,不知是什么原因,还望各位前辈指点一二,小子在这里先谢谢。
#include
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
|