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

📄 converse.s

📁 AVR单片机开发中
💻 S
字号:
	.module converse.c
	.area text(rom, con, rel)
	.dbfile H:\m128_test\converse.c
	.dbfunc e hextochar _hextochar fi
;           temp -> R10
;         target -> R20,R21
;          first -> R22,R23
;            hex -> R16
	.even
_hextochar::
	xcall push_gset3
	.dbline -1
	.dbline 2
; 
; unsigned int  hextochar(unsigned char hex){
	.dbline 3
;    unsigned int first = 0 ;
	clr R22
	clr R23
	.dbline 4
;    unsigned int  target = 0;
	clr R20
	clr R21
	.dbline 5
;    unsigned char temp = hex & 0x0f;
	mov R24,R16
	andi R24,15
	mov R10,R24
	.dbline 6
;    if( temp >= 0x0A ) 
	cpi R24,10
	brlo L2
	.dbline 7
;           first = temp + 0x37;
	mov R22,R24
	clr R23
	subi R22,201  ; offset = 55
	sbci R23,255
	xjmp L3
L2:
	.dbline 9
;    else 
;        first = temp + 0x30;          
	mov R22,R10
	clr R23
	subi R22,208  ; offset = 48
	sbci R23,255
L3:
	.dbline 10
;    target = first;
	movw R20,R22
	.dbline 11
;    hex = hex >> 4;
	mov R24,R16
	swap R24
	andi R24,#0x0F
	mov R16,R24
	.dbline 12
;    if( hex >= 0x0A ) 
	cpi R24,10
	brlo L4
	.dbline 13
;           first = hex + 0x37;
	mov R22,R24
	clr R23
	subi R22,201  ; offset = 55
	sbci R23,255
	xjmp L5
L4:
	.dbline 15
;    else 
;        first = hex + 0x30;  
	mov R22,R16
	clr R23
	subi R22,208  ; offset = 48
	sbci R23,255
L5:
	.dbline 16
;    first = first << 8 ;
	mov R23,R22
	clr R22
	.dbline 17
;    target |= first;  
	or R20,R22
	or R21,R23
	.dbline 18
;    return  target;
	mov R16,R20
	mov R17,R21
	.dbline -2
L1:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp 10 c
	.dbsym r target 20 i
	.dbsym r first 22 i
	.dbsym r hex 16 c
	.dbend
	.dbfunc e bcd_char _bcd_char fc
;             kk -> R14,R15
;           temp -> R12
;              i -> R20
;              s -> R10,R11
;            hex -> R22,R23
	.even
_bcd_char::
	xcall push_gset5
	movw R10,R18
	movw R22,R16
	.dbline -1
	.dbline 23
; }
; 
; 
; 
; unsigned char  bcd_char( int hex ,char *s ){
	.dbline 24
;    unsigned char i  = 0 ,temp = 0;
	clr R20
	.dbline 24
	clr R12
	.dbline 25
;    int  kk = 0 ;
	clr R14
	clr R15
	.dbline 27
;    
;    if( hex < 0){
	cpi R22,0
	ldi R30,0
	cpc R23,R30
	brge L7
	.dbline 27
	.dbline 28
;      s[i] = '-';
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	ldi R24,45
	std z+0,R24
	.dbline 29
;      i++;	 
	inc R20
	.dbline 30
; 	 hex = -hex;
	com R22
	com R23
	subi R22,0xFF
	sbci R23,0xFF
	.dbline 31
;    }	
L7:
	.dbline 33
;     
;    kk = hex;
	movw R14,R22
	.dbline 34
;    temp = hex /10000;
	ldi R18,10000
	ldi R19,39
	movw R16,R22
	xcall div16s
	mov R12,R16
	.dbline 35
;    if( kk >= 10000 ){
	movw R24,R14
	cpi R24,16
	ldi R30,39
	cpc R25,R30
	brlt L9
	.dbline 35
	.dbline 36
;    	   s[i] = temp + 0x30;
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	mov R24,R12
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 37
; 	   i++;
	inc R20
	.dbline 38
;    }
L9:
	.dbline 40
;       
;    hex = hex % 10000;
	ldi R18,10000
	ldi R19,39
	movw R16,R22
	xcall mod16s
	movw R22,R16
	.dbline 41
;    temp = hex /1000;
	ldi R18,1000
	ldi R19,3
	xcall div16s
	mov R12,R16
	.dbline 42
;    if( kk >= 1000 ){
	movw R24,R14
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brlt L11
	.dbline 42
	.dbline 43
;    	   s[i] = temp + 0x30;
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	mov R24,R12
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 44
; 	   i++;
	inc R20
	.dbline 45
;    }	
L11:
	.dbline 47
;    
;    hex = hex % 1000; 
	ldi R18,1000
	ldi R19,3
	movw R16,R22
	xcall mod16s
	movw R22,R16
	.dbline 48
;    temp = hex /100;
	ldi R18,100
	ldi R19,0
	xcall div16s
	mov R12,R16
	.dbline 49
;    if( kk >= 100 ){
	movw R24,R14
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlt L13
	.dbline 49
	.dbline 50
;    	   s[i] = temp + 0x30;
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	mov R24,R12
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 51
; 	   i++;
	inc R20
	.dbline 52
;    }	
L13:
	.dbline 54
;    
;    hex = hex % 100;
	ldi R18,100
	ldi R19,0
	movw R16,R22
	xcall mod16s
	movw R22,R16
	.dbline 55
;    temp = hex /10;
	ldi R18,10
	ldi R19,0
	xcall div16s
	mov R12,R16
	.dbline 56
;    if( kk >= 10 ){
	movw R24,R14
	cpi R24,10
	ldi R30,0
	cpc R25,R30
	brlt L15
	.dbline 56
	.dbline 57
;    	   s[i] = temp + 0x30;
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	mov R24,R12
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 58
; 	   i++;
	inc R20
	.dbline 59
;    }
L15:
	.dbline 61
;    
;    hex = hex % 10;
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall mod16s
	movw R22,R16
	.dbline 62
;    s[i] = hex+ 0x30;
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	movw R24,R22
	adiw R24,48
	std z+0,R24
	.dbline 63
;    i++;
	inc R20
	.dbline 64
;    return i;
	mov R16,R20
	.dbline -2
L6:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r kk 14 I
	.dbsym r temp 12 c
	.dbsym r i 20 c
	.dbsym r s 10 pc
	.dbsym r hex 22 I
	.dbend

⌨️ 快捷键说明

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