综合子程序.txt

来自「有用的单片机程序,包括8279和E2ROM的读写」· 文本 代码 · 共 1,053 行 · 第 1/2 页

TXT
1,053
字号
        MOVX @DPTR,A
        MOV A,32H
        ANL A,#0FH
        DA A
        MOV DPTR,#LEDSEG
        MOVC A,@A+DPTR
        MOV DPTR,#D8279
        MOVX @DPTR,A

        MOV A,#LEDWR0 ;显示小数部分第三位
        ADD A,#07H
        MOV DPTR,#Z8279
        MOVX @DPTR,A
        MOV A,33H
        ANL A,#0FH
        DA A
        MOV DPTR,#LEDSEG
        MOVC A,@A+DPTR
        MOV DPTR,#D8279
        MOVX @DPTR,A
        POP ACC
        POP DPL
        POP DPH
        RET

;///////////////////////////////////////////////////////////////////////////////////
    双字节除法子程序:
    入口参数:
    R7R6——执行前存被除数,程序执行后存商数
    R5R4——存除数
    R3R2——存余数

    DIV2:                       ;两字节相除子程序
            PUSH PSW
            PUSH ACC
            push 0
            push 1
            CLR A
            MOV R2,A
            MOV R3,A
            MOV R1,#10H
      LOOP: CLR C
            MOV A,R6
            RLC A
            MOV R6,A
            MOV A,R7
            RLC A
            MOV R7,A
            MOV A,R2
            RLC A
            MOV R2,A
            MOV A,R3
            RLC A
            MOV R3,A
            MOV A,R2
            SUBB A,R4
            JC NEXT
            MOV R0,A
            MOV A,R3
            SUBB A,R5
            JC NEXT
            INC R6
            MOV R3,A
            MOV A,R0
            MOV R2,A
       NEXT:DJNZ R1,LOOP
            pop 1
            pop 0
            POP ACC
            POP PSW
            RET

;//////////////////////////////////////////////////////////////////////////////////////////////
 软件滤波子程序:
 入口参数:50H——5AH存要滤波的十个数
 出口参数:A(存滤波结果)
 滤波方法:去最大值,去最小值,求平均
PROCESS: PUSH 0                                  
         PUSH 1
         PUSH 2
         PUSH PSW
        ;MOV R2,#0AH
         MOV R0,#50H
         MOV A,@R0
         MOV 44H,#50H
MAX:     CJNE R0,#5AH,M1
         SJMP MAX_END
M1:      INC R0 
         MOV B,@R0
         CLR C
         CJNE A,B ,XIA  ;将最大数放在最后一个单元,A<B不交换
XIA:     JNC MAX
         MOV 44H,R0
         MOV A,@R0
         SJMP MAX
MAX_END: MOV R0,44H
         MOV @R0,#00H
        ; MOV R2,#0AH
         MOV R0,#50H
         MOV A,@R0
         MOV 44H,#50H
MIN:     CJNE R0,#5AH,M2
         SJMP MIN_END
M2:      INC R0
         MOV B,@R0
         CLR C
         CJNE A,B,XIA1
XIA1:    JC MIN
         MOV 44H,R0
         MOV A,@R0
         SJMP MIN
MIN_END: MOV R0,44H
         MOV @R0,#00H
        ;MOV R2,#0AH
         MOV R1,#00H
AVERAGE: MOV R0,#50H
         MOV A,@R0
AVE:     CLR C
         CJNE R0,#5AH,AVE1 
         SJMP ADD_END
AVE1:    INC R0
         ADD A,@R0
         JNC AVE
         INC R1
         SJMP AVE                 
ADD_END: MOV 46H,A
         MOV 47H,R1
         MOV R7,47H
         MOV R6,46H
         MOV R5,#00H
         MOV R4,#09H
         MOV R3,#00H
         MOV R2,#00H
         LCALL DIV2
         MOV A,R6
         POP PSW
         POP 2
         POP 1
         POP 0
         RET

;////////////////////////////////////////////////////////////////////////////////////////////////////////


;三字节乘法程序,R7R6R5*R4R3R2=R7R6R5R4R3R2


ORG 0040H
       CLR C 
       MOV 55H,#00H
       MOV 50H,#00H
       MOV 51H,#00H
       MOV 52H,#00H
       MOV 53H,#00H
       MOV 54H,#00H
       MOV R2,#50H
       MOV R3,#0DH
       MOV R4,#03H
       MOV R5,#40H
       MOV R6,#42H
       MOV R7,#0FH
       MOV B,R5
       MOV A,R2
       MUL AB
       MOV 50H,A    ;R2存最低字节
      
       MOV R0,B
       MOV B,R6
       MOV A,R2
       MUL AB
       ADDC A,R0
       JNC XIA8
       INC 52H
      CLR C     
 XIA8:      MOV 51H,A
      
       MOV R0,B
       MOV B,R7
       MOV A,R2
       MUL AB
       ADDC A,R0
       JNC XIA11
       INC 53H
       CLR C
 XIA11:      ADD A,52H
      JNC XIA12
       INC 53H
       CLR C
 XIA12:      MOV 52H,A
       MOV A,B
       ADD A,53H
       MOV 53H,A
       
 ;///////////////////////////////////
 XIA:  MOV A,R3
       MOV B,R5
       MUL AB
       ADDC A,51H
       JNC XIA10
       INC 52H
       CLR C    
  XIA10:      MOV 51H,A
       MOV R0,B
       MOV B,R6
       MOV A,R3
       MUL AB
       ADDC A,R0
       JNC XIA1
       INC 53H
       CLR C
  XIA1:     ADDC A,52H
         JNC XIA4
         INC 53H
         CLR C
XIA4:     MOV 52H,A
       MOV A,R3
       MOV R0,B
       MOV B,R7
       MUL AB
       ADDC A,R0
       JNC XIA2
       INC 54H
       CLR C
  XIA2: ADDC A,53H
       MOV 53H,A
       JNC XIA3
       INC 54H
XIA3:        CLR C
       MOV A,B
       ADD A,54H
       MOV 54H,A
      
       
 ;////////////////////////////////      
  MOV A,R4
        MOV B,R5
        MUL AB
        ADDC A,52H
        MOV 52H,A
        MOV R0,B
        MOV B,R6
        MOV A,R4
        MUL AB
        ADDC A,R0
        JNC XIA7
        INC 54H
        CLR C
XIA7:   ADDC A,53H
        MOV 53H,A
        JNC XIA9
        INC 54H
        CLR C
XIA9:        MOV R0,B
        MOV A,R4
        MOV B,R7
        MUL AB
        ADDC A,R0
        JNC XIA5
        INC 55H
        CLR C
 XIA5:       ADDC A,54H
        MOV 54H,A
        JNC XIA6
        INC 55H
        CLR C
 XIA6:       MOV A,B
        ADDC A,55H
        MOV 55H,A
    END1:RET
    END    
        
 ;////////////////////////////////////////////////////////////////////////////////////////////////////////                   
      
  ;6字节除以3字节程序,被除数存于50H-55H,除数存于36H--3BH,
;余数存于56H——5BH,结果存于50H——52H       
TDIV: 
       MOV 3BH,#00H
       MOV 3AH,#00H
       MOV 39H,#00H
      
       
        MOV 56H,#00H
        MOV 57H,#00H
        MOV 58H,#00H
        MOV 59H,#00H
        MOV 5AH,#00H
        MOV 5BH,#00H
        MOV R4,#48
LOOP:   CLR C 
        MOV A,50H
        RLC A
        MOV 50H,A
        MOV A,51H
        RLC A
        MOV 51H,A
        MOV A,52H
        RLC A
        MOV 52H,A
        MOV A,53H
        RLC A
        MOV 53H,A
        MOV A,54H
        RLC A
        MOV 54H,A
        MOV A,55H
        RLC A
        MOV 55H,A
         
        MOV A,56H
        RLC A
        MOV 56H,A
        MOV A,57H
        RLC A
        MOV 57H,A
        MOV A,58H
        RLC A
        MOV 58H,A
        MOV A,59H
        RLC A
        MOV 59H,A
        MOV A,5AH
        RLC A
        MOV 5AH,A
        MOV A,5BH
        RLC A
        MOV 5BH,A
        MOV A,56H
        SUBB A,36H
        
        MOV 20H,A
        MOV A,57H
        SUBB A,37H
        
        MOV 21H,A
        MOV A,58H
        SUBB A,38H
       
        MOV 22H,A
        MOV A,59H
        SUBB A,39H
        
        MOV 23H,A
        MOV A,5AH
        SUBB A,3AH
        
        MOV 24H,A
        MOV A,5BH
        SUBB A,3BH
        JC NEXT
        INC 50H
        MOV 5BH,A
        MOV 5AH,24H
        MOV 59H,23H
        MOV 58H,22H
        MOV 57H,21H
        MOV 56H,20H
 NEXT:DJNZ R4,LOOP
 RET    
        
  ;/////////////////////////////////////////////////////////////////////////////////////////////     
       
    DELAY01:  PUSH 0   ;延时子程序(0.1秒)
              PUSH 1
              PUSH 2                        
              MOV     R0,#02H
   DELAY11:   MOV     R1,#4DH
   DELAY22:   MOV     R2,#0A0H
             DJNZ    R2,$
             DJNZ    R1,DELAY22
             DJNZ    R0,DELAY11
             POP 2
             POP 1
             POP 0
             RET     
;///////////////////////////////////////////////////////////////////////////////////////////
  正弦表:
        TAB:DB 80H,83H,86H,89H,8dH,90H,93H,96H
       DB 99H,9cH,9fH,0a2H,0a5H,0a8H,0abH,0aeH
       DB 0b1H,0b4H,0b7H,0baH,0bcH,0bfH,0c2H,0c5H
       DB 0c7H,0caH,0ccH,0cfH,0d1H,0d4H,0d6H,0d8H
       DB 0daH,0ddH,0dfH,0e1H,0e3H,0e5H,0e7H,0e9H
       DB 0eaH,0ecH,0eeH,0efH,0f1H,0f2H,0f4H,0f5H
       DB 0f6H,0f7H,0f8H,0f9H,0faH,0fbH,0fcH,0fdH
       DB 0fdH,0feH,0ffH,0ffH,0ffH,0ffH,0ffH,0ffH
       DB 0ffH,0ffH,0ffH,0ffH,0ffH,0ffH,0feH,0fdH
       DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
       DB 0f5h,0f4h,0f2h,0f1h,0efh,0eeh,0ech,0eah
      db 0e9h,0e7h,0e5h,0e3h,0e1h,0dfh,0ddh,0dah
      db 0d8h,0d6h,0d4h,0d1h,0cfh,0cch,0cah,0c7h
      db 0c5h,0c2h,0bfh,0bch,0bah,0b7h,0b4h,0b1h
      db 0aeh,0abh,0a8h,0a5h,0a2h,9fh,9ch,99h
      db 96h,93h,90h,8dh,89h,86h,83h,80h
      db 80h,7ch,79h,76h,72h,6fh,6ch,69h
      db 66h,63h,60h,5dh,5ah,57h,55h,51h
      db 4eh,4ch,48h,45h,43h,40h,3dh,3ah
      db 38h,35h,33h,30h,2eh,2bh,29h,27h
      db 25h,22h,20h,1eh,1ch,1ah,18h,16h
      db 15h,13h,11h,10h,0eh,0dh,0bh,0ah
      db 09h,08h,07h,06h,05h,04h,03h,02h
      db 02h,01h,00h,00h,00h,00h,00h,00h
      db 00h,00h,00h,00h,00h,00h,01h,02h
      db 02h,03h,04h,05h,06h,07h,08h,09h
      db 0ah,0bh,0dh,0eh,10h,11h,13h,15h
      db 16h,18h,1ah,1ch,1eh,20h,22h,25h
      db 27h,29h,2bh,2eh,30h,33h,35h,38h
      db 3ah,3dh,40h,43h,45h,48h,40h,4eh
      db 51h,55h,57h,5ah,5dh,60h,63h,66h
      db 69h,6ch,6fh,72h,76h,79h,7ch,80h     
  ;/////////////////////////////////////////////////////////////////////////////////////////    
      
  查询方式取键值:

           GETKEY:PUSH DPH
                  PUSH DPL
                  PUSH PSW
                  MOV DPTR,#Z8279
                  MOVX A,@DPTR
                  ANL A,#07H
                  JNZ GETVAL
                  MOV A,#00H
                  MOV R6,#0
                  SJMP NKBHIT
           GETVAL:MOV A,#READKB
                  MOVX @DPTR,A
                  MOV DPTR,#D8279
                  MOVX A,@DPTR
                  ANL A,#3FH
                  MOV DPTR,#KEYCODE
                  MOVC A,@A+DPTR
                  MOV B,A

                  MOV R6,#0FFH
           NKBHIT:POP PSW
                  POP DPL
                  POP DPH
                  RET

;///////////////////////////////////////////////////////////////////////////////////////////

  单片机与PC机通讯,发送,波特率1200
  
  START:
         MOV SP,#60H
         MOV TMOD,#20H
         MOV TL1,#0F3H
         MOV TH1,#0F3H
         MOV PCON,#00H
         SETB TR1
         MOV SCON,#40H
    LOOP:MOV P1,#83H 
         MOV A,#83H 
         MOV SBUF,A
         JNB TI,$
         CLR TI
         LCALL DELAY
         SJMP LOOP
         RET 

;/////////////////////////////////////////////////////////////////////////////////////////////////
  单片机与PC机通讯,接收,波特率1200

START:
     MOV SP,#60H
     MOV TMOD,#20H
     MOV TL1,#0F3H
     MOV TH1,#0F3H
     MOV PCON,#00H
     SETB TR1
     MOV SCON,#50H
     MOV P1,#00H
     LCALL DELAY
     LCALL DELAY
     LCALL DELAY
     LCALL DELAY
LOOP:   
     JNB RI,$
     CLR RI
     MOV A,SBUF
     CPL A
     MOV P1,A
     LCALL DELAY
     
     SJMP LOOP

;//////////////////////////////////////////////////////////////////////////////////////////////
 


     





















 














⌨️ 快捷键说明

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