📄 基于p89v51rb2的频率周期测试1.asm
字号:
;****************************************************************
;工程名称:基于P89V51RD2的脉宽测试
;创建时间:08-08-2
;修改时间:
;修改者 :陶学文
;**************寄存器单元定义************************************
PCA_OldValueL EQU 30H ;第一次进入PCA的值地位
PCA_OldValueH EQU 31H
PCA_NEWValueL EQU 32H ;第二次进入PCA的值地位
PCA_NEWValueH EQU 33H
CYC_Timers EQU 34H ; 周期采样次数存储单元
INT_COUNT EQU 35H ;中断0,进入次数
dCYC_Timers DATA 64H ;采样周期数预设值
;*****************************************************************
;***************标志位定义****************************************
fPCA BIT 00H ;第一次PCA进入中断标志
PCAOK BIT 01H ;PCA采样完毕标志
;**********************特殊寄存器定义*****************************
AUXR EQU 08EH
AUXR1 EQU 0A2H
;SADDR EQU 0A9H
;IPH EQU 0B7H
;SADEN EQU 0B9H
CCON EQU 0D8H
CMOD EQU 0D9H
CCAPM0 EQU 0DAH
CCAPM1 EQU 0DBH
CCAPM2 EQU 0DCH
CCAPM3 EQU 0DDH
CCAPM4 EQU 0DEH
CL EQU 0E9H
CCAP0L EQU 0EAH
CCAP1L EQU 0EBH
CCAP2L EQU 0ECH
CCAP3L EQU 0EDH
CCAP4L EQU 0EEH
CH EQU 0F9H
CCAP0H EQU 0FAH
CCAP1H EQU 0FBH
CCAP2H EQU 0FCH
CCAP3H EQU 0FDH
CCAP4H EQU 0FEH
IEN0 EQU 0A8H
IEN1 EQU 0E8H
IP0 EQU 0B8H
IP0H EQU 0B7H
IP1 EQU 0F8H
IP1H EQU 0F7H
FCF EQU 0B1H
FFS EQU 0B2H
FAL EQU 0B3H
FAH EQU 0B4H
FDAT EQU 0B5H
FST EQU 0B6H
SPCTL EQU 0D5H
SPCFG EQU 0AAH
SPDAT EQU 086H
WDTC EQU 0C0H
WDTD EQU 085H
; IEN0 */
;EA BIT IE.7;
EC BIT IE.6;
;ET2 BIT IE.5;
;ES BIT IE.4;
;ET1 BIT IE.3;
;EX1 BIT IE.2;
;ET0 BIT IE.1;
;EX0 BIT IE.0;
; IP0 */
PPC BIT IP.6;
;PT2 BIT IP.5;
;PS BIT IP.4;
;PT1 BIT IP.3;
;PX1 BIT IP.2;
;PT0 BIT IP.1;
;PX0 BIT IP.0;
; CCON
CF BIT CCON.7 ;
CR BIT CCON.6 ;
CCF4 BIT CCON.4;
CCF3 BIT CCON.3;
CCF2 BIT CCON.2;
CCF1 BIT CCON.1;
CCF0 BIT CCON.0;
;---------------------------------------------------------------------------
BUZZER BIT P1.4
LED BIT P3.2
DTL1 DATA 99H
DTH1 DATA 0F1H
;;;;;;-------------------------- 复位,中断程序入口 --------
ORG 0000H
RESET: LJMP START_OK ; 跳至主程序 MAIN
ORG 0003H
ret ;LJMP INT0 ; 外部中断0
ORG 000BH
LJMP T0_Collect ;限时接收采集板数据
ORG 0013H
RET ;LJMP INT1 ; 外部中断1
ORG 001BH
RET;LJMP T1_Server ; 限时和服务器连接
ORG 0023H
RET;LJMP ES_INT ; 串口中断程序
ORG 002BH
RETI ; 时基中断程序
ORG 0033H
LJMP PCA_INT ; PCA 中断程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 初始化部分 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0050H
START_OK:
MOV SP,#60H
CLR Buzzer
CLR LED
MOV 20H,#0
;LCALL DELAY
;LCALL DELAY
;LCALL DELAY
;LCALL DELAY
;LCALL DELAY
;LCALL DELAY
;LCALL DELAY
;LCALL DELAY
;---------定时器 串口初始化
MOV TMOD,#00010001B ;
MOV TL1,#DTL1 ; 70ms定时
MOV TH1,#DTH1
MOV TL0,#DTL1 ; 70ms定时
MOV TH0,#DTH1
CLR PT1 ; T0高级中断;
CLR ET1 ; 开T1中断
CLR PT0 ; T1高级中断;
SETB ET0 ; 开T1中断
MOV SCON,#50H ; 串行口工作于方式1
SETB ES ; 串口允许中断
MOV PCON,#00H
MOV T2CON,#30H ; T2用于接受和发送的波特率发生器
MOV RCAP2L,#0F3H ; 波特率=115200 11.0592
MOV RCAP2H,#0FFH
MOV TL2,#0F3H
MOV TH2,#0FFH
MOV T2MOD,#00H ; _
SETB TR0
CLR TR1
SETB TR2
SETB EA
;-----------------PCA初始化
MOV CCAPM0,#30H ; // 下降沿捕获
MOV CMOD,#02H ; //PCA计数脉冲fsoc/2
SETB EC ; //PCA中断使能
SETB CR ; //PCA运行控制
SETB Buzzer
SETB LED
CLR ES
;****************************************
MAIN:
JNB PCAOK,MAINLOOP
CLR PCAOK
CLR fPCA
CLR C
MOV A,PCA_NEWValueL
SUBB A,PCA_OldValueL
MOV B,A
MOV A,PCA_NEWValueH
SUBB A,PCA_OldValueH
JNC MainLP1
MOV A,PCA_OldValueL
CPL A
ADD A,#01H
MOV PCA_OldValueL,A
MOV A,PCA_OldValueH
CPL A
ADDC A,#00H
MOV PCA_OldValueH,A
MOV A,PCA_OldValueL
ADD A,PCA_NEWValueL
MOV B,A
MOV A,PCA_OldValueH
ADDC A,PCA_NEWValueH
XCH A,B
MainLP1:
CLR TI
MOV SBUF,A ;先传高位
JNB TI,$
CLR TI ;再传底位
MOV A,B
MOV SBUF,A
JNB TI,$
MAINLOOP:
SJMP MAIN
;********************定时中断0**************
T0_Collect:
MOV TL0,#DTL1 ; 2ms定时
MOV TH0,#DTH1
INC INT_Count
CLR C
MOV A,INT_Count
SUBB A,#02H
JC T0_RET
;MOV CCAPM0,#11H
ORL CCAPM0,#01H ;允许模块0中断
MOV INT_Count,#00H
MOV CCON,#40H ;屏蔽所有模块 PCA溢出中断标志位
T0_RET: RETI
;;********************PCA_INT***************
PCA_INT1:
JNB CCF0,PCA_RET
JB fPCA,PCA_LP1
SETB fPCA
MOV PCA_OldValueH,CCAP0H
MOV PCA_OldValueL,CCAP0L
SJMP PCA_RET
PCA_LP11:
;MOV CCAPM0,#10H
ANL CCAPM0,#0FEH ;禁止模块0中断(外部下降沿触发中断)
MOV PCA_NEWValueH,CCAP0H
MOV PCA_NEWValueL,CCAP0L
SETB PCAOK
PCA_RET1:
CLR TI
MOV A,CCON
MOV SBUF,A
JNB TI,$
MOV CCON,#40H ;屏蔽其他中断标志位
;
CLR TI
MOV A,CCON
MOV SBUF,A
JNB TI,$
RETI
;********************PCA_INT***************
PCA_INT:
JNB CCF0,PCA_RET
JB fPCA,PCA_LP1
SETB fPCA
MOV PCA_OldValueH,CCAP0H
MOV PCA_OldValueL,CCAP0L
SJMP PCA_RET
PCA_LP1:
INC CYC_Timers
MOV A,CYC_Timers
CJNE A,#dCYC_Timers,PCA_LP2
PCA_LP2:
JC PCA_RET
MOV CYC_Timers,#00H
ANL CCAPM0,#0FEH
MOV PCA_NEWValueH,CCAP0H
MOV PCA_NEWValueL,CCAP0L
SETB PCAOK
PCA_RET:
MOV CCON,#40H ;屏蔽其他中断标志位
RETI
;;;;;=================== DELAY==================
;;;;; 功能: 延时1ms
;;;;; 资源:R7
;;;;; 入口:
;;;;; 出口:
DELAY: MOV R7,#100
DEY_01: NOP
NOP
NOP
DJNZ R7,DEY_01
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -