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

📄 test.asm

📁 这是一个利用51单片机的两个外部中断收取红外接收管的信号用以控制绕线器张转或反转
💻 ASM
字号:
;===============================================
;本程序为一个绕线机的程序,绕线机每转一圈显示值
;加一,如果线超出所需米数则绕线机每到转一圈显值
;减一
;编者:王海龙
;时间:2007-6-2下午16点30分至18点31分
;修改时间:2007-7-14------2007-7-15
;修改时间:2007-7-17清晨
;地点:承德市五岳公司
;===============================================
a_bit EQU 20H               ;个位数存放处
b_bit EQU 21H               ;十位数存放处
c_bit EQU 22H               ;百位数存放处
TEMP  EQU 23H               ;应显示的米数
ORG 0000H
AJMP MAIN
ORG 0003H                   ;外部中断0的入口地址
AJMP INT_0
ORG 0013H                   ;外部中断1的入口地址
AJMP INT_1
ORG 0034H
MAIN:SETB IT0               ;外部中断0选择边沿触发方式
     SETB EX0               ;允许INT0中断
     SETB IT1               ;外部中断1选择边沿触发方式        
     SETB EX1               ;允许INT1中断
     SETB EA                ;CPU开中断
     MOV SP,#30H	        ;设置栈底为 30H
     MOV a_bit,#0           ;初始化个位数为 0 
     MOV b_bit,#0           ;初始化十位数为 0  
     MOV c_bit,#0	        ;初始化百位数为 0
     MOV TEMP,#0            ;初始化应显示的数为 0
     MOV R2,#00H	        ;设置标志寄存器R2为 00H
     MOV R3,#00H	        ;设置标志寄存器R3为 00H

LOOP:   ACALL DISPLAY       ;调用显示程序,如无中断产生则一直循环显示上一次的数  
        AJMP LOOP
		 	     
X0:     CJNE R2,#0,WAIT_I1      ;判断r2是否为255,若是跳到WAIT_I1(等待INT1中断)
        CJNE R3,#0,WAIT_I0      ;判断r3是否为254,若是跳到WAIT_I0(等待INT0中断)

WAIT_I1:CJNE R3,#0,ADD_DLY      ;INT0触发后等待INT1中断 
        LCALL DISPLAY 		    ;否则循环显示上一次的数
	AJMP WAIT_I1	     
WAIT_I0:CJNE R2,#0,DEC_DLY      ;INT1触发后等待INT0中断
        LCALL DISPLAY	        ;否则循环显示上一次的数
	AJMP WAIT_I0                
ADD_DLY:INC TEMP                ;上一次显示的数加一
        LCALL LOOP1 
        MOV R2,#0  
        MOV R3,#0 
	AJMP LOOP  
DEC_DLY:DEC TEMP                ;上一次显示的数减一
        ACALL LOOP1
	MOV R2,#0  
	MOV R3,#0 
	AJMP LOOP 
	 	   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INT0	中断程序
INT_0:           
      MOV R2,#255
      CJNE R3,#0,L0
      MOV SP,#30H
      MOV DPTR,#X0
      PUSH DPL
      PUSH DPH      
L0:   RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INT1	中断程序
INT_1:                  
      MOV R3,#254
      CJNE R2,#0,L1
      MOV SP,#30H
      MOV DPTR,#X0
      PUSH DPL
      PUSH DPH      
L1:   RETI
;;;;;;;;;;;;;;;;;;;;
LOOP1:MOV A,TEMP                  ;把 TEMP 分解为个位数、十位数、百位数   
      MOV B,#100
      DIV AB
      MOV c_bit,a
      MOV A,B
      MOV B,#10
      DIV AB
      MOV b_bit,A
      MOV a_bit,B
      ACALL DISPLAY
      RET    
;;;;;;;;;;;;;;;;;;;;;;;;;;
    
DISPLAY:MOV DPTR,#TAB              ;屏蔽线所绕米数显示程序
      MOV A,a_bit
      MOVC A,@A+DPTR
      MOV P1,A
      CLR P2.0
      ACALL DEL
      SETB P2.0
      MOV A,b_bit 
      MOVC A,@A+DPTR
      MOV P1,A
      CLR P2.1
      ACALL DEL
      SETB P2.1 
      MOV A,c_bit
      MOVC A,@A+DPTR
      MOV P1,A
      CLR P2.2
      ACALL DEL
      SETB P2.2 	
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  DEL:MOV R5,#255
      DJNZ R5,$	
      RET
  TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H     ;7段数码管各划的数字排列表 
      END
       

⌨️ 快捷键说明

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