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

📄 counter.s

📁 protues_atmeg8学习之:LED篇源代码
💻 S
字号:
	.module Counter.c
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 13
; /******************************************/
; //文件名:Counter.c
; //功能: 多个LED数码观的控制
; //作者:  young
; //时间: 2006.10.1
; //目标MCU:ATmega8   
; //晶振:  8MHZ
; /******************************************/
; #include <iom8v.h>
; 
; //延时1MS
; void delay_1ms(void)
; { 
	.dbline 15
;     unsigned int i;
;     for(i=1;i<(unsigned int)(1144-2);i++)
	ldi R16,1
	ldi R17,0
	rjmp L5
L2:
	.dbline 16
L3:
	.dbline 15
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 15
	cpi R16,118
	ldi R30,4
	cpc R17,R30
	brlo L2
	.dbline -2
	.dbline 17
;         ;
; }
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_ms::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 21
; 
; //延时nMS
; void delay_ms(unsigned int n)
; {
	.dbline 22
;     unsigned int i=0;
	clr R20
	clr R21
	rjmp L8
L7:
	.dbline 24
	.dbline 25
	rcall _delay_1ms
	.dbline 26
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 27
L8:
	.dbline 23
;     while(i<n)
	cp R20,R22
	cpc R21,R23
	brlo L7
	.dbline -2
	.dbline 28
;     {
; 	    delay_1ms();
;         i++;
;     }
; } 
L6:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
L11:
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.blkb 2
	.area idata
	.byte 125,7
	.area data(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.area lit(rom, con, rel)
L12:
	.byte 0,0
	.byte 0,0
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
	.dbfunc e main _main fV
	.dbsym s LedNum L11 A[10:10]c
;              j -> R20
;       CountNum -> y+0
;              i -> R22
	.even
_main::
	sbiw R28,4
	.dbline -1
	.dbline 32
; 
; //主函数,依次显示数字0~9
; void main()
; {
	.dbline 37
; 	unsigned char i,j;
; 	static unsigned char LedNum[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 
; 	                       0x6D, 0x7D, 0x07, 0x7F, 0x6F};	
; 	//显示小数点要加0x80
;     unsigned char CountNum[4]={0, 0, 0, 0};    //计数的百、十、个位和十分位
	ldi R24,<L12
	ldi R25,>L12
	movw R30,R28
	ldi R16,4
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 38
; 	DDRB=0xFF;	//设置B口为输出模式
	ldi R24,255
	out 0x17,R24
	.dbline 39
; 	PORTB=0xFF;	//置高电平
	out 0x18,R24
	.dbline 40
; 	DDRC=0x0F;
	ldi R24,15
	out 0x14,R24
	.dbline 41
; 	PORTC=0xFF;
	ldi R24,255
	out 0x15,R24
	rjmp L14
L13:
	.dbline 44
; 	   
; 	while (1)
; 	{	
	.dbline 45
; 	    i=0;	
	clr R22
	.dbline 46
;         for(j=0;j<100;j++) //依次显示1S"000.0"
	clr R20
	rjmp L19
L16:
	.dbline 47
;     	{
	.dbline 48
; 		    i=++i%4;
	mov R24,R22
	subi R24,255    ; addi 1
	ldi R17,4
	mov R16,R24
	rcall mod8u
	mov R22,R16
	.dbline 49
; 		    PORTC&=~(1<<i);
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R16
	com R2
	in R3,0x15
	and R3,R2
	out 0x15,R3
	.dbline 50
; 			if(2==i)
	cpi R22,2
	brne L20
	.dbline 51
; 			    PORTB=LedNum[0]+0x80;
	lds R24,L11
	subi R24,128    ; addi 128
	out 0x18,R24
	rjmp L21
L20:
	.dbline 53
; 			else	
; 			    PORTB=LedNum[0];		
	lds R2,L11
	out 0x18,R2
L21:
	.dbline 54
	ldi R16,10
	ldi R17,0
	rcall _delay_ms
	.dbline 55
	in R24,0x15
	ori R24,255
	out 0x15,R24
	.dbline 56
L17:
	.dbline 46
	inc R20
L19:
	.dbline 46
	cpi R20,100
	brlo L16
	.dbline 58
; 			delay_ms(10);
; 			PORTC|=0xFF;	
;     	}
; 		
; 		CountNum[0]=CountNum[1]=CountNum[2]=CountNum[3]=0;
	clr R2
	std y+3,R2
	std y+2,R2
	std y+1,R2
	std y+0,R2
	rjmp L26
L25:
	.dbline 60
; 		while(1)
; 		{
	.dbline 61
; 			if(CountNum[3]++==9)
	ldd R2,y+3
	mov R24,R2
	subi R24,255    ; addi 1
	std y+3,R24
	mov R24,R2
	cpi R24,9
	brne L28
	.dbline 62
; 			{
	.dbline 63
; 			    CountNum[3]=0;			    
	clr R2
	std y+3,R2
	.dbline 64
; 				if(9==CountNum[2]++)
	ldd R2,y+2
	mov R24,R2
	subi R24,255    ; addi 1
	std y+2,R24
	mov R24,R2
	cpi R24,9
	brne L32
	.dbline 65
; 			    {
	.dbline 66
; 			        CountNum[2]=0;				    
	clr R2
	std y+2,R2
	.dbline 67
; 					if(9==CountNum[1]++)
	ldd R2,y+1
	mov R24,R2
	subi R24,255    ; addi 1
	std y+1,R24
	mov R24,R2
	cpi R24,9
	brne L36
	.dbline 68
; 			        {
	.dbline 69
; 			            CountNum[1]=0;
	clr R2
	std y+1,R2
	.dbline 70
; 				        CountNum[0]++;
	ldd R24,y+0
	subi R24,255    ; addi 1
	std y+0,R24
	.dbline 71
; 					}
L36:
	.dbline 72
; 			    }				
L32:
	.dbline 73
; 			}
L28:
	.dbline 75
; 					
; 		    for(i=0;i<4;i++)
	clr R22
	rjmp L43
L40:
	.dbline 76
; 		    {
	.dbline 77
; 		        PORTC&=~(1<<i);
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R16
	com R2
	in R3,0x15
	and R3,R2
	out 0x15,R3
	.dbline 78
; 				if(2==i)
	cpi R22,2
	brne L44
	.dbline 79
; 				    PORTB=LedNum[CountNum[i]]+0x80;
	movw R24,R28
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<L11
	ldi R25,>L11
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	subi R24,128    ; addi 128
	out 0x18,R24
	rjmp L45
L44:
	.dbline 81
; 				else
; 				    PORTB=LedNum[CountNum[i]];			    
	movw R24,R28
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<L11
	ldi R25,>L11
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
L45:
	.dbline 82
	ldi R16,10
	ldi R17,0
	rcall _delay_ms
	.dbline 83
	in R24,0x15
	ori R24,255
	out 0x15,R24
	.dbline 84
L41:
	.dbline 75
	inc R22
L43:
	.dbline 75
	cpi R22,4
	brsh X1
	rjmp L40
X1:
	.dbline 86
; 			    delay_ms(10);
; 			    PORTC|=0xFF;
; 			}
; 	        
; 			if(CountNum[0]==9 && CountNum[1]==9 && CountNum[2]==9 && CountNum[3]==9)
	ldd R24,y+0
	cpi R24,9
	brne L46
	ldd R24,y+1
	cpi R24,9
	brne L46
	ldd R24,y+2
	cpi R24,9
	brne L46
	ldd R24,y+3
	cpi R24,9
	brne L46
	.dbline 87
; 			    break;			
	rjmp L27
L46:
	.dbline 88
L26:
	.dbline 59
	rjmp L25
L27:
	.dbline 89
L14:
	.dbline 43
	rjmp L13
X0:
	.dbline -2
	.dbline 90
; 		}		
;      }
; }
L10:
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym l CountNum 0 A[4:4]c
	.dbsym r i 22 c
	.dbend

⌨️ 快捷键说明

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