综合子程序.txt

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

TXT
1,053
字号
步进电机正转一圈子程序:
p1.0,p1.1,p1.2,p1.3接A,B,C,D四相
入口参数:无
影响参数:R0

;正转, 1圈/1S  入口参数:R1,存脉冲个数,一个脉冲 7.2度,四相八拍

ZHENG: PUSH 1
      MOV R1,#50       
 A1:     MOV P1,#03H
      MOV TH0,#0EAH
      MOV TL0,#84H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#02H
      MOV TH0,#0F2H
      MOV TL0,#54H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#06H
      MOV TH0,#0F8H
      MOV TL0,#30H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#04H
      MOV TH0,#0E4H
      MOV TL0,#0A8H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#0CH
      MOV TH0,#0F8H
      MOV TL0,#30H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#08H
      MOV TH0,#0F2H
      MOV TL0,#54H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#09H
      MOV TH0,#0EAH
      MOV TL0,#84H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0
      DEC R1
      MOV A,R1
      JZ END1
      LJMP A1
END1: POP 1 
      RET

;//////////////////////////////////////////////////////////
步进电机反转一圈子程序:
p1.0,p1.1,p1.2,p1.3接A,B,C,D四相
入口参数:无
影响参数:R0

FAN:   
      PUSH 1                               ;反转,入口参数:R1(存脉冲个数)1个脉冲7.2度,速度1圈/1S
      MOV R1,#50        
A2:      MOV P1,#0CH
      MOV TH0,#0EAH
      MOV TL0,#84H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#04H
      MOV TH0,#0F2H
      MOV TL0,#54H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#06H
      MOV TH0,#0F8H
      MOV TL0,#30H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#02H
      MOV TH0,#0E4H
      MOV TL0,#0A8H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#03H
      MOV TH0,#0F8H
      MOV TL0,#30H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#01H
      MOV TH0,#0F2H
      MOV TL0,#54H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0

      MOV P1,#09H
      MOV TH0,#0EAH
      MOV TL0,#84H
      SETB TR0
      CJNE R0,#0FFH,$
      MOV R0,#00H
      CLR TR0
      DEC R1
      MOV A,R1
      JZ END2
      LJMP A2

END2: POP 1
      RET 
;///////////////////////////////////////////////////////////////////////////////////////////
初始化8279:
条件:
Z8279 EQU 8100H
D8279 EQU 8000H
LEDMOD EQU 00H                ;左边输入 八位字符显示
                        ;外部译码键扫描方式,双键互锁
LEDFEQ EQU 2FH                ;扫描速率
LEDCLS EQU 0C1H               ;清除显示 RAM
LEDWR0 EQU 80H                ;设定的将要写入的显示RAM地址
READKB EQU 40H



程序:

INIT8279:                                 ;初始化8279
     PUSH DPH 
     PUSH DPL
     PUSH ACC
     MOV DPTR,#Z8279
     MOV A,#LEDMOD
     MOVX @DPTR,A
     MOV A,#LEDFEQ
     MOVX @DPTR,A
     MOV A,#LEDCLS
     MOVX @DPTR,A
     POP ACC
     POP DPL
     POP DPH
     RET
     
;//////////////////////////////////////////////////////////////////////////////////////////////////////

单个数码管显示程序:
入口参数:R4存显示位置
          R5存显示内容


DISLED:
       PUSH DPH
       PUSH DPL
       PUSH ACC
       MOV A,#LEDWR0
       ADD A,R4
       MOV DPTR,#Z8279
       MOVX @DPTR,A
       MOV DPTR,#LEDSEG
       MOV A,R5
       MOVC A,@A+DPTR
       MOV DPTR,#D8279
       MOVX @DPTR,A

       POP ACC
       POP DPL
       POP DPH
       RET    

;//////////////////////////////////////////////////////////////////////////////////////////////////
  延时子程序:
   DELAY:  PUSH 0           ;延时子程序(1秒)
           PUSH 1
           PUSH 2                        
           MOV     R0,#0DH
   DELAY1: MOV     R1,#7DH
   DELAY2: MOV     R2,#98H
           DJNZ    R2,$
           DJNZ    R1,DELAY2
           DJNZ    R0,DELAY1
           POP 2
           POP 1
           POP 0
           RET   

