|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;脉搏计数程序,用来计算一分钟脉搏的个数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;因为GATE=1和TR0=1时,当INTO由低电平变为高电平时Timer0开始计数;当INTO由高电平变为低电平时,Timer0停止计数。
;当第一个下降沿到来时Timer0停止计数,此时打开定时器Timer1,当第二个下降沿到来时关闭定时器Timer1。
;定时器所用时间就是一个周期的时间。
;用60S除以一个周期的时间就是一分钟的脉搏数
ORG 0000H
TIME:
CLR A ;清零A
MOV R0,A ;清零R0
MOVX @DPTR,A ;清零DPTR
MOV TMOD,#2EH ;Timer1工作在定时模式2下,Timer0工作在计数模式2下
MOV TH1,#56 ;定时器Timer1初始值设为56
MOV TL1,#56
MOV TH0,#00 ;计数器Timer0初始值设为0
MOV TL0,#00
SETB EA ;使能所有中断
SETB EX0 ;使能外部中断0
SETB EX1 ;使能外部中断1
SETB ET0 ;使能Timer0中断
SETB ET1 ;使能Timer1中断
RESTART:
SETB TR0 ;启动计数器0
SETB IT0 ;选择INT0管脚下降沿触发
CHECK0: ;第一个下降沿到来时TCON.1硬件置1
JB TCON.1,OPEN_T1 ;检测到第一个下降沿就打开定时器1
JMP CHECK0
OPEN_T1:
SETB TR1
CLR TCON.1
CHECK1:
JB TCON.1,STOP_T1 ;检测到第二个下降沿就关闭定时器1
JNB TF1,CHECK1 ;定时器没溢出就继续检测
INC A ;完成一次200uS的定时,A加1
CJNE A,#250,CHECK1 ;完成200×250=0.05s定时,R0加1
INC R0
JMP CHECK1
STOP_T1:
CLR TR1 ;关闭定时器1
CALCULATE: ;计算一分钟的脉搏数
MOV B,#5
MOV A,R0
MUL AB
MOV DPL,A
MOV DPH,B
MOVX A,@DPTR
MOV B,A
MOV DPTR,#6000
MOVX A,@DPTR
DIV AB
END
==========================================================
帮忙看下我的程序有哪些问题,谢谢
|
|