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

📄 13程序.asm

📁 51单片机的多机通讯的汇编源程序.主机控制从机
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 MOV   	COMM0,#3AH              					    
		       MOV    COMM6,#1;T
				 MOV   A,#1
				 ACALL CSAVEDATA
 RSTART:    	SETB   TBEGIN  ;要开始发送 
    	         CLR    DE;发送
TSTART:         MOV    TH1,  #0EAH
	              MOV   TL1,  #040H;定时5MS;200HZ
					  CLR    TF1
                 SETB   TR1                                   
		           CLR  TI
                 CLR  RI			            
                MOV     TXADDR,#COMMR
                MOV     ADDR2,#COMMR
AJMP  TXBEG89   
;-------------- ---------主程序--------------------------
START1:          JNB      KBINFL,NOKEYO  ;有按键?
	              ACALL    KBIN
NOKEYO:          JNB  SAVEFL,NOSAVE
                 CLR   SAVEFL
                 ACALL CSAVEDATA
NOSAVE:          ACALL   DISP1
                 JBC    TF1, TMTWO;T1有中断            	          
       	        JBC    TXGOON,RIERR0;长时间没有中断                
                 JB       TM100FL,START1  ;快速加减 
                 ACALL    SDECADD 
                 AJMP    START1;LOOP
RIERR0:          LJMP  RIERR
;--------------------------------------------------------
TMTWO:           JBC      TBEGIN, TXBEG89
                 JBC       RIEND, RIEN1
                  SETB     DE
      	         AJMP    START1
RIEN1:           CLR     DE
                 AJMP    RSTART
                 MOV     ADDR2,#COMMR

TXBEG89:     MOV     A,COMM6
             ACALL    CEXDATA 
             MOV      TXADDR,#COMMR       
			    MOV      R0,#COMMR
			  	 ACALL    FORADD
			    MOV      COMM0, A	
             MOV      COMM7,#0AAH
				 MOV      TXADDR,#COMMR
				 MOV      A,#0AAH
				 MOV      A,SBUF
				 AJMP     START1

;-----------------------------------------------------
FORADD:          MOV    MONCNT0,#6
                 MOV     A,@R0
LOOPI1:          INC   R0
					  ADD  A,@R0
					  DJNZ  MONCNT0,LOOPI1			
                 RET


  SDECADD:       SETB     TM100FL  
                 MOV      MONCNT3,COUNT3              
                 JNB      ADDSOON ,DECS1 ;加?					  
           		  JNB       ADDRSS, DECF6  ;地址?
LOOP09:          ACALL    ADDRINC1
                 DJNZ     MONCNT3, LOOP09
                 AJMP     EXAD
 DECS1:          JNB      DECSOON, EXAD;减?
                 JNB       ADDRSS, DECF7  ;地址?
LOOP090:         ACALL    ADDRDEC1
                 DJNZ     MONCNT3, LOOP090
                 AJMP     EXAD
DECF6:           JNB      DATASS,EXAD
LOOP097:         ACALL    DATAINC1        
                 DJNZ     MONCNT3, LOOP097            
                 AJMP     EXAD
DECF7:           JNB      DATASS,EXAD 
 LOOP098:        ACALL    DATADEC1        
                 DJNZ     MONCNT3, LOOP098             
EXAD:            RET
;----------------------------------------------               
 DISP1:          JB     SETADFL,DISPP2
                 JB     ADDINCFL,DISPP2
                 SETB   ADDINCFL   
                 MOV    A,MCOUNT
					  CJNE  A,ADDR0,HJKL1
HJKL2:			  MOV   ADDR0,#1
					  AJMP  DISPP2
HJKL1:           JC    HJKL2
                 INC    ADDR0
DISPP2:          MOV A, ADDR0					       		 
                 ACALL EXDATA
					  MOV   DPARA1,DPARA
                 JB    HIVFL,DISP2
					  CLR   HI
					  SETB  HV
					  AJMP  DISP3
DISP2:           CLR   HV
                 SETB  HI
DISP3:           JB    IVFL,DISP4
					  CLR   IC
					  SETB  VC
					  AJMP  DISP5
