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

📄 display.s

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 S
字号:
	.module Display.c
	.area lit(rom, con, rel)
_DisTab::
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 'y,64
	.byte 0
	.dbfile C:\icc\project\cs5532\Display.c
	.dbsym s DisTab _DisTab A[13:13]c
	.area text(rom, con, rel)
	.dbfile C:\icc\project\cs5532\Display.c
	.dbfunc s Display _Display fI
;           Disi -> R20
;         DisTem -> R22
;         DisNum -> R10
	.even
_Display::
	rcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 29
; #include<io8515.h> 
; //***************************************************
; //显示子程序,用于显示一个数字,小数点在最高位。
; //传递一个0-9的数字  
; //DisPort——显示的端口。DisPortD——端口方向。
; //DisTab[10]——显示码(const unsigned char)
; //74ls4093三个输入口 str,dada,clock  
; //and3=str+data+clock. 
; //**************************************************
; //P0  data
; //P1  clock
; //P2   TRO
; //STR-PB0   CLOCK-PB1   DATA-PB2
; #define  DisPort   PORTB
; #define  DisDdr    DDRB
; #define  str       0b00000100
; #define  data      0b00000001
; #define  clock     0b00000010
; #define  and3      0b00000111
; 
; //===============================================================
; unsigned char num[4];
; //最后三条为"E""-""全灭"
; const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
;                                   0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
;                                    
; //=============================================================== 
; void Display(unsigned char DisNum)
; {  unsigned char DisTem;
	.dbline 30
;    unsigned char Disi=8;
	ldi R20,8
	.dbline 31
;    DisTem= DisNum;
	mov R22,R10
	.dbline 32
;    DisTem=DisTem&0b01111111;
	andi R22,127
	.dbline 33
;    DisTem=DisTab[DisTem];
	ldi R24,<_DisTab
	ldi R25,>_DisTab
	mov R2,R22
	clr R3
	add R2,R24
	adc R3,R25
	mov R30,R2
	mov R31,R3
	lpm
	mov R22,R0
	.dbline 34
;    DisNum=DisNum&0b10000000;
	mov R24,R10
	andi R24,128
	mov R10,R24
	.dbline 35
;    DisNum=DisNum|DisTem;
	or R10,R22
	.dbline 36
;    DisNum=~DisNum;
	com R10
	.dbline 37
;    DisDdr=and3;
	ldi R24,7
	out 0x17,R24
	.dbline 38
;    DisPort=DisPort|str;//set str=1  	
	sbi 0x18,2
	rjmp L3
L2:
	.dbline 40
; 	while(Disi)
; 	   {DisTem=DisNum;
	.dbline 40
	mov R22,R10
	.dbline 41
; 	    DisPort=DisPort&~clock;//clock=0
	cbi 0x18,1
	.dbline 42
; 	    DisTem=DisTem>>(Disi-1);
	mov R17,R20
	subi R17,1
	mov R16,R22
	rcall lsr8
	mov R22,R16
	.dbline 43
; 	    DisTem=DisTem&0b00000001;
	andi R22,1
	.dbline 44
; 	    if(DisTem==1)
	cpi R22,1
	brne L5
	.dbline 45
; 		      {DisPort=DisPort|data;
	.dbline 45
	sbi 0x18,0
	.dbline 46
; 			   DisPort=DisPort|clock;}
	sbi 0x18,1
	.dbline 46
	rjmp L6
L5:
	.dbline 48
; 		else
; 		      {DisPort=DisPort&~data;
	.dbline 48
	cbi 0x18,0
	.dbline 49
; 			   DisPort=DisPort|clock;}      	  
	sbi 0x18,1
	.dbline 49
L6:
	.dbline 50
	dec R20
	.dbline 51
L3:
	.dbline 39
	tst R20
	brne L2
	.dbline -2
	.dbline 52
; 	    Disi--;
; 	    }	
; }	
L1:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Disi 20 c
	.dbsym r DisTem 22 c
	.dbsym r DisNum 10 c
	.area lit(rom, con, rel)
L8:
	.byte 0,0
	.byte 0,0
	.area text(rom, con, rel)
	.dbfile C:\icc\project\cs5532\Display.c
	.dbfunc s Cacu_Display _Cacu_Display fI
;            num -> y+0
;       Cacu_num -> R20,R21
;        tempCaL -> R22
;        tempCaH -> R20
	.even
_Cacu_Display::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 57
; //=============================================================
; //***************************************************************
; //计算显示一个不带小数点的数
; void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL)
; {  
	.dbline 60
;    
;    unsigned int Cacu_num;
;    unsigned char num[4]={0,0,0,0};
	ldi R24,<L8
	ldi R25,>L8
	mov R30,R28
	mov R31,R29
	ldi R16,4
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 61
;    Cacu_num=tempCaH*256+tempCaL;      
	mov R2,R22
	clr R3
	mov R4,R20
	clr R5
	mov R5,R4
	clr R4
	add R4,R2
	adc R5,R3
	mov R20,R4
	mov R21,R5
	rjmp L10
L9:
	.dbline 63
	.dbline 64
	subi R20,16
	sbci R21,39
	.dbline 65
	ldd R24,y+3
	subi R24,255	; addi 1
	std y+3,R24
	.dbline 66
L10:
	.dbline 62
;    while(Cacu_num>=10000)
	cpi R20,16
	ldi R30,39
	cpc R21,R30
	brsh L9
	rjmp L15
L14:
	.dbline 68
	.dbline 69
	subi R20,232
	sbci R21,3
	.dbline 70
	ldd R24,y+2
	subi R24,255	; addi 1
	std y+2,R24
	.dbline 71
L15:
	.dbline 67
; 			 {
; 			   Cacu_num=Cacu_num-10000;								 
; 			   num[3]=num[3]+1;
; 			 }
;    while(Cacu_num>=1000)
	cpi R20,232
	ldi R30,3
	cpc R21,R30
	brsh L14
	rjmp L20
L19:
	.dbline 73
	.dbline 74
	subi R20,100
	sbci R21,0
	.dbline 75
	ldd R24,y+1
	subi R24,255	; addi 1
	std y+1,R24
	.dbline 76
L20:
	.dbline 72
; 		     {
; 			  Cacu_num=Cacu_num-1000;
; 			  num[2]=num[2]+1;
; 		     }
;    while(Cacu_num>=100)
	cpi R20,100
	ldi R30,0
	cpc R21,R30
	brsh L19
	rjmp L25
L24:
	.dbline 78
	.dbline 79
	subi R20,10
	sbci R21,0
	.dbline 80
	ldd R24,y+0
	subi R24,255	; addi 1
	std y+0,R24
	.dbline 81
L25:
	.dbline 77
; 			 {
; 			   Cacu_num=Cacu_num-100;
; 		       num[1]=num[1]+1;
; 			 } 
;    while(Cacu_num>=10)
	cpi R20,10
	ldi R30,0
	cpc R21,R30
	brsh L24
	.dbline 83
; 			 {
; 			   Cacu_num=Cacu_num-10;
; 		       num[0]=num[0]+1;
; 			 } 	
; 			 		 
;    Display(12); 
	ldi R16,12
	rcall _Display
	.dbline 84
;    Display(12); 
	ldi R16,12
	rcall _Display
	.dbline 85
;    Display(12); 
	ldi R16,12
	rcall _Display
	.dbline 86
;    Display(Cacu_num); 
	mov R16,R20
	rcall _Display
	.dbline 87
;    Display(num[0]);
	ldd R16,y+0
	rcall _Display
	.dbline 88
;    Display(num[1]); 			  
	ldd R16,y+1
	rcall _Display
	.dbline 89
;    Display(num[2]);
	ldd R16,y+2
	rcall _Display
	.dbline 90
;    Display(num[3]);   
	ldd R16,y+3
	rcall _Display
	.dbline 91
;    Display(12); 
	ldi R16,12
	rcall _Display
	.dbline 92
;    Display(12); 
	ldi R16,12
	rcall _Display
	.dbline 93
;    Display(12); 
	ldi R16,12
	rcall _Display
	.dbline 94
;    Display(12);  
	ldi R16,12
	rcall _Display
	.dbline -2
	.dbline 96
;    
; }
L7:
	adiw R28,4
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l num 0 A[4:4]c
	.dbsym r Cacu_num 20 i
	.dbsym r tempCaL 22 c
	.dbsym r tempCaH 20 c
	.area bss(ram, con, rel)
	.dbfile C:\icc\project\cs5532\Display.c
_num::
	.blkb 4
	.dbsym s num _num A[4:4]c

⌨️ 快捷键说明

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