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

📄 main.s

📁 一个关于AVR单片机的例程
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile E:\avr\2-1-4\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 24
; 
; //ICC-AVR application builder : 2007-1-29 10:04:38
; // Target : M16
; // Crystal: 7.3728Mhz
; // 用途:演示通过PINB读按键的值,赋值给PORTA,键盘扫描模型。
; // 作者:古欣
; // AVR与虚拟仪器 [url]http://www.avrvi.com[/url]
; // 使用7.3728M外部晶振,请短接跳线JP2的1和2,电源跳线连接3.3V或者5V
; // 开发板连接:LED0~3——PA0~3,独立按键A~D接PB0~3
; 
; #include <iom16v.h>
; #include <macros.h>
; 
; #define led_port PORTA
; //定义输出端口
; #define led_ddr DDRA
; //定义输出控制寄存器
; #define key_PORT PORTB
; #define key_DDR DDRB
; 
; 
; 
; void port_init(void)
; {
	.dbline 25
; PORTA = 0x0F;  //LED灭
	ldi R24,15
	out 0x1b,R24
	.dbline 26
; DDRA = 0x00;
	clr R2
	out 0x1a,R2
	.dbline 27
; PORTB = 0xFF; //按键的端口为输入
	ldi R24,255
	out 0x18,R24
	.dbline 28
; DDRB = 0x00;
	out 0x17,R2
	.dbline 29
; PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 30
; DDRC = 0x00;
	out 0x14,R2
	.dbline 31
; PORTD = 0x00;
	out 0x12,R2
	.dbline 32
; DDRD = 0x00;
	out 0x11,R2
	.dbline 33
; led_ddr=0xff; //设置LED的端口为输出
	out 0x1a,R24
	.dbline 34
; key_PORT=0x0F; //使能按键的IO口的内部上拉
	ldi R24,15
	out 0x18,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
;              j -> R1
;              i -> R0
	.even
_Delay::
	.dbline -1
	.dbline 53
; //all peripherals are now initialized
; }
; 
; void Delay(void) //延时,没有详细计算
; {
	.dbline 62
; unsigned char i,j;
; /*
; for(i=20;i>0;i--)
; {
; for(j=200;j>0;j--)
; ;
; }
; */
; ;
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.dbfunc e main _main fV
;            tmp -> R20
	.even
_main::
	.dbline -1
	.dbline 66
; }
; 
; void main(void)
; {
	.dbline 67
; unsigned char tmp=0; //定义变量
	clr R20
	.dbline 68
; init_devices();     //初始化
	xcall _init_devices
	xjmp L6
L5:
	.dbline 70
; while(1)
; {
	.dbline 71
;   tmp=(PINB&0x0F); //与0x0F 只取低四位的值
	in R20,0x16
	andi R20,15
	.dbline 72
;   if(tmp!=0x0F)
	cpi R20,15
	breq L8
	.dbline 73
;   {
	.dbline 74
;   Delay();     //延时去抖
	xcall _Delay
	.dbline 75
;   if((PINB&0x0F)==tmp) //再次读IO口,如果和上次的值相等,则说明确实是键盘按下
	in R24,0x16
	andi R24,15
	cp R24,R20
	brne L10
	.dbline 76
;   {
	.dbline 77
;   PORTA = tmp&0x0F; //将键盘的值输出到PORTA上
	mov R24,R20
	andi R24,15
	out 0x1b,R24
	.dbline 78
;   }
L10:
	.dbline 79
;   }
L8:
	.dbline 80
	xcall _Delay
	.dbline 81
L6:
	.dbline 69
	xjmp L5
X0:
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbsym r tmp 20 c
	.dbend

⌨️ 快捷键说明

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