DISP4:           CLR   VC
                 SETB  IC
        
DISP5:           MOV  C, AUTO
                 CPL  C
             	  MOV  AUTOFL,C               
 ;--------------------------------------               
               MOV   QUREG1,#0
					 MOV   QUREG0,ADDR0
                ACALL  HEX2DCM      ;IN:QU,OUT:OP
					 MOV    R0,#OPREG
                ACALL  DECODE2  
                JB     ONOFF,DISP6
                AJMP   DSPOFF 
 DISP6:         MOV    QUREG1,ADSVH
                MOV    QUREG0,ADSVL
              	JB     IVFL,  DSPV0
                MOV    QUREG1,ADSIH
                MOV    QUREG0,ADSIL
	            MOV    ADSIH,#0

 DSPV0:       
 			
                ACALL  HEX2DCM      ;IN:QU,OUT:OP	
		          MOV    R0,#OPREG	
      DERT:     ACALL  DECODE1		        
DSPEX:	       RET
 ;============================================

;----------------------乘法运算----------------------------------;
;                   Function : MULT  (AI * OP = QU)[会影响:MONCNT2/0]
;                  Multiplier : AIREG 0~2
;                  Multiplicand : OPREG 0~5
;                   Quotient : QUREG 0~5
;-------------------------------------------------------------------;
MULT:           MOV    QUREG0,#0
                MOV    QUREG1,#0          
                MOV     MONCNT2,#16
		          MOV     A,AIREG0
MUL1:           JNB    ACC.0, MUL3
MUL2:           MOV    R0,#QUREGL
                MOV    R1,#OPREGL
                ACALL    R0ADDR1 ; MP0+MP1=MP0
MUL3:           CLR     C               ; Shift Left OPREG 1 Bit
                ACALL    OPRL
                CLR     C
                ACALL   AIRR;            ; Shift Right AIREG 1 Bit
                DJNZ     MONCNT2 , MUL1
                RET

;---------------R0加R1,结果放R0----低们--------------------
R0ADDR1:                      
                MOV     A, @R0          ; MP0 >= MP1 C/ R0=R1 is EQUFL
                ADD     A, @R1
		MOV     @R0,A
                DEC     R0
		DEC     R1
	        MOV     A, @R0          ; MP0 >= MP1 C/ R0=R1 is EQUFL
                ADDC     A, @R1 
	        MOV     @R0,A
                RET
;---------------R0减R1,结果放R0----低们--------------------
R0DECR1:        CLR     C              
                MOV     A, @R0          ; MP0 >= MP1 C/ R0=R1 is EQUFL
                SUBB     A, @R1
		MOV     @R0,A
                DEC     R0
		DEC     R1
	        MOV     A, @R0          ; MP0 >= MP1 C/ R0=R1 is EQUFL
                SUBB     A, @R1 
	        MOV     @R0,A
                RET

 ;--------------------------------------------
 HEX2DCM:        MOV     OPREG0,#0
                MOV     OPREG1,#0
                MOV     MONCNT2,#16       ;16BIT     
HEX1:           ACALL    QURLCC          ; Shift Left QUREG & OPREG 1 Bit
                ACALL    OPRL
                DJNZ    MONCNT2, HEX2                  
                AJMP     HEX8
HEX2:           MOV     MONCNT1,#2
                MOV     R0,#OPREGL             
HEX3:           MOV     A,@R0
		ANL     A,#0FH     ;低位
                CJNE    A,#5,HECB1 
   	        AJMP    HEX4
HECB1:          JC      HEX5            ;小于5 
HEX4:           MOV     A,@R0
                ADD     A,#3
		MOV     @R0,A              
HEX5:           MOV     A,@R0
		ANL     A,#0F0H
                CJNE    A, #80, HECB2
   	        AJMP    HEX6
HECB2:          JC      HEX7           ;小于5                      
HEX6:           MOV     A,@R0
                ADD     A,#30H
          		MOV     @R0,A
HEX7:           DEC     R0
                DJNZ    MONCNT1,HEX3               
                AJMP     HEX1
