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

📄 m8demo.s

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 S
📖 第 1 页 / 共 4 页
字号:
	.module M8Demo.c
	.area data(ram, con, rel)
_out_eeprom_addr::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbsym e out_eeprom_addr _out_eeprom_addr c
_in_eeprom_addr::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbsym e in_eeprom_addr _in_eeprom_addr c
_adc_value::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbsym e adc_value _adc_value i
_AT45DB021_addr::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbsym e AT45DB021_addr _AT45DB021_addr c
_Display_Position::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbsym e Display_Position _Display_Position c
	.area lit(rom, con, rel)
_DataTab::
	.byte 192,249
	.byte 164,176
	.byte 153,146
	.byte 130,248
	.byte 128,144
	.byte 136,131
	.byte 198,161
	.byte 134,142
	.dbsym e DataTab _DataTab A[16:16]kc
	.area text(rom, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbfunc e Delay _Delay fV
;     delay_time -> R16,R17
	.even
_Delay::
	.dbline -1
	.dbline 37
; //ICC-AVR application builder : 2003-11-10 10:04:46
; // Target : M8
; // Crystal: 7.3728Mhz
; #include <iom8v.h>
; #include <macros.h>
; #include "M8Demo.h"
; #include"I2C.H"
; #include "Eeprom.h"
; #include "AT45DB021.h"
; #include "Uart.h"
; #include "assembly.h"
; unsigned int  DelayTimer;
; unsigned int  TimerCount;
; unsigned int  TimerCountOld;
; unsigned int  key_tick;
; unsigned char key_state;
; unsigned char key_value;
; unsigned char  key_pressed;
; unsigned char mode_state;
; 
; unsigned  char *OutPutStr;
; unsigned char out_eeprom_data;
; unsigned char  out_eeprom_addr=0;
; unsigned char in_eeprom_data;
; unsigned char  in_eeprom_addr=0;
; unsigned int    adc_value=0;
; unsigned char  AT45DB021_data;
; unsigned char  AT45DB021_addr=0;
; unsigned char  Display_Position=0;
; 
; const char DataTab[16]=
; 	{0xc0,0xf9,0xa4,0xb0,0x99,0x92,
; 	  0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8E};
; 
; 
; void Delay(unsigned int delay_time)
; {
	rjmp L3
L2:
	.dbline 39
	subi R16,1
	sbci R17,0
L3:
	.dbline 38
; while(delay_time)
	cpi R16,0
	cpc R16,R17
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r delay_time 16 i
	.dbend
	.dbfunc e Delayms _Delayms fV
;         timers -> R16,R17
	.even
_Delayms::
	.dbline -1
	.dbline 43
; delay_time--;
; }
; 
; void Delayms(unsigned int timers)
; { 
	.dbline 44
; DelayTimer=0;
	clr R2
	clr R3
	sts _DelayTimer+1,R3
	sts _DelayTimer,R2
	rjmp L7
L6:
	.dbline 46
; while(1)
; {if(DelayTimer>timers)
	.dbline 46
	lds R2,_DelayTimer
	lds R3,_DelayTimer+1
	cp R16,R2
	cpc R17,R3
	brsh L9
	.dbline 47
; return;
	rjmp L5
L9:
	.dbline 48
L7:
	.dbline 45
	rjmp L6
X1:
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbsym r timers 16 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 52
; }
; }
; 
; void port_init(void)
; {
	.dbline 53
;  PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 54
;  DDRB  = 0xFF;
	out 0x17,R24
	.dbline 55
;  PORTC = 0x7F; //m103 output only
	ldi R24,127
	out 0x15,R24
	.dbline 56
;  DDRC  = 0x79;
	ldi R24,121
	out 0x14,R24
	.dbline 57
;  PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 58
;  DDRD  = 0xFC;
	ldi R24,252
	out 0x11,R24
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 66
; }
; 
; //TIMER0 initialisation - prescale:1024
; // WGM: Normal
; // desired value: 10mSec
; // actual value: 10.000mSec (0.0%)
; void timer0_init(void)
; {
	.dbline 67
;   TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 68
;  TCNT0 = 0x8D; //set count
	ldi R24,141
	out 0x32,R24
	.dbline 69
;  TCCR0 = 0x03; //start timer
	ldi R24,3
	out 0x33,R24
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	rcall push_lset
	rcall push_gset1
	.dbline -1
	.dbline 75
;  
; }
; 
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 76
;  TCNT0 = 0x8D; //reload counter value
	ldi R24,141
	out 0x32,R24
	.dbline 79
;  // TCNT0 = 0xA4; //reload counter value
; 
;   DelayTimer++;
	lds R24,_DelayTimer
	lds R25,_DelayTimer+1
	adiw R24,1
	sts _DelayTimer+1,R25
	sts _DelayTimer,R24
	.dbline 80
;   key_tick++;
	lds R24,_key_tick
	lds R25,_key_tick+1
	adiw R24,1
	sts _key_tick+1,R25
	sts _key_tick,R24
	.dbline 81
;     Display_Position++;
	lds R24,_Display_Position
	subi R24,255    ; addi 1
	sts _Display_Position,R24
	.dbline 82
;  if(Display_Position>=5)
	cpi R24,5
	brlo L14
	.dbline 83
;  	Display_Position=1;
	ldi R24,1
	sts _Display_Position,R24
L14:
	.dbline 85
; 
;    switch(mode_state)
	lds R20,_mode_state
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L19
X2:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L20
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L20
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L20
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	breq L21
	cpi R20,5
	ldi R30,0
	cpc R21,R30
	breq L21
	cpi R20,6
	ldi R30,0
	cpc R21,R30
	breq L21
	cpi R20,7
	ldi R30,0
	cpc R21,R30
	breq L22
	cpi R20,8
	ldi R30,0
	cpc R21,R30
	breq L23
	cpi R20,9
	ldi R30,0
	cpc R21,R30
	breq L23
	rjmp L17
X3:
	.dbline 86
;  	 	       	{
L19:
	.dbline 87
;  	 	       	  case clock_mode: DisplayTimer(TimerCount);break;
	lds R16,_TimerCount
	lds R17,_TimerCount+1
	rcall _DisplayTimer
	.dbline 87
	rjmp L17
L20:
	.dbline 90
;  	 	                case out_eeprom_addr_modify_mode:
;  	 	                case out_eeprom_data_modify_mode:
;  	 	                case out_eeprom_read_mode:DisplayHexData(out_eeprom_addr,out_eeprom_data);break;
	lds R18,_out_eeprom_data
	lds R16,_out_eeprom_addr
	rcall _DisplayHexData
	.dbline 90
	rjmp L17
L21:
	.dbline 93
;  	 	                case in_eeprom_addr_modify_mode:
;  	 	                case in_eeprom_data_modify_mode:
;  	 	                case in_eeprom_read_mode:DisplayHexData(in_eeprom_addr,in_eeprom_data);break;
	lds R18,_in_eeprom_data
	lds R16,_in_eeprom_addr
	rcall _DisplayHexData
	.dbline 93
	rjmp L17
L22:
	.dbline 94
;  	 	                case adc_mode:DisplayData( adc_value);break;
	lds R16,_adc_value
	lds R17,_adc_value+1
	rcall _DisplayData
	.dbline 94
	rjmp L17
L23:
	.dbline 96
	lds R18,_AT45DB021_data
	lds R16,_AT45DB021_addr
	rcall _DisplayHexData
	.dbline 96
	.dbline 97
L17:
	.dbline -2
L13:
	rcall pop_gset1
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 107
;  	 	                case AT45DB021_addr_modify_mode:
; 				  case AT45DB021_data_modify_mode:DisplayHexData(AT45DB021_addr,AT45DB021_data);break;
;                               default :break;
;  	 	       	}
; 
; }
; 
; //TIMER1 initialisation - prescale:256
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1Sec
; // actual value:  1.000Sec (0.0%)
; void timer1_init(void)
; {
	.dbline 108
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 109
;  TCNT1H = 0x8F; //setup
	ldi R24,143
	out 0x2d,R24
	.dbline 110
;  TCNT1L = 0x80;
	ldi R24,128
	out 0x2c,R24
	.dbline 111
;  OCR1AH = 0x70;
	ldi R24,112
	out 0x2b,R24
	.dbline 112
;  OCR1AL = 0x80;
	ldi R24,128
	out 0x2a,R24
	.dbline 113
;  OCR1BH = 0x70;
	ldi R24,112
	out 0x29,R24
	.dbline 114
;  OCR1BL = 0x80;
	ldi R24,128
	out 0x28,R24
	.dbline 115
;  ICR1H  = 0x70;
	ldi R24,112
	out 0x27,R24
	.dbline 116
;  ICR1L  = 0x80;
	ldi R24,128
	out 0x26,R24
	.dbline 117
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 118
;  TCCR1B = 0x04; //start Timer
	ldi R24,4
	out 0x2e,R24
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 16
	rjmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	st -y,R30
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 123
	.dbline 125
	ldi R24,143
	out 0x2d,R24
	.dbline 126
	ldi R24,128
	out 0x2c,R24
	.dbline 127
	lds R24,_TimerCount
	lds R25,_TimerCount+1
	adiw R24,1
	sts _TimerCount+1,R25
	sts _TimerCount,R24
	.dbline 128
	cpi R24,16
	ldi R30,14
	cpc R25,R30
	brne L26
	.dbline 129
	clr R2
	clr R3
	sts _TimerCount+1,R3
	sts _TimerCount,R2
L26:
	.dbline -2
L25:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e spi_init _spi_init fV
	.even
_spi_init::
	.dbline -1
	.dbline 134
; }
; 
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
;  //TIMER1 has overflowed
;  TCNT1H = 0x8F; //reload counter high value
;  TCNT1L = 0x80; //reload counter low value
;   TimerCount++;
; if(TimerCount==3600)
; 	TimerCount=0;
; }
; 
; 
; void spi_init(void)
; {
	.dbline 135
;  SPCR = 0x70; //setup SPI
	ldi R24,112
	out 0xd,R24
	.dbline 136
;  SPSR = 0x00; //setup SPI
	clr R2
	out 0xe,R2
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_init _twi_init fV
	.even
_twi_init::
	.dbline -1
	.dbline 142
; }
; 
; //TWI initialisation
; // bit rate:1
; void twi_init(void)
; {
	.dbline 143
;  TWCR= 0X00; //disable twi
	clr R2
	out 0x36,R2
	.dbline 144
;  TWBR= 0x01; //set bit rate
	ldi R24,1
	out 0x0,R24
	.dbline 145
;  TWSR= 0x00; //set prescale
	out 0x1,R2
	.dbline 146
;  TWAR= 0x02; //set slave address
	ldi R24,2
	out 0x2,R24
	.dbline 147
;  TWCR= 0x44; //enable twi
	ldi R24,68
	out 0x36,R24
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_Enable _twi_Enable fV
	.even
_twi_Enable::
	.dbline -1
	.dbline 151
; }
; 
; void twi_Enable(void)
; {
	.dbline 152
;  TWCR= 0x44; //enable twi
	ldi R24,68
	out 0x36,R24
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_Disable _twi_Disable fV
	.even
_twi_Disable::
	.dbline -1
	.dbline 155
; }
; void twi_Disable(void)
; {
	.dbline 156
;  TWCR= 0x00; //enable twi
	clr R2
	out 0x36,R2
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 163
; }
; 
; 
; //ADC initialisation
; // Conversion time: 208uS
; void adc_init(void)
; {
	.dbline 164
;  ADCSR = 0x00; //disable adc
	clr R2
	out 0x6,R2
	.dbline 165
;  ADMUX = 0x00; //select adc input 0
	out 0x7,R2
	.dbline 166
;  ACSR  = 0x00;
	out 0x8,R2
	.dbline 167
;  ADCSR = 0xc8;
	ldi R24,200
	out 0x6,R24
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_Enable _adc_Enable fV
	.even
_adc_Enable::
	.dbline -1
	.dbline 170
;  }
; void adc_Enable(void)
; {
	.dbline 171
; DDRC&=0xFE;
	in R24,0x14
	andi R24,254
	out 0x14,R24
	.dbline 172
; PORTC&=0xFE;
	in R24,0x15
	andi R24,254
	out 0x15,R24
	.dbline 173
; ADCSR = 0xC8;
	ldi R24,200
	out 0x6,R24
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_Disable _adc_Disable fV
	.even
_adc_Disable::
	.dbline -1
	.dbline 176
;  }
; void adc_Disable(void)
; {//DDRC|=0x01;
	.dbline 178
; //PORTC|=0x01;
;  ADCSR = 0x00;
	clr R2
	out 0x6,R2
	.dbline -2
L34:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 28
	rjmp _adc_isr
	.area text(rom, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 182
;  }
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
	.dbline 184
;  //conversion complete, read value (int) using...
;   adc_value=ADCL;            //Read 8 low bits first (important)
	in R2,0x4
	clr R3
	sts _adc_value+1,R3
	sts _adc_value,R2
	.dbline 185
;   adc_value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
	in R2,0x5
	clr R3
	mov R3,R2
	clr R2
	lds R4,_adc_value
	lds R5,_adc_value+1
	or R4,R2
	or R5,R3
	sts _adc_value+1,R5
	sts _adc_value,R4
	.dbline 186
;   ADCSR = 0x00;
	clr R2
	out 0x6,R2
	.dbline 187
;   ADCSR = 0xC8;
	ldi R24,200
	out 0x6,R24

⌨️ 快捷键说明

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