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

📄 main.s

📁 一个关于AVR单片机的例程
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 9
; //ICC-AVR application builder : 2007-5-16 5:50:45
; // Target : M16
; // Crystal: 4.0000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; extern void delay_ms (int time);
; void port_init(void)
; {
	.dbline 10
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 11
;  DDRA  = 0xFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 12
;  PORTB = 0xF0;
	ldi R24,240
	out 0x18,R24
	.dbline 13
;  DDRB  = 0x0F;
	ldi R24,15
	out 0x17,R24
	.dbline 14
;  PORTC = 0x80; //m103 output only
	ldi R24,128
	out 0x15,R24
	.dbline 15
;  DDRC  = 0x80;
	out 0x14,R24
	.dbline 16
;  PORTD = 0x04;
	ldi R24,4
	out 0x12,R24
	.dbline 17
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 22
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 24
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 25
;  port_init();
	xcall _port_init
	.dbline 27
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 28
;  GICR  = 0x40;
	ldi R24,64
	out 0x3b,R24
	.dbline 29
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 30
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area lit(rom, con, rel)
_table::
	.byte 126,48
	.byte 'm,'y
	.byte 51,91
	.byte 95,'p
	.byte 127,123
	.byte 'w,31
	.byte 'N,61
	.byte 'O,'G
	.dbsym e table _table A[16:16]kc
	.area data(ram, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
_position::
	.blkb 2
	.area idata
	.byte 128,128
	.area data(ram, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
	.blkb 2
	.area idata
	.byte 128,128
	.area data(ram, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
	.dbsym e position _position A[4:4]c
	.area text(rom, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 39
;  //all peripherals are now initialized
; }
; 
; 
; const unsigned char table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47};
; unsigned char position[]={0x80,0x80,0x80,0x80};
; unsigned char key;
; void main(void)
; {
	.dbline 41
; 
; init_devices();
	xcall _init_devices
	xjmp L5
L4:
	.dbline 43
	.dbline 44
	ldi R24,<_table
	ldi R25,>_table
	lds R30,_key
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	out 0x1b,R30
	.dbline 45
L5:
	.dbline 42
	xjmp L4
X0:
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _scan_key
	.area text(rom, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
	.dbfunc e scan_key _scan_key fV
	.even
_scan_key::
	xcall push_lset
	xcall push_gset1
	.dbline -1
	.dbline 88
; while(1)
; {
;  PORTA=table[key];
;  }
; }
; /*
; void main(void)
; {
; init_devices();
;  for(;;)
;  {
;   unsigned char i;
;   for(i=0;i<4;i++)
;   {PORTC|=position[i];
;    PORTA=table[key];
;    delay_ms(2); 
;   }
;  }
; } 
; #pragma interrupt_handler scan_key:2
;  void scan_key(void)
;  { CLI();
;   switch(PINB)
;    {
;     case 0x70:key=0;break;
;     case 0xb0:key=1;break;
;     case 0xd0:key=2;break;
;     case 0xe0:key=3;break;
;    }
;   PORTB=0x0F;
;   DDRB=0xF0;
;   delay_ms(1);
;   switch(PINB&0X0F)
;     {
; 	case 0x07:key=key+0;break;
; 	case 0x0b:key=key+4;break;
; 	case 0x0d:key=key+8;break;
; 	case 0x0e:key=key+12;break;
; 	}
; 	PORTB=0xF0;
;     DDRB=0x0F;
; 	SEI();
;  }
; */
; #pragma interrupt_handler scan_key:2
;  void scan_key(void)
; {
	.dbline 89
; NOP();
	nop
	.dbline 90
;  NOP();
	nop
	.dbline 91
; 	PORTB=0xF0;
	ldi R24,240
	out 0x18,R24
	.dbline 92
;     DDRB=0x0F;
	ldi R24,15
	out 0x17,R24
	.dbline 93
;   NOP();
	nop
	.dbline 94
;   if(PINB!=0xF0)
	in R24,0x16
	cpi R24,240
	brne X3
	xjmp L8
X3:
	.dbline 95
;   {
	.dbline 96
;   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 97
;   if(PINB!=0xF0)
	in R24,0x16
	cpi R24,240
	brne X4
	xjmp L10
X4:
	.dbline 98
;   {
	.dbline 100
;   //key=0;
;    switch(PINB)
	in R20,0x16
	clr R21
	cpi R20,176
	ldi R30,0
	cpc R21,R30
	breq L16
	ldi R24,176
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L20
L19:
	cpi R20,112
	ldi R30,0
	cpc R21,R30
	breq L15
	xjmp L13
L20:
	cpi R20,208
	ldi R30,0
	cpc R21,R30
	breq L17
	cpi R20,208
	ldi R30,0
	cpc R21,R30
	brlt L13
L21:
	cpi R20,224
	ldi R30,0
	cpc R21,R30
	breq L18
	xjmp L13
X1:
	.dbline 101
;    {
L15:
	.dbline 102
;     case 0x70:key=0;break;
	clr R2
	sts _key,R2
	.dbline 102
	xjmp L13
L16:
	.dbline 103
;     case 0xb0:key=1;break;
	ldi R24,1
	sts _key,R24
	.dbline 103
	xjmp L13
L17:
	.dbline 104
;     case 0xd0:key=2;break;
	ldi R24,2
	sts _key,R24
	.dbline 104
	xjmp L13
L18:
	.dbline 105
;     case 0xe0:key=3;break;
	ldi R24,3
	sts _key,R24
	.dbline 105
	.dbline 106
; 	default: break;
L13:
	.dbline 108
;    }
;   PORTB=0x0F;
	ldi R24,15
	out 0x18,R24
	.dbline 109
;   DDRB=0xF0;
	ldi R24,240
	out 0x17,R24
	.dbline 110
;   NOP();
	nop
	.dbline 111
;   switch(PINB&0X0F)
	in R20,0x16
	clr R21
	andi R20,15
	andi R21,0
	cpi R20,7
	ldi R30,0
	cpc R21,R30
	breq L25
	cpi R20,11
	ldi R30,0
	cpc R21,R30
	breq L26
	cpi R20,13
	ldi R30,0
	cpc R21,R30
	breq L27
	cpi R20,14
	ldi R30,0
	cpc R21,R30
	breq L28
	xjmp L23
X2:
	.dbline 112
;     {
L25:
	.dbline 113
; 	case 0x07:key=key+0;break;
	lds R2,_key
	sts _key,R2
	.dbline 113
	xjmp L23
L26:
	.dbline 114
; 	case 0x0b:key=key+4;break;
	lds R24,_key
	subi R24,252    ; addi 4
	sts _key,R24
	.dbline 114
	xjmp L23
L27:
	.dbline 115
; 	case 0x0d:key=key+8;break;
	lds R24,_key
	subi R24,248    ; addi 8
	sts _key,R24
	.dbline 115
	xjmp L23
L28:
	.dbline 116
; 	case 0x0e:key=key+12;break;
	lds R24,_key
	subi R24,244    ; addi 12
	sts _key,R24
	.dbline 116
	.dbline 117
; 	default: break;
L23:
	.dbline 119
; 	}
;   NOP();
	nop
	.dbline 120
;   NOP();
	nop
	.dbline 121
;   }
L10:
	.dbline 122
L8:
	.dbline -2
L7:
	xcall pop_gset1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
_key::
	.blkb 1
	.dbsym e key _key c

⌨️ 快捷键说明

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