HEX8:           RET

;-------------对R0内数据进行解码------------------------------
  
 DECODE1:     MOV    R1, #LED;LED4
               AJMP    DECOBE
 DECODE2:     MOV    R1, #LED_2
 DECOBE:       MOV    MONCNT0,#2
   DECO1:      MOV    A,#0F0H ;
	       ANL    A,@R0;
               SWAP   A
	       MOV    DPTR,#TAB     ;取段码表地址
               MOVC   A,@A+DPTR     ;查显示数据对应段码	      
               MOV    @R1,A           ;段码放入P1口
	       DEC    R1
	       MOV    A,@R0
    	       ANL    A,#0FH
               MOVC   A,@A+DPTR     ;查显示数据对应段码
	       MOV    @R1,A
               INC    R0
	       DEC    R1
	       DJNZ   MONCNT0,DECO1	  
               RET

OPRR:           MOV     R0,#OPREG         ; 会影响:MONCNT0
                AJMP     XRR0
QURR:           MOV     R0,#QUREG
                AJMP     XRR0
AIRR:           MOV     R0,#AIREG
XRR0:           MOV     MONCNT1,#2
XRR1:           MOV     A,@R0
                RRC     A
                MOV     @R0,A
                INC     R0
                DJNZ    MONCNT1, XRR1                  
                RET

	
OPRL:           MOV     R0,#OPREGL
	             AJMP     XRL0
QURLCC:         CLR     C               ; QURL+CLR C
QURL:           MOV     R0,#QUREGL
                AJMP     XRL0
AIRL:           MOV     R0,#AIREGL
XRL0:           MOV     A,@R0
                MOV     MONCNT1,#2
XRL1:           RLC     A
                MOV     @R0,A
                DEC     R0
		MOV     A,@R0
                DJNZ    MONCNT1, XRL1               
                RET      
;------------------------------------------
DSPOFF:         MOV    LED2,#081H;0
                MOV    LED3,#01DH;F
                MOV    LED4,#01DH;F
                MOV    LED1,#0FFH;F
					 SETB   DP
		          ;MOV    LED8,#0FFH;         			
	             RET
   

 ;--------------------------------------
 KBIN:          
                 JB    ADDRSS,ADRS0
                 JB    DATASS,DAT0
  					  SETB   ADDRSS
                 ACALL  KCH3
  					  AJMP   KBEX
ADRS0:      
                  ACALL KBENTER
                 JNC   KBG011
					  CLR   ADDRSS
					  SETB  DATASS
					  AJMP  KBEX
                 
 KBG011:         ACALL  KBADD
                 JNC    KBGO22
ADDRINC1:	    
                 MOV    A,MCOUNT
					  CJNE   A,ADDR0,RETYUO1
RETYUO1B:		 MOV    ADDR0,#1
					  AJMP   KBEX
RETYUO1:			  JC     RETYUO1B
                 INC     ADDR0
					  AJMP    KBEX    
KBGO22:         ACALL   KBDEC
                JNC     ERRKEY0
ADDRDEC1:         
                MOV    A,ADDR0
					 CJNE   A,#1,KBGO23
               MOV     ADDR0,MCOUNT
                AJMP    KBEX
KBGO23:			DEC     ADDR0
					 AJMP    KBEX
 ERRKEY0:      AJMP   ERRKEY

DAT0:            ACALL KBENTER
                 JNC   KBGO1
             	  CLR   DATASS
					  AJMP  KBEX1
 KBGO1:         ACALL  KBONOFF             ;ON/OFF?
                JNC    KBGOON9              ;下一个! 
                CPL    ONOFF
					  MOV   ADSIH,#0
	        	   MOV   ADSIL,#0
             	MOV   ADSVH,#0	
        	      MOV   ADSVL,#0	 

					 AJMP   KBEX1
            
 
				

KBGOON9:        ACALL  KBCHGIV             ;电流电压显示切换?
                JNC    KBGOON8
                CPL    IVFL
                AJMP   KBEX1
KBGOON8:        ACALL  KBCHGHEN             ;电流电压谢

⌨️ 快捷键说明

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