;/////////////////////////////////////////////////////////////////////////////////////////////////
  延时10S子程序:

   DELAY_10S:   PUSH 0   ;延时子程序(1秒)
                PUSH 1
                PUSH 2                        
                MOV     R0,#82H
  DELAY1_10S:   MOV     R1,#82H
  DELAY2_10S:   MOV     R2,#92H
                DJNZ    R2,$
                DJNZ    R1,DELAY2_10S
                DJNZ    R0,DELAY1_10S
                POP 2
                POP 1
                POP 0
                RET    
;//////////////////////////////////////////////////////////////////////////////////////////////////
   键盘选择子程序:
   入口参数:A(存键值)
   
   SELECT:PUSH 4
       PUSH 5
       CJNE A,#00H,KEY_1                 ;键盘选择程序
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#00H
       MOV ENTER,#0FFH
       LJMP KEY_END
KEY_1: CJNE A,#01H,KEY_2
        MOV NOWPOS,NEXTPOS
        MOV NEXTPOS,#01H
       MOV ENTER,#0FFH
       LJMP KEY_END
KEY_2:CJNE A,#02H,KEY_3
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#02H
       MOV ENTER,#0FFH
       LJMP KEY_END       
KEY_3:CJNE A,#03H,KEY_4
      MOV NOWPOS,NEXTPOS
      MOV NEXTPOS,#03H
      MOV ENTER,#0FFH
      LJMP KEY_END 
KEY_4:CJNE A,#04H,KEY_5
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#04H
       MOV ENTER,#0FFH  
       LJMP KEY_END  
KEY_5:CJNE A,#05H,KEY_6
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#05H
       MOV ENTER,#0FFH 
       LJMP KEY_END          
KEY_6:CJNE A,#06H,KEY_7
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#06H
       MOV ENTER,#0FFH 
       LJMP KEY_END    
KEY_7:CJNE A,#07H,KEY_8
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#07H
       MOV ENTER,#0FFH 
       LJMP KEY_END     
KEY_8:CJNE A,#08H,KEY_9
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#08H
       MOV ENTER,#0FFH 
       LJMP KEY_END     
KEY_9:CJNE A,#09H,KEY_END
       MOV NOWPOS,NEXTPOS
       MOV NEXTPOS,#09H
       MOV ENTER,#0FFH
                                            
KEY_END:MOV R4,#07H
        MOV R5,A
        LCALL DISLED
        POP 5
        POP 4
        RET      

;///////////////////////////////////////////////////////////////////////////////////////////////////
  键盘中断子程序:
  入口条件:
  Z8279 EQU 8100H
  D8279 EQU 8000H
  LEDMOD EQU 00H                ;左边输入 八位字符显示
                        ;外部译码键扫描方式,双键互锁
  LEDFEQ EQU 2FH                ;扫描速率
  LEDCLS EQU 0C1H               ;清除显示 RAM
  LEDWR0 EQU 80H                ;设定的将要写入的显示RAM地址
  READKB EQU 40H

LEDSEG: DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'   

  程序:
  INT_0:
      PUSH DPH
      PUSH DPL
      PUSH PSW
      PUSH 4
      PUSH 5
      MOV A,#READKB
      MOV DPTR,#Z8279
      MOVX @DPTR,A
      MOV DPTR,#D8279
      MOVX A,@DPTR
      ANL A,#3FH
      LCALL SELECT
      POP 5
      POP 4
      POP PSW
      POP DPL
      POP DPH
      RETI

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

 单片机信号发生子程序:(方波,三角,锯齿)
 入口参数:VP(存幅度值),R0(三种波形选择)
 影响资源:A,R2

 FANGBO:CJNE R0,#00H,JUCHI
       MOV A,#00H
       MOVX @DPTR,A 
       NOP
      MOV R2,#0FFH
 LOOP3:DJNZ R2,LOOP3
      ; LCALL DELAY
       MOV A,VP
       MOVX @DPTR,A
       NOP
       MOV R2,#0FFH
 LOOP4:DJNZ R2,LOOP4 
       ;LCALL DELAY
       SJMP FANGBO
JUCHI:  CJNE R0,#01H,SANJIAO
        MOV A,#00H
LOOP:   MOVX @DPTR,A
        INC A
        CJNE A,VP,LOOP
        CLR A
        MOVX @DPTR,A
        NOP 
        NOP
        NOP
        SJMP JUCHI
SANJIAO:CJNE R0,#02H,CONT
        MOV A,#00H
LOOP1:  MOVX @DPTR,A
        INC A
        CJNE A,VP,LOOP1
        NOP
        NOP
        NOP
