?? 基于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 + -