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

📄 main.s

📁 一个关于AVR单片机的例程
💻 S
字号:
	.module main.c
	.area lit(rom, con, rel)
_led_table::
	.word 255
	.word 0
	.word 136
	.word 68
	.word 34
	.word 17
	.word 51
	.word 119
	.word 255
	.word 102
	.word 24
	.word 36
	.word 66
	.word 129
	.word 165
	.word 231
	.word 255
	.word 126
	.word 60
	.word 24
	.dbfile C:\DOCUME~1\administrator\桌面\教程\LED应用\霓虹灯\main.c
	.dbsym e led_table _led_table A[40:20]kI
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\administrator\桌面\教程\LED应用\霓虹灯\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 25
; //ICC-AVR application builder : 2007-1-29 10:04:38
; // Target : M16
; // Crystal: 7.3728Mhz
; // 功能:霓虹灯程序
; // 作者:古欣
; // AVR与虚拟仪器 http://www.avrvi.com
; 
; #include <iom16v.h>
; #include <macros.h>
; 
; #define led_port PORTA
; //定义输出端口
; #define led_ddr DDRA
; //定义输出控制寄存器
; //可以自行修改,必须保持 led_port和led_ddr一致,PORTA对应DDRA
; 
; const led_table[20]={   //定义要输出的值
; 0xff,0x00,0x88,0x44,0x22,
; 0x11,0x33,0x77,0xff,0x66,
; 0x18,0x24,0x42,0x81,0xa5,
; 0xe7,0xff,0x7e,0x3c,0x18};
; 
; 
; void port_init(void)
; {
	.dbline 26
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 27
;  DDRA  = 0x00;
	out 0x1a,R2
	.dbline 28
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 29
;  DDRB  = 0x00;
	out 0x17,R2
	.dbline 30
;  PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 31
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 32
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 33
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline 34
;  led_ddr=0xff; //设置LED的端口为输出
	ldi R24,255
	out 0x1a,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 40
; }
; 
; //call this routine to initialize all peripherals
; //此处为ICC系统生成,未做更改
; void init_devices(void)
; {
	.dbline 42
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 43
;  port_init();
	xcall _port_init
	.dbline 45
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 46
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 47
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 48
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Delay _Delay fV
;              i -> R16
;              j -> R18
	.even
_Delay::
	.dbline -1
	.dbline 53
;  //all peripherals are now initialized
; }
; 
; void Delay(void)  //延时,没有详细计算
; {
	.dbline 55
; unsigned char i,j;
; for(i=150;i>0;i--)
	ldi R16,150
	xjmp L7
L4:
	.dbline 56
; {
	.dbline 57
;   for(j=200;j>0;j--)
	ldi R18,200
	xjmp L11
L8:
	.dbline 58
L9:
	.dbline 57
	dec R18
L11:
	.dbline 57
	clr R2
	cp R2,R18
	brlo L8
	.dbline 59
L5:
	.dbline 55
	dec R16
L7:
	.dbline 55
	clr R2
	cp R2,R16
	brlo L4
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbsym r j 18 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20,R21
	.even
_main::
	.dbline -1
	.dbline 63
; ;
; }
; }
; 
; void main(void)
; {
	.dbline 65
;  unsigned int i;
;  init_devices();
	xcall _init_devices
	xjmp L14
L13:
	.dbline 67
;  while(1)
;  {
	.dbline 68
;  for(i=0;i<20;i++)
	clr R20
	clr R21
	xjmp L19
L16:
	.dbline 69
	.dbline 70
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_led_table
	ldi R25,>_led_table
	add R30,R24
	adc R31,R25
	lpm R0,Z+
	lpm R1,Z
	movw R30,R0
	out 0x1b,R30
	.dbline 71
	xcall _Delay
	.dbline 72
	xcall _Delay
	.dbline 73
	xcall _Delay
	.dbline 74
L17:
	.dbline 68
	subi R20,255  ; offset = 1
	sbci R21,255
L19:
	.dbline 68
	cpi R20,20
	ldi R30,0
	cpc R21,R30
	brlo L16
	.dbline 75
L14:
	.dbline 66
	xjmp L13
X0:
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend

⌨️ 快捷键说明

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