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

📄 ttt.asm

📁 单片机程序
💻 ASM
字号:
DIS2 EQU 30H
DIS3 EQU 31H
DIS0 EQU 32H
DIS1 EQU 33H
LED EQU  34H
SET0 EQU 35H;SET VALUE
SET1 EQU 36H;REAL VALUE
TM1 EQU 37H
TM2 EQU 38H
V1  EQU 3BH
V2  EQU 3CH
V3  EQU 3DH
V4  EQU 3EH
V5  EQU 3FH
V6  EQU 40H
V7  EQU 41H 
HP  EQU 42H
VVL EQU 43H 
TM3 EQU 44H 
TM4 EQU 45H
EK1  EQU 46H
EK   EQU 47H
EK2  EQU 48H
EK_T  BIT 7AH
EK1_T BIT 79H
EK2_T BIT 78H
KEY_TEST BIT 06H
V_TEST BIT 00H
DIV_T BIT 01H
ADD_T BIT 02H
SUB_T BIT 03H
ATIME EQU 50H
STIME EQU 51H
RE_T  BIT 04H
V_HIGN BIT 05H
KEY_1  BIT 06H
VV EQU 52H
LP EQU 53H
ORG 0000H
SJMP MAIN
ORG 0013H
LJMP VELOCITY
ORG 000BH
LJMP REGULATE
ORG 001BH
LJMP VLOW
ORG 0030H
;***********主程序模块****************
MAIN:MOV SP,#60H
     MOV DPTR,#0FD00H  ;8155方式字
     MOV A,#03H
     MOVX  @DPTR,A
     MOV DIS0,#14
     MOV DIS1,#15
     MOV DIS2,#12
     MOV DIS3,#13
     MOV LED,#7FH
     MOV R0,#DIS0
     MOV VV,#0
     CLR V_TEST
     MOV TM4,#40
     MOV TMOD,#12H  ;T1 MOD1,T0 MOD2
     MOV TH0,HP ;用T0作PWM调节,
     MOV TL0,HP  ;T0赋初值
     SETB TR0
     SETB ET0
     SETB IT1
     SETB EX1
;########PP######## 
     MOV TM3,#20
     CLR RE_T    
     CLR EK_T
     CLR KEY_TEST
     CLR KEY_1
     CLR EK2_T
     MOV EK1,#0
     MOV ATIME,#10
     MOV STIME,#10
     CLR ADD_T
     CLR SUB_T
;###################         
 M1: JB KEY_1,M2
     SJMP M3
 M2: ACALL DIS_C
 M3: ACALL DISP
     ACALL DELAY
     ACALL KEY
     ACALL SETTLE
     SJMP M1
;*********二进制转化十进制子程序*****
DIS_C:MOV A,SET0
      MOV B,#10
      DIV AB
      MOV DIS0,A
      MOV DIS1,B
      RET
;*******读键盘子程序***************
KEY:  JB P1.7,M44;       P1.7没按过,返回
      MOV A,LED ;     按过P1.7
M00:  JB ACC.0,M11 ;      SET没按,查下一个键
      SETB KEY_TEST  ;置set键按下的标志位
      ACALL PPP1
PPP3: SETB KEY_1
      CLR RE_T        ;  清最后一个键按下的标志位
      SJMP M44        ;  返回
M11:  JNB KEY_TEST,M44 ;没按set,则直接返回
      JB ACC.1,M22      ;没按加键,查下一个键
      ACALL ADD1     ;  调用加子程序
      ACALL DISP1     ;  调用显示延时子程序,进行延时
      SJMP M44
M22:  JNB KEY_TEST,M44 ; 没按set,则直接返回
      JB ACC.2,M33     ;  没按减键,查下一个键
      ACALL SUB1      ;  第一次则调用减子程序
      ACALL DISP1     ;   调用显示延时子程序,进行延时
      SJMP M44
M33:  JB ACC.3,M44      ;  置最后一个键按下的标志位
      CLR KEY_TEST    ;  清的一个键按下的标志位
      ACALL PPP2
PPP4: SETB RE_T
      SETB EA            ; 开中断
M44:  RET 
PPP1: SETB P1.6
      CLR P1.5
      ACALL PPP3
      RET