LOOP2:  DEC A
        MOVX @DPTR,A
        CJNE A,#00H,LOOP2
        NOP
        SJMP SANJIAO
CONT:   SJMP FANGBO                                                              

;////////////////////////////////////////////////////////////////////////////////////////////////////////////
  8279八个数码管全部清零子程序
  

  CLEAR_T:
          PUSH DPH
          PUSH DPL
          PUSH ACC
          PUSH 0
          PUSH 1
          MOV R0,#8
     LOOP:MOV A,#LEDWR0
          ADD A,R0
          MOV DPTR,#Z8279
          MOVX @DPTR,A
          MOV DPTR,#LEDSEG
          MOV A,#0H
          MOVC A,@A+DPTR
          MOV DPTR,#D8279
          MOVX @DPTR,A
          DJNZ R0,LOOP
          POP 1
          POP 0
          POP ACC
          POP DPL
          POP DPH
          RET

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

  A_D转换子程序:
  入口参数:PORT(存通道数0——7)
  初始条件:(R1)=00H
    

    A_D:   
        
        MOV     A,PORT            ;通道数
        MOV     DPTR,#A_DPORT
        ORL     DPL,A
        MOVX    @DPTR,A  ;启动 A_D
        CJNE    R1,#00H,$       ;等待 A_D 转换结束
        MOV     R1,#0FFH        ;清读数标志
        MOV DPTR,#D_APORT
        MOV A,49H
        RL A 
        MOVX @DPTR,A
        NOP
        NOP
        SJMP A_D
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////
  A_D数据接收并转化成电压子程序:
  入口参数:PORT(存通道数)
  入口条件:AD基准5V
  影响参数:R1,R2,R3,R4,R5,R6,R7
  出口参数:30H存电压整数值,31H,32H分别存小数点第一、二位
INT_0:  PUSH ACC
        MOV A,PORT
        MOV DPTR,#A_DPORT
        ORL DPL,A
        MOVX A,@DPTR
        MOV 49H,A
        CPL A
        MOV P1,A
        CPL A
        ADD A,#14H
        MOV  B,#34H
        DIV  AB
        MOV 30H,A
        MOV 40H,B
        MOV A,40H
        MOV B,#0AH
        MUL AB  
        MOV R7,B
        MOV R6,A
        MOV R5,#00H
        MOV R4,#34H
        MOV R3,#00H
        MOV R2,#00H
        LCALL DIV2
        MOV 31H,R6    
        MOV A,R2
        MOV B,#10
        MUL AB
        MOV R7,B
        MOV R6,A
        MOV R5,#00H
        MOV R4,#34H
        MOV R3,#00H
        MOV R2,#00H
        LCALL DIV2
        MOV 32H,R6
        MOV A,R2
        MOV B,#10
        MUL AB
        MOV R7,B
        MOV R6,A
        MOV R5,#00H
        MOV R4,#34H
        MOV R3,#00H
        MOV R2,#00H
        LCALL DIV2
        MOV 33H,R6
        MOV A,FLAG_S
        JZ A1
        MOV A,FLAG1
        CJNE A,#0FFH,A1
        MOV A,FLAG_CON
        CJNE A,#0FFH,A1
        LCALL DISPLAY
        LCALL DELAY
 A1:       MOV R1,#00H  ;小数点第一位
        
        POP ACC
        RETI

;//////////////////////////////////////////////////////////////////////////////////////////////////////////////
      电压值显示子程序:
      入口参数:30H,31H,32H,33H,存电压值4位
      
  DISPLAY:PUSH DPH      ;A——D数据显示子程序
        PUSH DPL
        PUSH ACC
        MOV A,#LEDWR0   ;显示整数部分
        ADD A,#04H
        MOV DPTR,#Z8279
        MOVX @DPTR,A
        MOV A,30H
        ANL A,#0FH
        DA A
        MOV DPTR,#LEDSEG1
        MOVC A,@A+DPTR
        MOV DPTR,#D8279
        MOVX @DPTR,A

        MOV A,#LEDWR0   ;显示小数部分第一位
        ADD A,#05H
        MOV DPTR,#Z8279
        MOVX @DPTR,A
        MOV A,31H
        DA A
        ANL A,#0FH
        MOV DPTR,#LEDSEG
        MOVC A,@A+DPTR
        MOV DPTR,#D8279
        MOVX @DPTR,A

        MOV A,#LEDWR0 ;显示小数部分第二位
        ADD A,#06H
        MOV DPTR,#Z8279

⌨️ 快捷键说明

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