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

📄 salve.s

📁 用两片AVR(ATmega16)单片机 实现双机通信(双向
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall mod16u
	movw R2,R16
	movw R16,R10
	sub R16,R2
	sbc R17,R3
	ldi R18,10
	ldi R19,0
	xcall div16u
	movw R10,R16
	.dbline 124
;                 i--; 
	dec R12
	.dbline 125
;                 }while(number>=1); 
L27:
	.dbline 125
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brsh L26
X7:
	.dbline 126
;         } 
L25:
	.dbline -2
L23:
	.dbline 0 ; func end
	xjmp pop_xgset003C
	.dbsym r i 12 c
	.dbsym r number 10 i
	.dbend
	.dbfunc e SEG_R _SEG_R fV
;              i -> R12
;         number -> R10,R11
	.even
_SEG_R::
	xcall push_xgset003C
	movw R10,R16
	.dbline -1
	.dbline 132
; } 
; //===================================== 
; 
; //=============SEG右四显示数字============== 
; void SEG_R(unsigned int number) 
; { 
	.dbline 133
; unsigned char i=8; 
	ldi R24,8
	mov R12,R24
	.dbline 135
; 
; SEND(0x05,0x0f); //先清除右四位,右四位黑屏 
	ldi R18,15
	ldi R16,5
	xcall _SEND
	.dbline 136
; SEND(0x06,0x0f);  
	ldi R18,15
	ldi R16,6
	xcall _SEND
	.dbline 137
; SEND(0x07,0x0f);  
	ldi R18,15
	ldi R16,7
	xcall _SEND
	.dbline 138
; SEND(0x08,0x0f); 
	ldi R18,15
	ldi R16,8
	xcall _SEND
	.dbline 140
; 
; if(number>9999)//要显示的数值超过4位,则显示4个H 
	ldi R24,9999
	ldi R25,39
	cp R24,R10
	cpc R25,R11
	brsh L30
X8:
	.dbline 141
;         { 
	.dbline 142
;         SEND(0x05,0x0c);  
	ldi R18,12
	ldi R16,5
	xcall _SEND
	.dbline 143
;         SEND(0x06,0x0c);  
	ldi R18,12
	ldi R16,6
	xcall _SEND
	.dbline 144
;         SEND(0x07,0x0c);  
	ldi R18,12
	ldi R16,7
	xcall _SEND
	.dbline 145
;         SEND(0x08,0x0c); 
	ldi R18,12
	ldi R16,8
	xcall _SEND
	.dbline 146
;         } 
	xjmp L31
L30:
	.dbline 148
; else//小于四位可以显示 
;         {
L32:
	.dbline 156
; /*			for(i=8;i>4;i--)
; 		 {
; 		  SEND(i,number%10);
; 		  number=(number-number%10)/10; 
; 		 }  */ 
; 	
;         do 
;                 { 
	.dbline 157
;                 SEND(i,number%10); 
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall mod16u
	mov R18,R16
	mov R16,R12
	xcall _SEND
	.dbline 158
;                 number=(number-number%10)/10; 
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall mod16u
	movw R2,R16
	movw R16,R10
	sub R16,R2
	sbc R17,R3
	ldi R18,10
	ldi R19,0
	xcall div16u
	movw R10,R16
	.dbline 159
; 				i--;
	dec R12
	.dbline 160
;                 }while(number>=1);  
L33:
	.dbline 160
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brsh L32
X9:
	.dbline 161
;         } 
L31:
	.dbline -2
L29:
	.dbline 0 ; func end
	xjmp pop_xgset003C
	.dbsym r i 12 c
	.dbsym r number 10 i
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\display.c
_k::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\display.c
	.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\salve.c
	.dbsym e k _k c
	.area text(rom, con, rel)
	.dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\salve.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>
; #include "display.c"
; 
; 
; 
; /*------宏定义------*/
; #define uchar	unsigned char
; #define uint	unsigned int
; 
; uchar k=0;
; 
; /*------函数定义------*/
; //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 L39
L36:
	.dbline 23
;   for(j=0;j<1000;j++);
	clr R12
	clr R13
	xjmp L43
L40:
	.dbline 23
L41:
	.dbline 23
	movw R24,R12
	adiw R24,1
	movw R12,R24
L43:
	.dbline 23
	movw R24,R12
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brlo L40
X10:
L37:
	.dbline 22
	movw R24,R10
	adiw R24,1
	movw R10,R24
L39:
	.dbline 22
	cp R10,R16
	cpc R11,R17
	brlo L36
X11:
	.dbline -2
L35:
	.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
L44:
	.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初始化
;  DDRB|=BIT(PB6);
	sbi 0x17,6
	.dbline 45
;  SPCR = 0x40;
	ldi R24,64
	out 0xd,R24
	.dbline 46
;  SPSR = 0x00;
	clr R2
	out 0xe,R2
	.dbline -2
L45:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e spi_write _spi_write fV
;          sData -> R16
	.even
_spi_write::
	.dbline -1
	.dbline 52
; }
; 
; 
; //功能:使用SPI发送一个字节
; void spi_write(uchar sData)
; {
	.dbline 53
;  SPDR = sData;
	out 0xf,R16
L47:
	.dbline 54
;  while(!(SPSR & BIT(SPIF)));
L48:
	.dbline 54
	sbis 0xe,7
	rjmp L47
X12:
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbsym r sData 16 c
	.dbend
	.dbfunc e spi_read _spi_read fc
	.even
_spi_read::
	.dbline -1
	.dbline 61
;  //sData=SPDR;//读从机发回来的数据
; }
; 
; 
; //功能:使用SPI接收一个字节
; uchar spi_read(void)
; {
	.dbline 62
;  SPDR = 0x00;
	clr R2
	out 0xf,R2
L51:
	.dbline 63
;  while(!(SPSR & BIT(SPIF)));
L52:
	.dbline 63
	sbis 0xe,7
	rjmp L51
X13:
	.dbline 64
;  k++;
	lds R24,_k
	subi R24,255    ; addi 1
	sts _k,R24
	.dbline 65
;  return SPDR;
	in R16,0xf
	.dbline -2
L50:
	.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
L54:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 82
; }
; //主函数
; void main(void)
; {
	.dbline 83
;  init_devices();
	xcall _init_devices
	.dbline 84
;  SEG_INIT();
	xcall _SEG_INIT
	.dbline 85
;  delay(100); 
	ldi R16,100
	ldi R17,0
	xcall _delay
	xjmp L57
L56:
	.dbline 87
;  while(!(k==8))
;  {
	.dbline 88
;      SEG_R(spi_read());
	xcall _spi_read
	clr R17
	xcall _SEG_R
	.dbline 89
; 	   delay(100); 
	ldi R16,100
	ldi R17,0
	xcall _delay
	.dbline 90
; 	 SEG_L(spi_read());
	xcall _spi_read
	clr R17
	xcall _SEG_L
	.dbline 91
;  }
L57:
	.dbline 86
	lds R24,_k
	cpi R24,8
	brne L56
X14:
	.dbline 92
;  spi_write(255);
	ldi R16,255
	xcall _spi_write
L59:
	.dbline 94
;  while(1)
;  {
	.dbline 95
;   ; 
	.dbline 96
;  }
L60:
	.dbline 93
	xjmp L59
X15:
	.dbline -2
L55:
	.dbline 0 ; func end
	ret
	.dbend
; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -