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

📄 ldd2.asm

📁 4方向倒车雷达程序,主芯片为PIC16F73A,显示用2051,10米开始报警,显示障碍物距离.
💻 ASM
📖 第 1 页 / 共 2 页
字号:

;NOW USING

INCLUDE "P16C73.INC"

            ORG 000H
             GOTO MAIN

            ORG 004H
            GOTO TIMER

            ORG 0050H
   MAIN:    BSF STATUS,5
            MOVLW 0E1H         ;定义PORTA为输入
            TRIS PORTA
            MOVLW 01H         ;定义PORTB为输出
            TRIS PORTB
            MOVLW 0BFH
            TRIS PORTC
            MOVLW 06H
            MOVWF ADCON1      ;RA口用于数字功能
            BCF STATUS,5
            CLRF 3AH
            CLRF 3BH
            CLRF 3CH
            CLRF 4CH
            CLRF 4DH
            CLRF 4EH
            CLRF 50H
            CLRF 51H
            CLRF 52H
            CLRF 53H
            CLRF 54H
            CLRF 55H
            CLRF 56H
            CLRF 57H
            MOVLW 03H
            MOVWF 48H
            MOVLW 03H
            MOVWF 4BH
            MOVLW 0C8H
            MOVWF 4CH
            MOVLW 23H
            MOVWF 4DH
            
            MOVLW 04H
            MOVWF 44H
            MOVWF 46H
            MOVLW 03H
            MOVWF 45H      ;45H存放通道数
            BSF STATUS,5
            BSF PIE1,1     ;定时器2中断打开

            BCF PIE1,4
 TESTER2:   BCF STATUS,5
            BSF RCSTA,7 
            BCF RCSTA,4
            BSF STATUS,5        
            MOVLW 33H
            MOVWF SPBRG    ;设置波特率1200
            BSF TXSTA,5  
 
            MOVLW 0FFH
            MOVWF PR2    
            BCF STATUS,5
            CLRF T2CON
            MOVLW 7EH
            MOVWF T2CON   ;定时器2方式设置
            MOVLW 05H
            MOVWF TMR2      ;赋初值
          

 TESTER3:   BCF STATUS,5
            MOVLW 0FFH       ;定义口初始状态
            MOVWF PORTA
            MOVLW 0FFH
            MOVWF PORTB
            MOVLW 0FFH
            MOVWF PORTC

            BCF ADCON0,0   ;  关闭AD模块

            BCF STATUS,0
            RLF 45H,1
            RLF 45H,1
            RLF 45H,1
            MOVF PORTA,0
            ANDLW 0E7H
            IORWF 45H,0
            MOVWF PORTA    ;选择通道3
            RRF 45H,1
            RRF 45H,1
            RRF 45H,1



            MOVLW 05
            MOVWF TMR0
            BSF STATUS,5
            BCF STATUS,5
            MOVLW 0E0H    ;设外设中断和定时器0中断有效
            MOVWF INTCON
            MOVLW 0
            MOVWF 29H
            MOVLW 0
            MOVWF 2AH
            MOVLW 0
            MOVWF 2BH
            CLRF 3DH
            MOVLW 19H     ;3DH存放定时器循环次数
            MOVWF 3DH
            MOVLW 05H
            MOVWF 2FH
            MOVLW 05H
            MOVWF TMR0
            CLRF TMR1L
            CLRF TMR1H
            CLRF T1CON
            BSF STATUS,5
            CLRF PIE2
            CLRF PIE1
            BCF PIE1,1
            BCF PIE1,2
         ;   BSF PIE2,0
            BCF STATUS,5
            MOVLW 0AH        ;CCP1为比较模式
            MOVWF CCP1CON
            MOVLW 04H        ;CCP2为捕捉模式
            MOVWF CCP2CON
            MOVLW 49H
            MOVWF FSR
            MOVLW 23H
            MOVWF CCPR1L
            CLRF CCPR1H
            BCF PORTA,1     ;报警器
            BCF 4FH,0       ;清标志
            BCF 4FH,1
            BCF 4FH,2       ;报警器一直打开标志
            BCF 4FH,3       ;报警器关断标志
            BCF 4FH,4
            BCF 4FH,6

    BIGHA:  BSF PORTA,1
            MOVLW 02H
            MOVWF 5EH
   AGAINA:  MOVLW 0FAH
            MOVWF 5FH
   AGAIN:   LCALL YSZ
            DECFSZ 5FH,1
            GOTO AGAIN
            DECFSZ 5EH,1
            GOTO AGAINA
            BCF PORTA,1

   START:   MOVLW 0H         ; F16F17F18存储回复信号计时值
            MOVWF 26H
            MOVLW 0H
            MOVWF 27H
            MOVLW 0H
            MOVWF 28H
            BCF 4FH,6
            MOVF 45H,0
            BTFSS STATUS,2
            GOTO SST
            MOVLW 04H     ;4个通道循环后重新置数
            MOVWF 45H
   SST:     DECF 45H,1   ;通道数减1

            RLF 45H,1
            RLF 45H,1
            RLF 45H,1
            MOVF PORTA,0
            ANDLW 0E7H
            IORWF 45H,0
            MOVWF PORTA    ;选择通道
            RRF 45H,1
            RRF 45H,1
            RRF 45H,1
            BCF STATUS,5

            BCF PORTB,5     ;开始发测距高频脉冲置RB5为0(测试信号)
            
   START1:  MOVLW 14H       ;F39存储高频脉冲个数
            MOVWF 39H
   LOOP2:   MOVLW 01H       ;F38存储高频脉冲的周期
            MOVWF 38H
            NOP
            NOP
   LOOP1:   DECFSZ 38H,1
            GOTO LOOP1
            BTFSS PORTA,2
            GOTO SIO1
            BCF PORTA,2

            DECFSZ 39H,1       ;发完一个高频脉冲后减1
            GOTO LOOP2

            CALL YSZ  

            BSF T1CON,0
            BSF STATUS,5
            MOVLW 00H
            OPTION
            BCF PIR2,0
            BCF PIE2,0       ;重新打开捕捉中断
            BCF STATUS,5
            BSF PORTB,2



    WAIT:  BTFSC PORTB,2   ;PORTB,2为一个通道探测时间标志,为0则时间到,
                           ;  转另外的通道测试

           GOTO WAIT2
    WAIT5: BSF PORTB,2
           MOVLW 05H
           MOVWF TMR0
           BCF T1CON,0
           CLRF TMR1L
           CLRF TMR1H
           BCF 4FH,0      ;4FH的0位若为1则不再赋值



    TAK:   BTFSC 4FH,6   ;4FH的1位为0则该数据无效,反之则有效
           GOTO START

            MOVF 45H,0     ;若该通道无回复信号则存OFFH无效数据
            BCF STATUS,0
            RLF 45H,0
            MOVWF 4EH
            MOVLW 50H
            ADDWF 4EH,0
            MOVWF FSR
            MOVLW 0FFH
            MOVWF INDF
            INCF FSR
            MOVLW 0FFH
            MOVWF INDF

            GOTO START

    WAIT2:  BTFSC PORTA,5    ;等待回复信号,若有低电平回复信号则跳过
            GOTO WAIT    

    JUMP1:  BSF 4FH,6        ;若有回复信号则置该位为1作标记
            MOVF TMR1L,0     ;27H28H存放回复信号时间数
            MOVWF 28H
            MOVF TMR1H,0
            MOVWF 27H

            MOVF 45H,0       ;判断通道
            SUBLW 03H
            BTFSC STATUS,2
            GOTO LOAD3
            MOVF 45H,0
            SUBLW 02H
            BTFSC STATUS,2
            GOTO LOAD2
            MOVF 45H,0
            SUBLW 01H
            BTFSC STATUS,2
            GOTO LOAD1
            MOVF 45H,0
            BTFSC STATUS,2 
            GOTO LOAD0

            CLRF 45H

       ;     BTFSC 4FH,0    ;4FH的0位若为1则不再比较,跳过比较
            GOTO GAIN

  LOAD3:    MOVLW 56H
            MOVWF FSR
            BSF 4FH,1      ;4FH的1位为0则该数据无效,反之则有效
            GOTO COMMA

  LOAD2:    MOVLW 54H
            MOVWF FSR
            BSF 4FH,1      ;4FH的1位为0则该数据无效,反之则有效
            GOTO COMMA

  LOAD1:    MOVLW 52H
            MOVWF FSR
            BSF 4FH,1      ;4FH的1位为0则该数据无效,反之则有效
            GOTO COMMA

  LOAD0:    MOVLW 50H
            MOVWF FSR
            BSF 4FH,1      ;4FH的1位为0则该数据无效,反之则有效
            GOTO COMMA


  COMMA:    BTFSC 4FH,0    ;4FH的0位若为1则跳过赋值
            GOTO GAIN
   
  

   AGAN1:   BSF 4FH,1
            MOVF 27H,0     ;不相等则重新存储新值
            MOVWF INDF
            INCF FSR,1
            MOVF 28H,0
            MOVWF INDF
            BSF 4FH,0      ;下一个回复信号脉冲不再赋值


 

  GAIN:     BTFSC PORTB,2   ;判断是否时间到?
            GOTO WAITBAK
            CLRF 26H
            CLRF 27H
            CLRF 28H
      ;      BSF PORTB,2

            GOTO WAIT           
  
 WAITBAK:  ; CALL YSZ
            BTFSS PORTA,5
            GOTO GAIN
            BSF 4FH,0
            GOTO WAIT

  SIO1:     BSF PORTA,2
            NOP
            GOTO LOOP2

  YSZ:      BCF PORTB,4
            MOVLW 02H
            MOVWF 3EH
            MOVLW 0E4H
            MOVWF 3FH
   LOP1:    DECFSZ 3FH,1
            GOTO LOP1
            DECFSZ 3EH,1
            GOTO LOP1
            BSF PORTB,4
            RETURN  
   ;--------------中断处理程序---------------

   TIMER:   BTFSS PIR1,1     ;是否为定时器2中断
            GOTO SAFER
         ;   GOTO SAFER
         ;   DECFSZ 48H,1      ;定时器2中断处理,即报警器处理程序段,48H存放报警器节奏数
            GOTO LOV1
            BCF INTCON,6
            BCF PIR1,1

            
     ;       BTFSC 4FH,5    ;若该位为高则蜂鸣器固定频率响
            GOTO MILLD1
            MOVF 4AH,0     ;4AH存放蜂鸣器固定频率值
            GOTO MILLD2

 MILLD1:    MOVF 49H,0
       ;     COMF 49H,0
       ;     BTFSC STATUS,2
       ;     GOTO KIS12
     ;       MOVLW 23H
 MILLD2:    MOVWF 48H

            GOTO KIS22

            

  KIS22:    BTFSC PORTA,1
            GOTO FMQ1
            BSF PORTA,1
            MOVLW 05H
            MOVWF TMR2
            BCF PIR1,1
            BSF INTCON,6
            RETFIE 

    FMQ1:   BCF PORTA,1
         
            MOVLW 05H
            MOVWF TMR2
            BCF PIR1,1
            BSF INTCON,6
            RETFIE

    LOV1:   BCF PIR1,1
            BCF INTCON,6
            RETFIE

 SAFER:     BCF INTCON,2
            DECFSZ 3DH,1  ;3DH存放定时器循环次数
            GOTO BACK3
            MOVLW 19H
            MOVWF 3DH
        ;    GOTO KKK
            DECFSZ 2FH,1
            GOTO BACK3
            MOVLW 0DH
            MOVWF 2FH

            DECFSZ 48H,1      ; 48H存放报警器节奏数
            GOTO KKK
        ;    MOVLW 07H
            MOVF 4BH,0
            MOVWF 48H

      ;      MOVF 27H,0
      ;      MOVWF 4BH
      ;      BCF STATUS,0
      ;      RRF 4BH,1
      ;      INCF 4BH,1
      ;      GOTO KIS11

            BTFSS 4FH,2  ;报警器是否需要一直打开
            GOTO KIS11
            BSF PORTA,1   ;报警器动作,一直打开
            GOTO KKK

   KIS11:   BTFSS 4FH,3   ;报警器是否关断
            GOTO KIS22B
   KIS12:   BCF PORTA,1   ;关断报警器
            GOTO KKK

 KIS22B:    BTFSC PORTA,1   ;蜂鸣器处理程序段
            GOTO FMQ1B
            BSF PORTA,1
            MOVLW 05H
            MOVWF TMR2
            BCF PIR1,1
            BSF INTCON,6
            GOTO KKK 

    FMQ1B:  BCF PORTA,1
         
            MOVLW 05H
            MOVWF TMR2
            BCF PIR1,1
            BSF INTCON,6


  KKK:      BCF PORTB,2   ;一个通道测试时间到标记

   ;     GOTO UUU

            MOVF 45H,0
            BTFSS STATUS,2
            GOTO JJ5
        ;    MOVLW 04H     ;4个通道循环后重新置数
        ;    MOVWF 45H

        ;    GOTO JJ5


  ;--------------  选最小数程序段  ------------

            MOVF 50H,0      
            SUBWF 52H,0
            BTFSS STATUS,0
            GOTO SUB1      ;选出小数52H53H
            BTFSS STATUS,2
            GOTO SUBD1     ;选出小数50H51H
            MOVF 51H,0
            SUBWF 53H,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -