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

📄 lesson1.s

📁 另一个非常好的串口通信程序,希望大家多提出宝贵意见
💻 S
字号:
	.module lesson1.c
	.area vector(rom, abs)
	.org 120
	jmp _uart_rx
	.area data(ram, con, rel)
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\lesson1\lesson1.c
	.dbsym e flag _flag c
	.area text(rom, con, rel)
	.dbfile C:\icc\examples.avr\lesson1\lesson1.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	xcall push_gset2
	.dbline -1
	.dbline 10
; #include <iom128v.h>
; #include <macros.h>
; #define  uchar unsigned char
; #define  uint  unsigned int
; 
; #define  mclk   7372800
; #pragma interrupt_handler uart_rx:31
; uchar rdata,flag=0;
; void delay(uint ms)
; {
	.dbline 12
;         uint i,j;
; 	for(i=0;i<ms;i++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 13
; 	   {
	.dbline 14
	clr R22
	clr R23
	xjmp L9
L6:
	.dbline 14
L7:
	.dbline 14
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 14
	cpi R22,50
	ldi R30,2
	cpc R23,R30
	brlo L6
	.dbline 15
L3:
	.dbline 12
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 12
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e init_port _init_port fV
	.even
_init_port::
	.dbline -1
	.dbline 19
; 	   for(j=0;j<562;j++);
;        }
; }
; void init_port();
; void init_port()
; {
	.dbline 20
; DDRB=DDRB|BIT(7);
	sbi 0x17,7
	.dbline 21
; 	 PORTB=PORTB|BIT(7);
	sbi 0x18,7
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_init _uart_init fV
;           baud -> R10,R11
	.even
_uart_init::
	xcall push_gset3
	movw R10,R16
	.dbline -1
	.dbline 25
;     
; }
; void uart_init(uint baud)
; {
	.dbline 26
;     UCSR1B=0x00; 
	clr R2
	sts 154,R2
	.dbline 27
;    UCSR1A=0x00; 		    //控制寄存器清零
	sts 155,R2
	.dbline 28
;    UCSR1C=(0<<UPM10)|(3<<UCSZ10);   
	ldi R24,6
	sts 157,R24
	.dbline 31
;                                                         //选择UCSRC,异步模式,禁止                        
;                                                      //   校验,1位停止位,8位数据位
;    baud=mclk/16/baud-1	;   //波特率最大为65K
	movw R2,R10
	clr R4
	clr R5
	ldi R20,0
	ldi R21,8
	ldi R22,7
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall div32s
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R2,R16
	movw R4,R18
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R10,R2
	.dbline 32
;    UBRR1L=baud; 					     	  
	sts 153,R10
	.dbline 33
;    UBRR1H=baud>>8; 		   //设置波特率
	mov R2,R3
	clr R3
	sts 152,R2
	.dbline 34
;    UCSR1B=(1<<TXEN1)|(1<<RXEN1)|(1<<RXCIE1); 
	ldi R24,152
	sts 154,R24
	.dbline 36
;                                                        //接收、发送使能,接收中断使能
;    SREG=BIT(7);	                //全局中断开放
	ldi R24,128
	out 0x3f,R24
	.dbline 37
;    DDRD|=0X08;	                //配置TX为输出(很重要)
	sbi 0x11,3
	.dbline -2
L11:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r baud 10 i
	.dbend
	.dbfunc e uart_sendB _uart_sendB fV
;           data -> R16
	.even
_uart_sendB::
	.dbline -1
	.dbline 41
; 
; }
; void uart_sendB(uchar data)
; {
L13:
	.dbline 42
L14:
	.dbline 42
;    while(!(UCSR1A&(BIT(UDRE1)))) ;
	lds R2,155
	sbrs R2,5
	rjmp L13
	.dbline 43
;    UDR1=data;
	sts 156,R16
L16:
	.dbline 44
L17:
	.dbline 44
;    while(!(UCSR1A&(BIT(TXC1))));
	lds R2,155
	sbrs R2,6
	rjmp L16
	.dbline 45
;    UCSR1A|=BIT(TXC1);
	lds R24,155
	ori R24,64
	sts 155,R24
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e uart_rx _uart_rx fV
	.even
_uart_rx::
	st -y,R2
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 48
; }
; void uart_rx()
; {
	.dbline 49
;     UCSR1B&=~BIT(RXCIE1);
	lds R24,154
	andi R24,127
	sts 154,R24
	.dbline 50
; 	rdata=UDR1;
	lds R2,156
	sts _rdata,R2
	.dbline 51
; 	flag=1;
	ldi R24,1
	sts _flag,R24
	.dbline 52
; 	UCSR1B|=BIT(RXCIE1);
	lds R24,154
	ori R24,128
	sts 154,R24
	.dbline -2
L19:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
;              i -> R22,R23
;              j -> R20
	.even
_main::
	.dbline -1
	.dbline 55
; }
; void main()
; {
	.dbline 56
; 	unsigned char j='a';
	ldi R20,97
	.dbline 58
; 
; 	unsigned int i=3;
	ldi R22,3
	ldi R23,0
	.dbline 63
; 
; 	// 
; 	// 
; 	// init_port();
; 	uart_init(19200);
	ldi R16,19200
	ldi R17,75
	xcall _uart_init
	.dbline 64
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 65
; 	 uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 66
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 67
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline 68
; 	  uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 69
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 70
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline 72
; 	 
; 	  uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 73
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 74
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline 76
; 	 
; 	  uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 77
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 78
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline 80
; 	 
; 	  uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 81
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 82
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline 84
; 	 
; 	  uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 85
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 86
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline 89
; 	 
; 	 
; 	  uart_sendB(i);
	mov R16,R22
	xcall _uart_sendB
	.dbline 90
; 	 delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 91
; 	 uart_sendB(j);
	mov R16,R20
	xcall _uart_sendB
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbsym r i 22 i
	.dbsym r j 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\icc\examples.avr\lesson1\lesson1.c
_rdata::
	.blkb 1
	.dbsym e rdata _rdata c

⌨️ 快捷键说明

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