📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
0000 .dbfunc e uart0_init _uart0_init fV
.even
0000 _uart0_init::
0000 .dbline -1
0000 .dbline 7
0000 ; //再放上SPI从机通信程序
0000 ; #include "iom16v.h"
0000 ; #include "macros.h"
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; void uart0_init(void)
0000 ; {
0000 .dbline 8
0000 ; UCSRB = 0x00; //disable while setting baud rate
0000 2224 clr R2
0002 2AB8 out 0xa,R2
0004 .dbline 9
0004 ; UCSRA = 0x00;
0004 2BB8 out 0xb,R2
0006 .dbline 10
0006 ; UCSRC = 0x0B;//
0006 8BE0 ldi R24,11
0008 80BD out 0x20,R24
000A .dbline 11
000A ; UBRRL = 0x2F; //set baud rate lo
000A 8FE2 ldi R24,47
000C 89B9 out 0x9,R24
000E .dbline 12
000E ; UBRRH = 0x00; //set baud rate hi fosc=7372800HZ,Baud=115200
000E 20BC out 0x20,R2
0010 .dbline 13
0010 ; UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
0010 88ED ldi R24,216
0012 8AB9 out 0xa,R24
0014 .dbline -2
0014 .dbline 14
0014 ; }
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e Uart0Send _Uart0Send fV
0016 ; CData -> R16
.even
0016 _Uart0Send::
0016 .dbline -1
0016 .dbline 16
0016 ; void Uart0Send(uchar CData)
0016 ; {
0016 L3:
0016 .dbline 17
0016 L4:
0016 .dbline 17
0016 ; while(!(UCSRA&0x20));
0016 5D9B sbis 0xb,5
0018 FECF rjmp L3
001A .dbline 18
001A ; UDR = CData;
001A 0CB9 out 0xc,R16
001C .dbline -2
001C .dbline 19
001C ; }
001C L2:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r CData 16 c
001E .dbend
001E .dbfunc e SPISlaveInit _SPISlaveInit fV
.even
001E _SPISlaveInit::
001E .dbline -1
001E .dbline 32
001E ; #define DDR_MISO 6
001E ; #define DDR_MOSI 5
001E ; #define DDR_SCK 7
001E ; #define DDR_SS 4
001E ; #define DDR_SPI DDRB
001E ; /*-----------------------------------------------------------------
001E ; 函数名称: void SPISlaveInit(void)
001E ; 函数功能: SPI从机初始化
001E ; 参 数:
001E ; 返 回 值: 无
001E ; -----------------------------------------------------------------*/
001E ; void SPISlaveInit(void)
001E ; {
001E .dbline 33
001E ; DDR_SPI &=~((1<<DDR_SCK)|(1<<DDR_MOSI));
001E 87B3 in R24,0x17
0020 8F75 andi R24,95
0022 87BB out 0x17,R24
0024 .dbline 34
0024 ; DDR_SPI |= (1<<DDR_MISO);
0024 BE9A sbi 0x17,6
0026 .dbline 35
0026 ; SPCR = (1<<SPIE)|(1<<SPE)|(1<<SPR1)|(1<<SPR0);//使能接收中断|(1<<CPOL)|(1<<CPHA)
0026 83EC ldi R24,195
0028 8DB9 out 0xd,R24
002A .dbline -2
002A .dbline 36
002A ; }
002A L6:
002A .dbline 0 ; func end
002A 0895 ret
002C .dbend
.area vector(rom, abs)
.org 40
0028 0C941600 jmp _spi_stc_isr
.area text(rom, con, rel)
002C .dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
002C .dbfunc e spi_stc_isr _spi_stc_isr fV
.even
002C _spi_stc_isr::
002C 2A92 st -y,R2
002E 2FB6 in R2,0x3f
0030 2A92 st -y,R2
0032 .dbline -1
0032 .dbline 39
0032 ; #pragma interrupt_handler spi_stc_isr:11
0032 ; void spi_stc_isr(void)
0032 ; {
0032 .dbline 42
0032 ; //byte in SPDR has been sent/received
0032 ;
0032 ; UDR = SPDR;
0032 2FB0 in R2,0xf
0034 2CB8 out 0xc,R2
0036 .dbline -2
0036 .dbline 43
0036 ; }
0036 L7:
0036 2990 ld R2,y+
0038 2FBE out 0x3f,R2
003A 2990 ld R2,y+
003C .dbline 0 ; func end
003C 1895 reti
003E .dbend
003E .dbfunc e SPISlaveRead1Byte _SPISlaveRead1Byte fc
.even
003E _SPISlaveRead1Byte::
003E .dbline -1
003E .dbline 52
003E ;
003E ; /*-----------------------------------------------------------------
003E ; 函数名称: void SPIMasterTransmit(unsigned char i)
003E ; 函数功能: SPI数据发送
003E ; 参 数:
003E ; 返 回 值: 无
003E ; -----------------------------------------------------------------*/
003E ; uchar SPISlaveRead1Byte(void)
003E ; {
003E L9:
003E .dbline 53
003E L10:
003E .dbline 53
003E ; while (!(SPSR & (1<<SPIF))); // 等待传输结束
003E 779B sbis 0xe,7
0040 FECF rjmp L9
0042 .dbline 54
0042 ; return SPDR;
0042 0FB1 in R16,0xf
0044 .dbline -2
0044 L8:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e DeviceInit _DeviceInit fV
.even
0046 _DeviceInit::
0046 .dbline -1
0046 .dbline 57
0046 ; }
0046 ; void DeviceInit(void)
0046 ; {
0046 .dbline 58
0046 ; CLI();
0046 F894 cli
0048 .dbline 59
0048 ; uart0_init();
0048 DBDF xcall _uart0_init
004A .dbline 60
004A ; SPISlaveInit();
004A E9DF xcall _SPISlaveInit
004C .dbline 61
004C ; MCUCR = 0;
004C 2224 clr R2
004E 25BE out 0x35,R2
0050 .dbline 62
0050 ; TIMSK = 0;
0050 29BE out 0x39,R2
0052 .dbline 63
0052 ; GICR = 0;
0052 2BBE out 0x3b,R2
0054 .dbline 64
0054 ; SEI();
0054 7894 sei
0056 .dbline -2
0056 .dbline 65
0056 ; }
0056 L12:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbend
0058 .dbfunc e main _main fV
0058 ; temp -> <dead>
.even
0058 _main::
0058 .dbline -1
0058 .dbline 67
0058 ; void main(void)
0058 ; {
0058 .dbline 69
0058 ; uchar temp;
0058 ; DDR_SPI &=~(1<<DDR_SS);
0058 BC98 cbi 0x17,4
005A .dbline 70
005A ; DeviceInit();
005A F5DF xcall _DeviceInit
005C L14:
005C .dbline 72
005C .dbline 75
005C .dbline 77
005C L15:
005C .dbline 71
005C FFCF xjmp L14
005E X0:
005E .dbline -2
005E .dbline 78
005E ; while(1)
005E ; {
005E ;
005E ; //UDR = SPISlaveRead1Byte();
005E ; ;
005E ; //Uart0Send(temp);
005E ; }
005E ; }
005E L13:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbsym l temp 1 c
0060 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -