📄 usart2.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 + -