📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\AVR\ISD1700_ISP\src\main.c
.area data(ram, con, rel)
.dbfile E:\AVR\ISD1700_ISP\src\main.c
_iProgRunCount::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\AVR\ISD1700_ISP\src\main.c
.dbsym e iProgRunCount _iProgRunCount i
_soundTime::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\AVR\ISD1700_ISP\src\main.c
.dbsym e soundTime _soundTime i
.area text(rom, con, rel)
.dbfile E:\AVR\ISD1700_ISP\src\main.c
.dbfunc e Port_Init _Port_Init fV
.even
_Port_Init::
.dbline -1
.dbline 13
; #include <iom64v.h>
; #include <macros.h>
; #include <string.h>
; #include "timer.h"
; #include "main.h"
;
; unsigned int iProgRunCount=0;
; unsigned int soundTime=0;
; unsigned char data1,data2,data3,data4;
;
; // 端口初始化函数
; void Port_Init(void)
; {
.dbline 14
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 15
; DDRA = 0x00;
out 0x1a,R2
.dbline 16
; PORTB = 0x01;
ldi R24,1
out 0x18,R24
.dbline 17
; DDRB = 0xE7;
ldi R24,231
out 0x17,R24
.dbline 18
; PORTC = 0x00;
out 0x15,R2
.dbline 19
; DDRC = 0x00;
out 0x14,R2
.dbline 20
; PORTD = 0x00;
out 0x12,R2
.dbline 21
; DDRD = 0xC0;
ldi R24,192
out 0x11,R24
.dbline 22
; PORTE = 0x00;
out 0x3,R2
.dbline 23
; DDRE = 0x00;
out 0x2,R2
.dbline 24
; PORTF = 0x00;
sts 98,R2
.dbline 25
; DDRF = 0x00;
sts 97,R2
.dbline 26
; PORTG = 0x00;
sts 101,R2
.dbline 27
; DDRG = 0x00;
sts 100,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 33
; }
;
; //SPI initialize
; // clock rate: 1000000hz
; void spi_init(void)
; {
.dbline 35
; //int i;
; SPCR = 0x7e; //setup SPI
ldi R24,126
out 0xd,R24
.dbline 36
; SPSR = 0x00; //setup SPI
clr R2
out 0xe,R2
.dbline 37
; PORTB |= (1<<PB0); //SS=1
sbi 0x18,0
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 42
; }
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 45
; //unsigned char temp=0;
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 46
; XDIV = 0x00; //xtal divider
clr R2
out 0x3c,R2
.dbline 47
; XMCRA = 0x40; //external memory
ldi R24,64
sts 109,R24
.dbline 48
; Port_Init();
xcall _Port_Init
.dbline 49
; watchdog_init();
xcall _watchdog_init
.dbline 50
; timer1_init();
xcall _timer1_init
.dbline 51
; spi_init();
xcall _spi_init
.dbline 53
;
; MCUCR = (1 << SRE); //0x80,外部存储使能
ldi R24,128
out 0x35,R24
.dbline 56
; //EICRA:外部中断3-0敏感电平控制BIT7--0:ISC31|ISC30......ISC01|ISC00
; //ISCn1|ISCn0:00-低电平触发,01-保留,10-下降沿触发,11-上升沿触发
; EICRA = 0x02;
ldi R24,2
sts 106,R24
.dbline 59
; //EICRB:外部中断7-4敏感电平控制BIT7--0:ISC71|ISC70......ISC41|ISC40
; //ISCn1|ISCn0:00-低电平触发,01-任意逻辑电平变化,10-两次采用发生下降沿就触发,11-两次采用发生上升沿就触发
; EICRB = 0x00;
clr R2
out 0x3a,R2
.dbline 60
; EIMSK = 0x01; //外部中断屏蔽寄存器BIT7--0:INT7--INT0,1使能0关闭
ldi R24,1
out 0x39,R24
.dbline 62
; //TIMSK:定时器中断屏蔽寄存器BIT7--0:OCIE2|TOIE2|TICIE1|OCIE1A|OCIE1B|TOIE1|OCIE0|TOIE0
; TIMSK = (1 << TOIE1); //0x04
ldi R24,4
out 0x37,R24
.dbline 64
; //ETIMSK:扩展定时器中断屏蔽寄存器BIT7--0:--|--|TICIE3|OCIE3A|OCIE3B|TOIE3|OCIE3C|OCIE1C
; ETIMSK = 0x00; //(1<<TOIE3); //0x04
sts 125,R2
.dbline 65
; SEI(); //re-enable interrupts
sei
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e isd1700_init _isd1700_init fV
; i -> R16,R17
.even
_isd1700_init::
.dbline -1
.dbline 70
; //all peripherals are now initialised
; }
;
; void isd1700_init(void)
; {
.dbline 72
; int i;
; for(i=0;i<=100;i++);
clr R16
clr R17
L5:
.dbline 72
L6:
.dbline 72
subi R16,255 ; offset = 1
sbci R17,255
.dbline 72
ldi R24,100
ldi R25,0
cp R24,R16
cpc R25,R17
brge L5
X0:
.dbline 74
; //芯片上电
; PORTB &= ~(1<<PB0); //SS=0
cbi 0x18,0
.dbline 75
; for(i=0;i<100;i++)
clr R16
clr R17
L9:
.dbline 76
; ;
L10:
.dbline 75
subi R16,255 ; offset = 1
sbci R17,255
.dbline 75
cpi R16,100
ldi R30,0
cpc R17,R30
brlt L9
X1:
.dbline 77
; SPDR = 0x10+0x01;
ldi R24,17
out 0xf,R24
L13:
.dbline 79
; while (!(SPSR &(1 << SPIF)))
; ;
L14:
.dbline 78
sbis 0xe,7
rjmp L13
X2:
.dbline 80
; SPDR = 0x00;
clr R2
out 0xf,R2
L16:
.dbline 82
; while (!(SPSR &(1 << SPIF)))
; ;
L17:
.dbline 81
sbis 0xe,7
rjmp L16
X3:
.dbline 83
; for(i=0;i<100;i++)
clr R16
clr R17
L19:
.dbline 84
; ;
L20:
.dbline 83
subi R16,255 ; offset = 1
sbci R17,255
.dbline 83
cpi R16,100
ldi R30,0
cpc R17,R30
brlt L19
X4:
.dbline 85
; PORTB |= (1<<PB0); //SS=1
sbi 0x18,0
.dbline 86
; for(i=0;i<=100;i++);
clr R16
clr R17
L23:
.dbline 86
L24:
.dbline 86
subi R16,255 ; offset = 1
sbci R17,255
.dbline 86
ldi R24,100
ldi R25,0
cp R24,R16
cpc R25,R17
brge L23
X5:
.dbline 88
; //设置APC寄存器
; PORTB &= ~(1<<PB0); //SS=0
cbi 0x18,0
.dbline 89
; for(i=0;i<100;i++)
clr R16
clr R17
L27:
.dbline 90
; ;
L28:
.dbline 89
subi R16,255 ; offset = 1
sbci R17,255
.dbline 89
cpi R16,100
ldi R30,0
cpc R17,R30
brlt L27
X6:
.dbline 91
; SPDR = 0x10+0x45;
ldi R24,85
out 0xf,R24
L31:
.dbline 93
; while (!(SPSR &(1 << SPIF)))
; ;
L32:
.dbline 92
sbis 0xe,7
rjmp L31
X7:
.dbline 94
; SPDR = 0x40;
ldi R24,64
out 0xf,R24
L34:
.dbline 96
; while (!(SPSR &(1 << SPIF)))
; ;
L35:
.dbline 95
sbis 0xe,7
rjmp L34
X8:
.dbline 97
; SPDR = 0x0c;
ldi R24,12
out 0xf,R24
L37:
.dbline 99
; while (!(SPSR &(1 << SPIF)))
; ;
L38:
.dbline 98
sbis 0xe,7
rjmp L37
X9:
.dbline 100
; PORTB |= (1<<PB0); //SS=1
sbi 0x18,0
.dbline 101
; for(i=0;i<=100;i++);
clr R16
clr R17
L40:
.dbline 101
L41:
.dbline 101
subi R16,255 ; offset = 1
sbci R17,255
.dbline 101
ldi R24,100
ldi R25,0
cp R24,R16
cpc R25,R17
brge L40
X10:
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbsym r i 16 I
.dbend
.dbfunc e Read_APC _Read_APC fV
; i -> R16,R17
.even
_Read_APC::
.dbline -1
.dbline 105
; }
;
; void Read_APC(void)
; {
.dbline 107
; int i;
; PORTB &= ~(1<<PB0); //SS=0
cbi 0x18,0
.dbline 108
; for(i=0;i<100;i++)
clr R16
clr R17
L45:
.dbline 109
; ;
L46:
.dbline 108
subi R16,255 ; offset = 1
sbci R17,255
.dbline 108
cpi R16,100
ldi R30,0
cpc R17,R30
brlt L45
X11:
.dbline 110
; SPDR = 0x10+0x44;
ldi R24,84
out 0xf,R24
L49:
.dbline 112
; while (!(SPSR &(1 << SPIF)))
; ;
L50:
.dbline 111
sbis 0xe,7
rjmp L49
X12:
.dbline 113
; data1=SPDR;
in R2,0xf
sts _data1,R2
.dbline 114
; SPDR = 0x00;
clr R2
out 0xf,R2
L52:
.dbline 116
; while (!(SPSR &(1 << SPIF)))
; ;
L53:
.dbline 115
sbis 0xe,7
rjmp L52
X13:
.dbline 117
; data2=SPDR;
in R2,0xf
sts _data2,R2
.dbline 118
; SPDR = 0x00;
clr R2
out 0xf,R2
L55:
.dbline 120
; while (!(SPSR &(1 << SPIF)))
; ;
L56:
.dbline 119
sbis 0xe,7
rjmp L55
X14:
.dbline 121
; data3=SPDR;
in R2,0xf
sts _data3,R2
.dbline 122
; SPDR = 0x00;
clr R2
out 0xf,R2
L58:
.dbline 124
; while (!(SPSR &(1 << SPIF)))
; ;
L59:
.dbline 123
sbis 0xe,7
rjmp L58
X15:
.dbline 125
; data4=SPDR;
in R2,0xf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -