📄 m8demo.s
字号:
.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 + -