⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 基于p89v51rb2的频率周期测试1.asm

📁 基于 P89V51RD2D 的脉宽测试!
💻 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 + -