⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.s

📁 mega16 spi主从通信 测试通过(ICC)
💻 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 + -