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

📄 led.s

📁 AVR单片机开发版资料测试程序里的源程序
💻 S
字号:
	.module LED.C
	.area text(rom, con, rel)
	.dbfile C:/icc/include/AVR_PQ1A.h
	.dbfunc e Delayus _Delayus fV
;              i -> R20,R21
;             US -> R22,R23
	.even
_Delayus::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 28
; /*******************************************
;   文件:LED.C
;   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
;   硬件:ATMEGA16芯片
;   日期:2006年12月10日 
;   功能:驱动开发板上的LED。1. 流水灯 2.闪烁指定的LED
;   备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
; /******************************************/
; #include <iom16v.h>			//包含型号头文件
; #include <macros.h>			//包含"位"操作头文件
; #include <stdio.h>			//标准输入输出头文件
; #include <AVR_PQ1A.h>		//包含自定义常量头文件
; 
; /*******************************************
; 函数名称: One_led
; 功    能: 点亮或者熄灭指定的LED
; 参    数: number--指定的LED
; 	  	  light--为TRUE的时候为点亮LED,为FALSE的时候为熄灭LED
; 返回值  : 无
; /********************************************/
; void One_led(uchar number,uchar light)
; {uchar i;
;  if(light==TRUE)		   //点亮操作
;  {
;   PORTB&=~BIT(number);	   //输出数据
;   PORTA|=BIT(LEDLK);	   //更新数据
;   Delayms(5);			   //调整时序
;   PORTA&=~BIT(LEDLK);	   //锁存数据
	.dbline 30
;  }
;  else
	ldi R16,5
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R22,R16
	lsr R23
	ror R22
	lsr R23
	ror R22
	.dbline 31
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 31
L3:
	.dbline 31
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 31
;  {
	cp R20,R22
	cpc R21,R23
	brlo L2
	.dbline -2
	.dbline 32
;   PORTB|=BIT(number);	   //输出数据
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r US 22 i
	.dbend
	.dbfunc e Delayms _Delayms fV
;              i -> R20,R21
;              j -> R22,R23
;             MS -> R16,R17
	.even
_Delayms::
	xcall push_gset2
	.dbline -1
	.dbline 40
;   PORTA|=BIT(LEDLK);	   //更新数据
;   Delayms(5);			   //调整时序
;   PORTA&=~BIT(LEDLK);	   //锁存数据
;  }
; }
; /*******************************************
; 函数名称: All_led
; 功    能: 点亮或者熄灭全部LED
	.dbline 42
; 参    数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED
; 返回值  : 无
	clr R20
	clr R21
	xjmp L10
L7:
	.dbline 43
	clr R22
	clr R23
	xjmp L14
L11:
	.dbline 43
L12:
	.dbline 43
	subi R22,255  ; offset = 1
	sbci R23,255
L14:
	.dbline 43
	cpi R22,117
	ldi R30,4
	cpc R23,R30
	brlo L11
L8:
	.dbline 42
	subi R20,255  ; offset = 1
	sbci R21,255
L10:
	.dbline 42
	cp R20,R16
	cpc R21,R17
	brlo L7
	.dbline -2
	.dbline 44
; /********************************************/
; void All_led(uchar light)
L6:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r MS 16 i
	.dbend
	.dbfunc e Board_init _Board_init fV
	.even
_Board_init::
	.dbline -1
	.dbline 52
; {
;  if(light)
;  {
;   PORTB&=~ALLLED;
;   PORTA|=BIT(LEDLK);
;   Delayms(5);
;   PORTA&=~BIT(LEDLK);
;  }
	.dbline 53
;  else
	ldi R24,255
	out 0x1a,R24
	.dbline 54
;  {
	out 0x17,R24
	.dbline 55
;   PORTB|=ALLLED;
	out 0x14,R24
	.dbline 56
;   PORTA|=BIT(LEDLK);
	out 0x11,R24
	.dbline 58
;   Delayms(5);
;   PORTA&=~BIT(LEDLK);
	clr R2
	out 0xd,R2
	.dbline 60
;  }
; }
	sbi 0x1b,6
	.dbline 61
; /*******************************************
	cbi 0x15,6
	.dbline 62
; 函数名称: Flow_led
	cbi 0x1b,1
	.dbline 63
; 功    能: 流水灯(循环一次)
	out 0x18,R24
	.dbline 64
; 参    数: MS--点亮相邻LED的时间间隔
	sbi 0x1b,2
	.dbline 65
; 返回值  : 无
	ldi R16,5
	ldi R17,0
	xcall _Delayus
	.dbline 66
; /********************************************/
	cbi 0x1b,2
	.dbline 68
; void Flow_LED(uchar MS)
; {
	clr R2
	out 0x18,R2
	.dbline 69
;  uchar i;
	sbi 0x1b,3
	.dbline 70
;  for(i=0;i<8;i++)
	ldi R16,50
	ldi R17,0
	xcall _Delayus
	.dbline 71
;  {
	cbi 0x1b,3
	.dbline 73
;   All_led(FALSE);	//全部熄灭
;   One_led(i,TRUE);	//点亮指定的LED
	ldi R24,255
	out 0x18,R24
	.dbline 74
;   Delayms(MS);		//延时指定的时间
	sbi 0x1b,4
	.dbline 75
;  } 
	ldi R16,50
	ldi R17,0
	xcall _Delayus
	.dbline 76
; }
	cbi 0x1b,4
	.dbline 78
; /*******************************************
; 函数名称: Flash_led
	ldi R24,255
	out 0x12,R24
	.dbline 79
; 功    能: 闪烁指定的LED(循环一次)
	sbi 0x1b,7
	.dbline 80
; 参    数: number--指定的LED
	ldi R16,50
	ldi R17,0
	xcall _Delayus
	.dbline 81
; 	  	  MS--LED闪烁的时间间隔
	cbi 0x1b,7
	.dbline -2
	.dbline 84
; 返回值  : 无
; /********************************************/
; void Flash_LED(uchar number,uchar MS)
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\1_LED\LED.C
	.dbfunc e One_led _One_led fV
;              i -> <dead>
;          light -> R22
;         number -> R20
	.even
_One_led::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 22
	.dbline 23
	cpi R22,1
	brne L17
	.dbline 24
	.dbline 25
	ldi R16,1
	mov R17,R20
	xcall lsl8
	mov R2,R16
	com R2
	in R3,0x18
	and R3,R2
	out 0x18,R3
	.dbline 26
	sbi 0x1b,2
	.dbline 27
	ldi R16,5
	ldi R17,0
	xcall _Delayms
	.dbline 28
	cbi 0x1b,2
	.dbline 29
	xjmp L18
L17:
	.dbline 31
	.dbline 32
	ldi R16,1
	mov R17,R20
	xcall lsl8
	in R2,0x18
	or R2,R16
	out 0x18,R2
	.dbline 33
	sbi 0x1b,2
	.dbline 34
	ldi R16,5
	ldi R17,0
	xcall _Delayms
	.dbline 35
	cbi 0x1b,2
	.dbline 36
L18:
	.dbline -2
	.dbline 37
L16:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbsym r light 22 c
	.dbsym r number 20 c
	.dbend
	.dbfunc e All_led _All_led fV
;          light -> R20
	.even
_All_led::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 45
	.dbline 46
	tst R20
	breq L20
	.dbline 47
	.dbline 48
	in R24,0x18
	andi R24,0
	out 0x18,R24
	.dbline 49
	sbi 0x1b,2
	.dbline 50
	ldi R16,5
	ldi R17,0
	xcall _Delayms
	.dbline 51
	cbi 0x1b,2
	.dbline 52
	xjmp L21
L20:
	.dbline 54
	.dbline 55
	in R24,0x18
	ori R24,255
	out 0x18,R24
	.dbline 56
	sbi 0x1b,2
	.dbline 57
	ldi R16,5
	ldi R17,0
	xcall _Delayms
	.dbline 58
	cbi 0x1b,2
	.dbline 59
L21:
	.dbline -2
	.dbline 60
L19:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r light 20 c
	.dbend
	.dbfunc e Flow_LED _Flow_LED fV
;              i -> R20
;             MS -> R22
	.even
_Flow_LED::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 68
	.dbline 70
	clr R20
	xjmp L26
L23:
	.dbline 71
	.dbline 72
	clr R16
	xcall _All_led
	.dbline 73
	ldi R18,1
	mov R16,R20
	xcall _One_led
	.dbline 74
	mov R16,R22
	clr R17
	xcall _Delayms
	.dbline 75
L24:
	.dbline 70
	inc R20
L26:
	.dbline 70
	cpi R20,8
	brlo L23
	.dbline -2
	.dbline 76
L22:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r MS 22 c
	.dbend
	.dbfunc e Flash_LED _Flash_LED fV
;             MS -> R22
;         number -> R20
	.even
_Flash_LED::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 85
; {
	.dbline 86
;  One_led(number,TRUE);		//点亮指定的LED
	ldi R18,1
	mov R16,R20
	xcall _One_led
	.dbline 87
;  Delayms(MS);				//延时指定的时间
	mov R16,R22
	clr R17
	xcall _Delayms
	.dbline 88
;  All_led(FALSE);		//熄灭所有的LED
	clr R16
	xcall _All_led
	.dbline 89
;  Delayms(MS);				//延时指定的时间
	mov R16,R22
	clr R17
	xcall _Delayms
	.dbline 90
;  One_led(number,FALSE);		//熄灭指定的LED 
	clr R18
	mov R16,R20
	xcall _One_led
	.dbline -2
	.dbline 91
; }
L27:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r MS 22 c
	.dbsym r number 20 c
	.dbend
	.dbfunc e main _main fV
;            bit -> R20
;              i -> R22
	.even
_main::
	.dbline -1
	.dbline 99
; /*******************************************
; 函数名称: main
; 功    能: 1. 流水灯 2.闪烁指定的LED
; 参    数: 无
; 返回值  : 无
; /********************************************/
; void main(void)
; {	 
	.dbline 101
;  uchar i,bit;
;  i=0;  	   					//i=0时为流水灯,i=1时为闪烁灯
	clr R22
	.dbline 102
;  bit=0;						//bit指定闪烁的LED
	clr R20
	.dbline 103
;  Board_init( );	   			//初始化开发板
	xcall _Board_init
	xjmp L30
L29:
	.dbline 105
;  while(1)
;  {
	.dbline 106
;   switch(i)
	mov R10,R22
	clr R11
	tst R10
	brne X0
	tst R11
	breq L35
X0:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L36
	xjmp L32
X1:
	.dbline 107
;   {
L35:
	.dbline 109
;    case 0:
;   	   Flow_LED(200);
	ldi R16,200
	xcall _Flow_LED
	.dbline 110
; 	   break;
	xjmp L33
L36:
	.dbline 112
;    case 1:
;    	   Flash_LED(bit,100);
	ldi R18,100
	mov R16,R20
	xcall _Flash_LED
	.dbline 113
;   }
L32:
L33:
	.dbline 114
L30:
	.dbline 104
	xjmp L29
X2:
	.dbline -2
	.dbline 115
;  }  
; }
L28:
	.dbline 0 ; func end
	ret
	.dbsym r bit 20 c
	.dbsym r i 22 c
	.dbend

⌨️ 快捷键说明

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