📄 master.s
字号:
.module master.c
.area text(rom, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
.area data(ram, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
_k::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
.dbsym e k _k c
.area text(rom, con, rel)
.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
.dbfunc e delay _delay fV
; i -> R10,R11
; j -> R12,R13
; z -> R16,R17
.even
_delay::
xcall push_xgset003C
.dbline -1
.dbline 20
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
;
;
;
;
; /*------宏定义------*/
; #define uchar unsigned char
; #define uint unsigned int
;
; uchar k=1;
;
; /*------函数定义------*/
; //SPI函数
; void spi_write(uchar sData);
; uchar spi_read(void);
;
; void delay(uint z)
; {
.dbline 22
; uint i,j;
; for(i=0;i<z;i++)
clr R10
clr R11
xjmp L5
L2:
.dbline 23
; for(j=0;j<1000;j++);
clr R12
clr R13
xjmp L9
L6:
.dbline 23
L7:
.dbline 23
movw R24,R12
adiw R24,1
movw R12,R24
L9:
.dbline 23
movw R24,R12
cpi R24,232
ldi R30,3
cpc R25,R30
brlo L6
X0:
L3:
.dbline 22
movw R24,R10
adiw R24,1
movw R10,R24
L5:
.dbline 22
cp R10,R16
cpc R11,R17
brlo L2
X1:
.dbline -2
L1:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym r i 10 i
.dbsym r j 12 i
.dbsym r z 16 i
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 29
; }
;
;
; //端口初始化
; void port_init(void)
; {
.dbline 30
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 31
; DDRA = 0x00;
out 0x1a,R2
.dbline 32
; PORTB = 0x00;
out 0x18,R2
.dbline 33
; DDRB = 0x00;
out 0x17,R2
.dbline 34
; PORTC = 0x00;
out 0x15,R2
.dbline 35
; DDRC = 0x00;
out 0x14,R2
.dbline 36
; PORTD = 0x00;
out 0x12,R2
.dbline 37
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 42
; }
;
;
; void spi_init(void)
; {
.dbline 44
; //spi初始化
; PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
in R24,0x18
ori R24,240
out 0x18,R24
.dbline 45
; DDRB|=BIT(PB7)|BIT(PB5)|BIT(PB4);
in R24,0x17
ori R24,176
out 0x17,R24
.dbline 46
; SPCR = 0x50;
ldi R24,80
out 0xd,R24
.dbline 47
; SPSR = 0x00;
clr R2
out 0xe,R2
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_write _spi_write fV
; sData -> R16
.even
_spi_write::
.dbline -1
.dbline 53
; }
;
;
; //功能:使用SPI发送一个字节
; void spi_write(uchar sData)
; {
.dbline 55
;
; SPDR = sData;
out 0xf,R16
L13:
.dbline 56
; while(!(SPSR & BIT(SPIF)));
L14:
.dbline 56
sbis 0xe,7
rjmp L13
X2:
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r sData 16 c
.dbend
.dbfunc e spi_read _spi_read fc
.even
_spi_read::
.dbline -1
.dbline 63
; //sData=SPDR;//读从机发回来的数据
; }
;
;
; //功能:使用SPI接收一个字节
; uchar spi_read(void)
; {
.dbline 64
; SPDR = 0x00;
clr R2
out 0xf,R2
L17:
.dbline 65
; while(!(SPSR & BIT(SPIF)));
L18:
.dbline 65
sbis 0xe,7
rjmp L17
X3:
.dbline 66
; return SPDR;
in R16,0xf
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 71
; }
;
;
; void init_devices(void)
; {
.dbline 72
; CLI(); //禁止所有中断
cli
.dbline 73
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 74
; MCUCSR = 0x80;//禁止JTAG
ldi R24,128
out 0x34,R24
.dbline 75
; GICR = 0x00;
out 0x3b,R2
.dbline 76
; port_init();
xcall _port_init
.dbline 77
; spi_init();
xcall _spi_init
.dbline 78
; SEI();//开全局中断
sei
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; a -> R10,R11
.even
_main::
.dbline -1
.dbline 82
; }
; //主函数
; void main(void)
; {
.dbline 83
; uint a=1000;
ldi R24,1000
ldi R25,3
movw R10,R24
.dbline 84
; init_devices();
xcall _init_devices
L22:
.dbline 86
; //在这继续添加你的代码
; do{
.dbline 87
; PORTB&=~BIT(PB4);
cbi 0x18,4
.dbline 88
; spi_write(k*25);
lds R2,_k
ldi R24,25
mul R24,R2
mov R16,R0
xcall _spi_write
.dbline 89
; PORTB|=BIT(PB4);
sbi 0x18,4
.dbline 90
; delay(100);
ldi R16,100
ldi R17,0
xcall _delay
.dbline 91
; k++;
lds R24,_k
subi R24,255 ; addi 1
sts _k,R24
.dbline 92
; }
L23:
.dbline 93
; while(!(spi_read()==255));
xcall _spi_read
cpi R16,255
brne L22
X4:
L25:
.dbline 95
; while(1)
; {
.dbline 96
; ;
.dbline 97
; }
L26:
.dbline 94
xjmp L25
X5:
.dbline -2
L21:
.dbline 0 ; func end
ret
.dbsym r a 10 i
.dbend
; }
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -