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

📄 master.s

📁 用两片AVR(ATmega16)单片机
💻 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 + -