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

📄 发送,接收,运算,4x4键盘,i2c,.asm

📁 汇编语言常用程序,包括运算,掉电保存,按键,液晶显示,串口传送
💻 ASM
📖 第 1 页 / 共 3 页
字号:
       mov a,66h              ; 计算效验码,上面发送位的和,并放到65H
		 add a,#0b0h
		 mov 63h,a
		 mov a,67h
		 add a,63h
		 mov 65h,a
;......................................
       ;MOV A,65h             ;  发送效验码65H
       MOV SBUF,a
loop202:
       jbc ti,next202
       ljmp loop202
next202:
       ret
;..............................
;  //////////////////////////////////发送i区  
 to_i: 
       MOV A,#0a9h              ; 发送通信头a9
       MOV SBUF,a
loop1811:
       jbc ti,next1811
       ljmp loop1811
next1811:     
    ;  ANL A,#0FH		 
        MOV A,#06H              ; 发送字节数量06
        MOV SBUF,a
loop1911:
       jbc ti,next1911
       ljmp loop1911
next1911:
        MOV A,#03H              ; 发送电流标识03
        MOV SBUF,a
loop1921:
       jbc ti,next1921
       ljmp loop1921
next1921:
;*************************************************        
   	 MOV A,68h
       MOV SBUF,a
loop201:
       jbc ti,next201
       ljmp loop201
next201:     
    ;  ANL A,#0FH		 
        MOV A,69H    
        MOV SBUF,a
loop211:
       jbc ti,next211
       ljmp loop211
next211:
;..........................................
       mov a,68h              ; 计算效验码,上面发送位的和,并放到6cH
		 add a,#0b2h
		 mov 6ah,a
		 mov a,69h
		 add a,6ah
		 mov 6ch,a
;...........................................
 ;MOV A,6ch             ;  发送效验码6cH
       MOV SBUF,a
loop2022:
       jbc ti,next2022
       ljmp loop2022
next2022:
       ret
;............................................  
/* to_i::
       MOV A,68h
       MOV SBUF,a
loop201:
       jbc ti,next201
       ljmp loop201
next201:     
    ;  ANL A,#0FH		 
        MOV A,69H    
        MOV SBUF,a
loop211:
       jbc ti,next211
       ljmp loop211
next211:
       ret*/

;..........................................
displayi:
       
       MOV p1,#089H           ;千位
       ACALL ENABLE  
       MOV A,50H
       MOVC A, @A+DPTR
       CALL  write2
		
;...........................................
       MOV p1,#08aH           ;百位
       ACALL ENABLE  
       MOV A,51H
       MOVC A, @A+DPTR
       CALL  write2		
;...........................................    	        
       MOV p1,#08cH           ;十位
       ACALL ENABLE 
       MOV A,52H
       MOVC A, @A+DPTR
       CALL  write2		    			     
;.............................................
       MOV p1,#08dH           ;个位
       ACALL ENABLE  
       MOV A,53H
       MOVC A, @A+DPTR
       CALL  write2	    
		 ret
;//////////////////////////////////////////
;..........................................
displayi_fore:       
       MOV p1,#089H           ;千位
       ACALL ENABLE  
       MOV A,50H
       MOVC A, @A+DPTR
       CALL  write2
		 ret
;...........................................
displayi_three:
       MOV p1,#08aH           ;百位
       ACALL ENABLE  
       MOV A,51H
       MOVC A, @A+DPTR
       CALL  write2
		 ret
;...........................................    	        
displayi_two:
       MOV p1,#08cH           ;十位
       ACALL ENABLE 
       MOV A,52H
       MOVC A, @A+DPTR
       CALL  write2
		  ret   			     
;.............................................
displayi_one:     
       MOV p1,#08dH           ;个位
       ACALL ENABLE  
       MOV A,53H
       MOVC A, @A+DPTR
       CALL  write2	    
		 ret
;  //////////////////////////////////接收区       
from_two:      
    call delay1     
    setb ren
loop26:
    jbc ri,rec
    jmp loop26
rec:         
    mov a,sbuf
    cjne a,#0a9h,less     ; 先接收通信头a9       
       ;clr ren           
      ;setb ren
loop27: 
		 ;call delay1 
    jbc ri,rec2   ; 直接寻址为1转移,并清该位
    jmp loop27
rec2:   
       ;clr ren
    mov a,sbuf
    cjne a,#06h,less     ; 接收字节数06H
loop28:
    jbc ri,rec3
    jmp loop28
rec3:
    mov a,sbuf
    cjne a,#02h,less     ; 接收电流标识02h
;.........................................................
loop29:                     ; 接收实际电流的高低8位
    jbc ri,rec4
    jmp loop29
rec4:
    mov a,sbuf
    mov 37h,a
loop30:
    jbc ri,rec5      
    jmp loop30
rec5:
    mov a,sbuf
	 mov 36h,a
;..............................................................
loop31:                   ; 接收电流效验码
    jbc ri,rec6
	 jmp loop31
rec6:  
    mov a,sbuf
 	 mov 4eh,a
    clr ren
;..................................................
    mov a,#0b1h       ; 检查效接收到的验码是否和所计算的一致, 
    add a,37h
	 mov 60h,a
	 mov a,36h
	 add a,60h
	 mov 62h,a
	 mov a,4eh
	 cjne a,62h,less
	 call  from_two_2
	 ret
 less:
      ;call DISPLAY_read_i_ffff 
    jmp  key_start
;.................................................
from_two_2:
 mov a,37h
 cjne a,#00h,next300_nmul_ok   ;判断高8是否为0,不是,检查低8是否为2ch,90h,即检查12CH,190H,判断是否为300,400
 mov a,36h
 cjne a,#00h,next100_nmul_ok  ;判断低8是否为0,不是,检查低8是否为2ch,90h,即检查12CH,190H,判断是否为100,200
 mov 55h,#00h
 mov 56h,#00h
 mov 57h,#00h
 mov 58h,#00h
 call DISPLAY_read_i
 ret
		 
next100_nmul_ok:
 mov a,36h
 cjne a,#064h,next200_nmul_ok
 mov 55h,#00h    ;个
 mov 56h,#00h    ;十
 mov 57h,#01h    ;百
 mov 58h,#00h    ;千
 call DISPLAY_read_i
 ret
next200_nmul_ok:
 mov a,36h
 cjne a,#0c8h,nmul_ok
 mov 55h,#00h    ;个
 mov 56h,#00h    ;十
 mov 57h,#02h    ;百
 mov 58h,#00h    ;千
 call DISPLAY_read_i
 ret
next300_nmul_ok:
 mov a,37h
 cjne a,#01h,next100_2_nmul_ok
 mov a,36h
 cjne a,#02ch,next400_mul_ok
 mov 55h,#00h    ;个
 mov 56h,#00h    ;十
 mov 57h,#03h    ;百
 mov 58h,#00h    ;千
 call DISPLAY_read_i
 ret
next400_mul_ok:
 mov a,36h
 cjne a,#090h,nmul_ok
 mov 55h,#00h    ;个
 mov 56h,#00h    ;十
 mov 57h,#04h    ;百
 mov 58h,#00h    ;千
 call DISPLAY_read_i
 ret

next100_2_nmul_ok:
 mov a,36h
 cjne a,#064h,next200_2_nmul_ok
 mov 55h,#00h    ;个
 mov 56h,#00h    ;十
 mov 57h,#01h    ;百
 mov 58h,#00h    ;千
 call DISPLAY_read_i
 ret
next200_2_nmul_ok:
 mov a,36h
 cjne a,#0c8h,nmul_ok
 mov 55h,#00h    ;个
 mov 56h,#00h    ;十
 mov 57h,#02h    ;百
 mov 58h,#00h    ;千
 call DISPLAY_read_i
 ret
nmul_ok:
 CALL from_two_DATE_i
 ret
 ;..........................

 ;//////////////////////////////////
 Test_loop:
       MOV A,37h
       MOV SBUF,a
loop181:
       jbc ti,next181
       ljmp loop181
next181:     
    ;  ANL A,#0FH		 
        MOV A,36H    
        MOV SBUF,a
loop191:
       jbc ti,next191
       ljmp loop191
next191:
       ret
;***************************************
;***************************************
 to_count_i:
     mov 4ah,50h
     mov 4bh,51h
     mov 4ch,52h
     mov 4dh,53h
     call to_count
     mov 68h,31h   ;高8位
     mov 69h,38h   
     ret
 ;***************************************
 to_count_v:
     mov 4ah,3ah
     mov 4bh,3bh
     mov 4ch,3ch
     mov 4dh,3dh
     call  to_count
     mov 66h,31h    ;高8位
     mov 67h,38h 
     ret