PPP2: CLR P1.6
      SETB P1.5
      ACALL PPP4
      RET
;***** *加减子程序***********
ADD1: MOV R2,SET0       ; 设定值没到80?
      CJNE R2,#80,A1
      SJMP A2            ;  加到80返回,不继续加
   A1:INC SET0          ;   没加到80则设定值加一
   A2:RET 
SUB1: MOV R4,SET0;        ; 设定值减到0?
      CJNE R4,#00,S1
      SJMP S0             ;  加到0返回,不继续减
   S1:DEC SET0          ;    没减到0则设定值减一
   S0:RET 
;**************显示子程序*************************              
DISP:
      MOV DPTR,#0FD02H    ; 指向PB口
      MOV A,LED           ;  左移一位
      RL A
      JB ACC.4,D1
      MOV A,#0FEH          ;  移出则重设初始值
      MOV R0,#DIS2
  D1: MOV LED,A
      MOVX @DPTR,A
      MOV A,@R0          ;   取显示RAM中的数据
      MOV DPTR,#TAB
      MOVC A,@A+DPTR    ;   换码操作
      MOV DPTR,#0FD01H
      MOVX @DPTR,A
      INC R0
      RET
DELAY:MOV TM2,#2            ; 2ms延时程序
 DEL2:MOV TM1,#255
 DEL1:DJNZ TM1,DEL1
      DJNZ TM2,DEL2
      RET 
DISP1:MOV B,#48               ;  延时显示子程序
MM2:ACALL DISP
     ACALL DELAY
     DJNZ B,MM2
     RET    
;**************速度测试中断服务程序************************
VELOCITY:PUSH ACC
         PUSH B
         PUSH PSW
         JB V_TEST,VV1          ;是否测速,测则转到vv1
         MOV A,SET1
         CJNE A,#20,VV4      ;   判高低速
   VV4:  JNC VV2
         CLR V_HIGN
         MOV TL1,#0CH ;        ; 低速则赋T1初值FE0CH
         MOV TH1,#0FEH
         SETB ET1              ; T1开中断
         SJMP VV3         
   VV2:  SETB V_HIGN          ;高速则赋T1初值0000H
         MOV TL1,#00H
         MOV TH1,#00H
         CLR ET1               ; T1关中断
   VV3:  SETB TR1             ; 开T1
          SETB V_TEST
          SJMP V00
     VV1: CLR TR1              ; 测速就关闭T1
          CLR V_TEST
          ACALL VALUE       ;  调用求转速值子程序
     V00: POP PSW
          POP B
          POP ACC
          RETI   
;**************低速时T1中断服务程序****************
VLOW:INC VV
     MOV TL1,#0CH
     MOV TH1,#0FEH
     RETI
;**************求转速子程序************************          
VALUE:JB V_HIGN,VA1
      MOV V1,VV           ;  低速赋vv给除数
      MOV VV,#0             ; vv清0
      ACALL DIVIDE1        ; 调用16/8位子程序
      DJNZ TM4,VA0              
      MOV TM4,#20
      SJMP VA2
 VA1: ACALL DIVIDE;         ; 高速调用32/16位子程序
 VA2: MOV A,SET1          ;   显示测试值
      MOV B,#10
      DIV AB
      MOV DIS2,A
      MOV DIS3,B
  VA0:RET
;*************除法子程序************************
DIVIDE:MOV V2,#00H  ;被除数600000
       MOV V3,#07H
       MOV V4,#0A1H
       MOV V5,#20H
       MOV V6,TH1   ; 除数TH1TL1
       MOV V7,TL1
       MOV R3,V6
       CJNE R3,#0,DDV0
       SJMP DDV5
  DDV0:MOV B,#16
  DDV1:CLR C
       MOV A,V5
       RLC A
       MOV V5,A
       MOV A,V4
       RLC A
       MOV V4,A
       MOV A,V3
       RLC A
       MOV V3,A
       XCH A,V2
       RLC A
       XCH A,V2
       MOV DIV_T,C
       CLR C
       SUBB A,V7
       MOV V1,A
       MOV A,V2
       SUBB A,V6
       JB DIV_T,DDV2
       JC DDV3
  DDV2:MOV V2,A
       MOV A,V1
       MOV V3,A
       INC V5
  DDV3:DJNZ B,DDV1
       MOV VVL,V5
       MOV SET1,V5
  DDV5:RET
  
