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

📄 lesson1.s

📁 AVR单片机视频教程的课件和每一次课的源程序是学习AVR单片机的首选
💻 S
字号:
	.module lesson1.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::
	rcall push_gset2
	mov R22,R16
	mov R23,R17
	.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
	mov R18,R22
	mov R19,R23
	rcall mpy16s
	mov R22,R16
	mov R23,R17
	lsr R23
	ror R22
	lsr R23
	ror R22
	.dbline 31
	clr R20
	clr R21
	rjmp 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:
	rcall 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::
	rcall 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
	rjmp L10
L7:
	.dbline 43
	clr R22
	clr R23
	rjmp 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:
	rcall 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;  		 //ALLLED=0xFF,使全部LED都亮
;   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;		 //ALLLED=0xFF,使全部LED都灭
	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
	rcall _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++)	//循环8次,8个LED依次点亮
	ldi R16,50
	ldi R17,0
	rcall _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
	rcall _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
	rcall _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 I:\AVR视频教程\视频教程\lesson1\lesson1\lesson1.c
	.dbfunc e One_led _One_led fV
;              i -> <dead>
;          light -> R22
;         number -> R20
	.even
_One_led::
	rcall 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
	rcall 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
	rcall _Delayms
	.dbline 28
	cbi 0x1b,2
	.dbline 29
	rjmp L18
L17:
	.dbline 31
	.dbline 32
	ldi R16,1
	mov R17,R20
	rcall lsl8
	in R2,0x18
	or R2,R16
	out 0x18,R2
	.dbline 33
	sbi 0x1b,2
	.dbline 34
	ldi R16,5
	ldi R17,0
	rcall _Delayms
	.dbline 35
	cbi 0x1b,2
	.dbline 36
L18:
	.dbline -2
	.dbline 37
L16:
	rcall 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::
	rcall 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
	rcall _Delayms
	.dbline 51
	cbi 0x1b,2
	.dbline 52
	rjmp 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
	rcall _Delayms
	.dbline 58
	cbi 0x1b,2
	.dbline 59
L21:
	.dbline -2
	.dbline 60
L19:
	rcall 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::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 68
	.dbline 70
	clr R20
	rjmp L26
L23:
	.dbline 71
	.dbline 72
	clr R16
	rcall _All_led
	.dbline 73
	ldi R18,1
	mov R16,R20
	rcall _One_led
	.dbline 74
	mov R16,R22
	clr R17
	rcall _Delayms
	.dbline 75
L24:
	.dbline 70
	inc R20
L26:
	.dbline 70
	cpi R20,8
	brlo L23
	.dbline -2
	.dbline 76
L22:
	rcall 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::
	rcall 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
	rcall _One_led
	.dbline 87
;  Delayms(MS);				//延时指定的时间
	mov R16,R22
	clr R17
	rcall _Delayms
	.dbline 88
;  All_led(FALSE);			//熄灭所有的LED
	clr R16
	rcall _All_led
	.dbline 89
;  Delayms(MS);				//延时指定的时间
	mov R16,R22
	clr R17
	rcall _Delayms
	.dbline 90
;  One_led(number,FALSE);		//熄灭指定的LED 
	clr R18
	mov R16,R20
	rcall _One_led
	.dbline -2
	.dbline 91
; }
L27:
	rcall 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( );	   			//初始化开发板
	rcall _Board_init
	rjmp L30
L29:
	.dbline 105
;  while(1)
;  {
	.dbline 106
;   switch(i)
	mov R10,R22
	clr R11
	tst R10
	brne X0
	tst R11
	breq L35
X0:
	mov R24,R10
	mov R25,R11
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L36
	rjmp L32
X1:
	.dbline 107
;   {
L35:
	.dbline 109
;    case 0:
;   	   Flow_LED(200);		//i=0,以流水灯的方式显示
	ldi R16,200
	rcall _Flow_LED
	.dbline 110
; 	   break;
	rjmp L33
L36:
	.dbline 112
;    case 1:	 				
;    	   Flash_LED(bit,100);	//i=1,以闪烁灯的方式显示
	ldi R18,100
	mov R16,R20
	rcall _Flash_LED
	.dbline 113
;   }
L32:
L33:
	.dbline 114
L30:
	.dbline 104
	rjmp 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 + -