;*******************************************
to_count:
     mov a,4ah     ; 千   ;电压十进制转化成十六进制
     mov b,#0e8h
     mul ab  
     mov 33h,a
     mov 35h,b
     mov a,#03h
     mov b,4ah
     mul ab
     add a,35h
     mov 32h,a  
;................................
     mov a,4bh   ;  百
     mov b,#064h
     mul ab
     mov 31h,a
     mov 30h,b
;................................
     mov a,4ch    ;   十
     mov b,#0ah
     mul ab
     add a,4dh    ;   个
     mov 38h,a  
;.................................
     mov a,38h
     add a,31h
     mov 35h,a
     clr a
     mov b,30h
     addc a,b
     mov 31h,a
     mov a,33h
     add a,35h
     mov 38h,a    ;低8位
     clr a 
     mov b,31h
     addc a,b
     mov  35h,a
     mov  a,32h
     add a,35h
     mov 31h,a   ;高8位
     ret
;*************************************
nmul_to_count_w:
     mov a,3ah    ;判断电压千位是否为0
     cjne a,#00h,go_on_v
     mov a,3bh    ;判断电压百位是否为0
     cjne a,#00h,go_on_i_compare
     jmp display_0w
go_on_i_compare:
     mov a,57h    ;判断电流千位是否为0
     cjne a,#00h,nmul_w
	  mov a,56h    ;判断电流百位是否为0
	  cjne a,#00h,compare_over
display_0w:       ;电压和电流的百位都为0,结果直接显示0
     mov 5ah,#00h
     mov 5bh,#00h
     mov 5ch,#00h
     mov 5dh,#00h
     call DISPLAY_to_count_w 
     ret
;.......................................
nmul_w:
     mov a,57h                ; 电压千位为0,电流千位不为0,显示结果即为
     mov b,#0ah
	  mul ab
	  mov 6bh,a
	  mov a,56h
	  add a,6bh
	  mov 6bh,a          ;电流千位转换成十六进制放在69h
;......................................
     mov a,3bh
	  mov b,6bh         ;再乘上电压的百位3bh
	  mul ab
     mov 40h,a
     mov 41h,b
     CALL  to_rather_DATE_w
     ret
compare_over:         ;电压和电流的千位都为0,但百位都不为0
     mov a,3bh
	  mov b,56h
	  mul ab
     mov 40h,a
     mov 41h,b
     CALL  to_rather_DATE_w
     ret
go_on_v:
     mov a,57h    ;判断电流千位是否为0,已判断电压的千位不为0
     cjne a,#00h,mul_i_and_v 
     mov a,56h
	  cjne a,#00h,mul_i_no_1_and_v
     mov 5ah,#00h         ;电压的千位不为0,但电流的百千位都为0,即显示结果为0,
     mov 5bh,#00h
     mov 5ch,#00h
     mov 5dh,#00h
     call DISPLAY_to_count_w 
     ret
mul_i_and_v:         ;电压的千位不为0,电流的千位也不为0,即显示结果如下
     mov a,3ah
     mov b,#0ah
     mul ab
     mov 69h,a
     mov a,3bh
     add a,69h             ;电压百千位转换成十六进制放在69h
     mov 69h,a             ;已判断电压千位不为0
;......................................................
     mov a,57h                
     mov b,#0ah
	  mul ab
	  mov 6bh,a
	  mov a,56h
	  add a,6bh             ;电流百千位转换成十六进制放在6bh
	  mov 6bh,a             ;已判断电流千位不为0
;..................................................................
     mov a,69h             ;
	  mov b,6bh
	  mul ab
     mov 40h,a
     mov 41h,b 
     CALL  to_rather_DATE_w
     ret
mul_i_no_1_and_v:        ; 电压千位不为0,电流千位为0,但百位不为0,显示结果即为
     mov a,3ah
     mov b,#0ah
     mul ab
     mov 69h,a
     mov a,3bh
     add a,69h             ;电压百千位转换成十六进制放在69h
     mov 69h,a             ;已判断电压千位不为0
;............................................................
     mov a,56h             ;电流的百位56h x 电压的百千转换成十六进制 69h
	  mov b,69h
	  mul ab
     mov 40h,a
     mov 41h,b 
     CALL  to_rather_DATE_w
     ret
/* 
    ;  电压有百千乘上电流的百位
    nmul_to_count_w:
     mov a,3ah    ;判断电压千位是否为0

⌨️ 快捷键说明

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