DIVIDE1:MOV R5,#08H   ;被除数1000
        MOV V2,#3
        MOV V3,#0E8H
        MOV A,V1     ;  除数V1
        CLR C
        SUBB A,#03
        JNC D22
        SJMP D55
   D22:CLR C
       MOV A,V3
       RLC A
       MOV V3,A
       MOV A,V2
       RLC A
       MOV V2,A
       MOV DIV_T,C
       CLR C
       SUBB A,V1
       JB DIV_T,D33
       JC D44
   D33:MOV V2,A
       INC V3
   D44:DJNZ R5,D22
       MOV SET1,V3
   D55:RET
;**************PWM速度调节************************
REGULATE:PUSH ACC
          PUSH PSW
          CPL P1.2    ;  P1.2取反
     RE0 :JNB P1.2,RE1
          MOV TH0,HP ; 高电平赋HP给TH0
          SJMP RE2
     RE1: MOV TH0,LP  ; 低电平赋LP 给TL0
     RE2 :POP PSW
          POP ACC
          RETI
;*************速度调节子程序*************************
SETTLE:JNB RE_T,ST0;   最后一个键没按过,则返回
       DJNZ TM3,ST0   ;调节时间没到,则返回
       MOV TM3,#40  ;  重置调节时间
       JNB P1.4,ST1   ;  P1.4高电平,调用PP调节
       ACALL PP      ; P1.4低电平,调用PI调节
       SJMP ST0
   ST1:ACALL PI
   ST0:MOV A,#0FFH  ;  求得PWM调节时赋给低电平的值
       CLR C
       SUBB A,HP
       MOV LP,A
       RET    
;*************PP调节法*****************************
PP:    MOV A,SET0
       CLR CY
       SUBB A,SET1       ;求得 EK
       JZ PP00             ;EK=0,直接返回
       JNC PP1            ;EK>0,跳到PP1
       SETB EK_T         ;将EK符号标志位
       CPL A              ;EK<0 
       INC A
       MOV EK,A       ;   EK取补后赋给EK
       MOV A,HP
       CLR C
       SUBB A,EK          ;HP=HP-|EK|
       MOV HP,A
       JNC PP0
       MOV HP,#00H       ; HP<0,则赋给HP零
       SJMP PP0
   PP1:CLR EK_T          ;EK>0
       MOV EK,A          ;HP=HP+EK
       ADD A,HP         
       MOV HP,A
       JNC PP0
       MOV HP,#0FFH     ; HP溢出,则赋0FFH给HP
       JNB P1.4,PP00       ; PI调节,跳到PP2
   PP0:MOV EK1,EK       ; PP调节,将EK赋给EK1
   PP00:RET 
;***********PI调节法***********************
PI:    ACALL PP          ;  调用PP调节,求得EK
      MOV A,EK          ;  EK=0,直接返回
      JZ PI00
      CLR C
      SUBB A,EK1;        ;  EK2=EK-EK1
      JNC PI1 
      SETB EK2_T         ;  EK2<0,EK2取补后赋给EK2
      CPL A            
      INC A
      SJMP PI1
      CLR EK2_T ;           
PI1:  MOV EK2,A             
      JB EK_T,PI2            ;EK>0,HP=HP+EK2
      MOV A,HP               
      ADD A,EK2
      JNC PI0
      MOV A,#0FFH        ;   HP溢出,则赋0FFH给HP
      SJMP PI0
PI2:  MOV A,HP;            ;  EK<0,HP=HP-EK2
      CLR C
      SUBB A,EK2
      JNC PI0                
      MOV A,#00H          ;  HP<0,则赋给HP零                 
PI0:  MOV HP,A
      MOV EK1,EK 
      MOV C,EK_T
      MOV EK1_T,C   
PI00: RET
;********TABLE**********************************     
  TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH
      DB 07H,7FH,6FH,7EH,38H
      DB 79H,71H,77H,37H;E,F,A,N   12-15
      END 
      

⌨️ 快捷键说明

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