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

📄 usart2.s

📁 基于MEG128芯片程序设计。主要实现LED显示等功能
💻 S
字号:
	.module USART2.c
	.area text(rom, con, rel)
	.dbfile E:\AVRPRJ\dy\USART2.c
	.area vector(rom, abs)
	.org 72
	jmp _UART0_RX_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVRPRJ\dy\USART2.c
	.dbfunc e UART0_RX_interrupt _UART0_RX_interrupt fV
;           Temp -> R20
	.even
_UART0_RX_interrupt::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R20
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	st -y,R20
	.dbline -1
	.dbline 5
; #include <iom128v.h>
; #include <macros.h>
; #pragma interrupt_handler UART0_RX_interrupt:19
; void UART0_RX_interrupt( void )           
; {
	.dbline 7
;    unsigned char Temp;
;    Temp=UDR0;
	in R20,0xc
	.dbline 8
;    if(Temp=='b')Buzzer();
	cpi R20,98
	brne L2
X0:
	.dbline 8
	xcall _Buzzer
L2:
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R20,y+
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R20,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbsym r Temp 20 c
	.dbend
	.dbfunc e Buzzer _Buzzer fV
	.even
_Buzzer::
	.dbline -1
	.dbline 11
; }
; void Buzzer(void)
; {
	.dbline 12
;  	 PORTB&=0xfe;      			//开蜂鸣器
	in R24,0x18
	andi R24,254
	out 0x18,R24
	.dbline 13
; 	delay(50);
	ldi R16,50
	ldi R17,0
	xcall _delay
	.dbline 14
; 	PORTB|=0x01;             //关蜂鸣器
	sbi 0x18,0
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;              n -> R16,R17
	.even
_delay::
	xcall push_xgsetF000
	.dbline -1
	.dbline 17
; }
; void delay(int n)
; {
	.dbline 19
;   int i,j;
;   for(i=0;i<n;i++)
	clr R20
	clr R21
	xjmp L9
L6:
	.dbline 20
;    for(j=0;j<1000;j++) 
	clr R22
	clr R23
L10:
	.dbline 21
;     ;
L11:
	.dbline 20
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 20
	cpi R22,232
	ldi R30,3
	cpc R23,R30
	brlt L10
X1:
L7:
	.dbline 19
	subi R20,255  ; offset = 1
	sbci R21,255
L9:
	.dbline 19
	cp R20,R16
	cpc R21,R17
	brlt L6
X2:
	.dbline -2
L5:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r i 20 I
	.dbsym r j 22 I
	.dbsym r n 16 I
	.dbend
	.dbfunc e USART_Transmit _USART_Transmit fV
;           data -> R16
	.even
_USART_Transmit::
	.dbline -1
	.dbline 24
; }
; void USART_Transmit(char data)
; {
L15:
	.dbline 26
;  	 while(!(UCSR0A&(1<<UDRE0)))
; 	 ;
L16:
	.dbline 25
	sbis 0xb,5
	rjmp L15
X3:
	.dbline 27
; 	 UDR0=data;
	out 0xc,R16
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e USART_Init _USART_Init fV
;           baud -> R16,R17
	.even
_USART_Init::
	.dbline -1
	.dbline 31
; 
; }
; void USART_Init(unsigned int baud)
; {
	.dbline 32
;  UBRR0H=(unsigned char)(baud>>8);
	movw R2,R16
	mov R2,R3
	clr R3
	sts 144,R2
	.dbline 33
;  UBRR0L=(unsigned char)baud;
	out 0x9,R16
	.dbline 34
;  UCSR0B=(1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0); //接收终端使能,发送和接受使能
	ldi R24,152
	out 0xa,R24
	.dbline 35
;  UCSR0C=(1<<UCSZ00)|(1<<UCSZ01);           //设置字符长度,一个停止位,八位数据
	ldi R24,6
	sts 149,R24
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbsym r baud 16 i
	.dbend
	.dbfunc e main _main fI
	.even
_main::
	.dbline -1
	.dbline 38
; }
; main()
; {
	.dbline 39
;   DDRB=0xff;
	ldi R24,255
	out 0x17,R24
	.dbline 40
;   PORTB=0xff;
	out 0x18,R24
	.dbline 41
;   USART_Init(51);
	ldi R16,51
	ldi R17,0
	xcall _USART_Init
	.dbline 42
;   USART_Transmit('s');
	ldi R16,115
	xcall _USART_Transmit
L20:
	.dbline 43
;   while(1);
L21:
	.dbline 43
	xjmp L20
X4:
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbend
;  }
;   

⌨️ 快捷键说明

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