📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 7
; //再放上SPI从机通信程序
; #include "iom16v.h"
; #include "macros.h"
; #define uchar unsigned char
; #define uint unsigned int
; void uart0_init(void)
; {
.dbline 8
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 9
; UCSRA = 0x00;
out 0xb,R2
.dbline 10
; UCSRC = 0x0B;//
ldi R24,11
out 0x20,R24
.dbline 11
; UBRRL = 0x2F; //set baud rate lo
ldi R24,47
out 0x9,R24
.dbline 12
; UBRRH = 0x00; //set baud rate hi fosc=7372800HZ,Baud=115200
out 0x20,R2
.dbline 13
; UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
ldi R24,216
out 0xa,R24
.dbline -2
.dbline 14
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Uart0Send _Uart0Send fV
; CData -> R16
.even
_Uart0Send::
.dbline -1
.dbline 16
; void Uart0Send(uchar CData)
; {
L3:
.dbline 17
L4:
.dbline 17
; while(!(UCSRA&0x20));
sbis 0xb,5
rjmp L3
.dbline 18
; UDR = CData;
out 0xc,R16
.dbline -2
.dbline 19
; }
L2:
.dbline 0 ; func end
ret
.dbsym r CData 16 c
.dbend
.dbfunc e SPISlaveInit _SPISlaveInit fV
.even
_SPISlaveInit::
.dbline -1
.dbline 32
; #define DDR_MISO 6
; #define DDR_MOSI 5
; #define DDR_SCK 7
; #define DDR_SS 4
; #define DDR_SPI DDRB
; /*-----------------------------------------------------------------
; 函数名称: void SPISlaveInit(void)
; 函数功能: SPI从机初始化
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void SPISlaveInit(void)
; {
.dbline 33
; DDR_SPI &=~((1<<DDR_SCK)|(1<<DDR_MOSI));
in R24,0x17
andi R24,95
out 0x17,R24
.dbline 34
; DDR_SPI |= (1<<DDR_MISO);
sbi 0x17,6
.dbline 35
; SPCR = (1<<SPIE)|(1<<SPE)|(1<<SPR1)|(1<<SPR0);//使能接收中断|(1<<CPOL)|(1<<CPHA)
ldi R24,195
out 0xd,R24
.dbline -2
.dbline 36
; }
L6:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 40
jmp _spi_stc_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
.dbfunc e spi_stc_isr _spi_stc_isr fV
.even
_spi_stc_isr::
st -y,R2
in R2,0x3f
st -y,R2
.dbline -1
.dbline 39
; #pragma interrupt_handler spi_stc_isr:11
; void spi_stc_isr(void)
; {
.dbline 42
; //byte in SPDR has been sent/received
;
; UDR = SPDR;
in R2,0xf
out 0xc,R2
.dbline -2
.dbline 43
; }
L7:
ld R2,y+
out 0x3f,R2
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e SPISlaveRead1Byte _SPISlaveRead1Byte fc
.even
_SPISlaveRead1Byte::
.dbline -1
.dbline 52
;
; /*-----------------------------------------------------------------
; 函数名称: void SPIMasterTransmit(unsigned char i)
; 函数功能: SPI数据发送
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; uchar SPISlaveRead1Byte(void)
; {
L9:
.dbline 53
L10:
.dbline 53
; while (!(SPSR & (1<<SPIF))); // 等待传输结束
sbis 0xe,7
rjmp L9
.dbline 54
; return SPDR;
in R16,0xf
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DeviceInit _DeviceInit fV
.even
_DeviceInit::
.dbline -1
.dbline 57
; }
; void DeviceInit(void)
; {
.dbline 58
; CLI();
cli
.dbline 59
; uart0_init();
xcall _uart0_init
.dbline 60
; SPISlaveInit();
xcall _SPISlaveInit
.dbline 61
; MCUCR = 0;
clr R2
out 0x35,R2
.dbline 62
; TIMSK = 0;
out 0x39,R2
.dbline 63
; GICR = 0;
out 0x3b,R2
.dbline 64
; SEI();
sei
.dbline -2
.dbline 65
; }
L12:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; temp -> <dead>
.even
_main::
.dbline -1
.dbline 67
; void main(void)
; {
.dbline 69
; uchar temp;
; DDR_SPI &=~(1<<DDR_SS);
cbi 0x17,4
.dbline 70
; DeviceInit();
xcall _DeviceInit
L14:
.dbline 72
.dbline 75
.dbline 77
L15:
.dbline 71
xjmp L14
X0:
.dbline -2
.dbline 78
; while(1)
; {
;
; //UDR = SPISlaveRead1Byte();
; ;
; //Uart0Send(temp);
; }
; }
L13:
.dbline 0 ; func end
ret
.dbsym l temp 1 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -