📄 lesson10.lis
字号:
.module lesson10.c
.area vector(rom, abs)
.org 120
0078 0C945D00 jmp _uart_rx
.area data(ram, con, rel)
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\DOCUME~1\SW\桌面\lesson10\lesson10.c
0001 .dbsym e flag _flag c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\SW\桌面\lesson10\lesson10.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 10
0004 ; #include <iom128v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; #define mclk 7372800
0004 ; #pragma interrupt_handler uart_rx:31
0004 ; uchar rdata,flag=0;
0004 ; void delay(uint ms)
0004 ; {
0004 .dbline 12
0004 ; uint i,j;
0004 ; for(i=0;i<ms;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 13
000A ; {
000A .dbline 14
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 14
0010 L7:
0010 .dbline 14
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 14
0014 6233 cpi R22,50
0016 E2E0 ldi R30,2
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C .dbline 15
001C L3:
001C .dbline 12
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 12
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 .dbline -2
0026 L1:
0026 0E940000 xcall pop_gset2
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r i 20 i
002C .dbsym r j 22 i
002C .dbsym r ms 16 i
002C .dbend
002C .dbfunc e init_port _init_port fV
.even
002C _init_port::
002C .dbline -1
002C .dbline 19
002C ; for(j=0;j<562;j++);
002C ; }
002C ; }
002C ; void init_port();
002C ; void init_port()
002C ; {
002C .dbline 20
002C ; DDRB=DDRB|BIT(7);
002C BF9A sbi 0x17,7
002E .dbline 21
002E ; PORTB=PORTB|BIT(7);
002E C79A sbi 0x18,7
0030 .dbline -2
0030 L10:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbend
0032 .dbfunc e uart_init _uart_init fV
0032 ; baud -> R10,R11
.even
0032 _uart_init::
0032 0E940000 xcall push_gset3
0036 5801 movw R10,R16
0038 .dbline -1
0038 .dbline 25
0038 ;
0038 ; }
0038 ; void uart_init(uint baud)
0038 ; {
0038 .dbline 26
0038 ; UCSR1B=0x00;
0038 2224 clr R2
003A 20929A00 sts 154,R2
003E .dbline 27
003E ; UCSR1A=0x00; //控制寄存器清零
003E 20929B00 sts 155,R2
0042 .dbline 28
0042 ; UCSR1C=(0<<UPM10)|(3<<UCSZ10);
0042 86E0 ldi R24,6
0044 80939D00 sts 157,R24
0048 .dbline 31
0048 ; //选择UCSRC,异步模式,禁止
0048 ; // 校验,1位停止位,8位数据位
0048 ; baud=mclk/16/baud-1 ; //波特率最大为65K
0048 1501 movw R2,R10
004A 4424 clr R4
004C 5524 clr R5
004E 40E0 ldi R20,0
0050 58E0 ldi R21,8
0052 67E0 ldi R22,7
0054 70E0 ldi R23,0
0056 5A92 st -y,R5
0058 4A92 st -y,R4
005A 3A92 st -y,R3
005C 2A92 st -y,R2
005E 8A01 movw R16,R20
0060 9B01 movw R18,R22
0062 0E940000 xcall div32s
0066 41E0 ldi R20,1
0068 50E0 ldi R21,0
006A 60E0 ldi R22,0
006C 70E0 ldi R23,0
006E 1801 movw R2,R16
0070 2901 movw R4,R18
0072 241A sub R2,R20
0074 350A sbc R3,R21
0076 460A sbc R4,R22
0078 570A sbc R5,R23
007A 5101 movw R10,R2
007C .dbline 32
007C ; UBRR1L=baud;
007C A0929900 sts 153,R10
0080 .dbline 33
0080 ; UBRR1H=baud>>8; //设置波特率
0080 232C mov R2,R3
0082 3324 clr R3
0084 20929800 sts 152,R2
0088 .dbline 34
0088 ; UCSR1B=(1<<TXEN1)|(1<<RXEN1)|(1<<RXCIE1);
0088 88E9 ldi R24,152
008A 80939A00 sts 154,R24
008E .dbline 36
008E ; //接收、发送使能,接收中断使能
008E ; SREG=BIT(7); //全局中断开放
008E 80E8 ldi R24,128
0090 8FBF out 0x3f,R24
0092 .dbline 37
0092 ; DDRD|=0X08; //配置TX为输出(很重要)
0092 8B9A sbi 0x11,3
0094 .dbline -2
0094 L11:
0094 0E940000 xcall pop_gset3
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r baud 10 i
009A .dbend
009A .dbfunc e uart_sendB _uart_sendB fV
009A ; data -> R16
.even
009A _uart_sendB::
009A .dbline -1
009A .dbline 41
009A ;
009A ; }
009A ; void uart_sendB(uchar data)
009A ; {
009A L13:
009A .dbline 42
009A L14:
009A .dbline 42
009A ; while(!(UCSR1A&(BIT(UDRE1)))) ;
009A 20909B00 lds R2,155
009E 25FE sbrs R2,5
00A0 FCCF rjmp L13
00A2 .dbline 43
00A2 ; UDR1=data;
00A2 00939C00 sts 156,R16
00A6 L16:
00A6 .dbline 44
00A6 L17:
00A6 .dbline 44
00A6 ; while(!(UCSR1A&(BIT(TXC1))));
00A6 20909B00 lds R2,155
00AA 26FE sbrs R2,6
00AC FCCF rjmp L16
00AE .dbline 45
00AE ; UCSR1A|=BIT(TXC1);
00AE 80919B00 lds R24,155
00B2 8064 ori R24,64
00B4 80939B00 sts 155,R24
00B8 .dbline -2
00B8 L12:
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbsym r data 16 c
00BA .dbend
00BA .dbfunc e uart_rx _uart_rx fV
.even
00BA _uart_rx::
00BA 2A92 st -y,R2
00BC 8A93 st -y,R24
00BE 2FB6 in R2,0x3f
00C0 2A92 st -y,R2
00C2 .dbline -1
00C2 .dbline 48
00C2 ; }
00C2 ; void uart_rx()
00C2 ; {
00C2 .dbline 49
00C2 ; UCSR1B&=~BIT(RXCIE1);
00C2 80919A00 lds R24,154
00C6 8F77 andi R24,127
00C8 80939A00 sts 154,R24
00CC .dbline 50
00CC ; rdata=UDR1;
00CC 20909C00 lds R2,156
00D0 20920000 sts _rdata,R2
00D4 .dbline 51
00D4 ; flag=1;
00D4 81E0 ldi R24,1
00D6 80930000 sts _flag,R24
00DA .dbline 52
00DA ; UCSR1B|=BIT(RXCIE1);
00DA 80919A00 lds R24,154
00DE 8068 ori R24,128
00E0 80939A00 sts 154,R24
00E4 .dbline -2
00E4 L19:
00E4 2990 ld R2,y+
00E6 2FBE out 0x3f,R2
00E8 8991 ld R24,y+
00EA 2990 ld R2,y+
00EC .dbline 0 ; func end
00EC 1895 reti
00EE .dbend
00EE .dbfunc e main _main fV
.even
00EE _main::
00EE .dbline -1
00EE .dbline 55
00EE ; }
00EE ; void main()
00EE ; {
00EE .dbline 59
00EE ;
00EE ; // unsigned int i=3;
00EE ; // unsigned char j='a';
00EE ; init_port();
00EE 9EDF xcall _init_port
00F0 .dbline 60
00F0 ; uart_init(19200);
00F0 00E0 ldi R16,19200
00F2 1BE4 ldi R17,75
00F4 9EDF xcall _uart_init
00F6 .dbline 61
00F6 ; delay(1);
00F6 01E0 ldi R16,1
00F8 10E0 ldi R17,0
00FA 82DF xcall _delay
00FC 17C0 xjmp L22
00FE L21:
00FE .dbline 63
00FE ; while(1)
00FE ; {
00FE .dbline 64
00FE ; if(flag==1)
00FE 80910000 lds R24,_flag
0102 8130 cpi R24,1
0104 99F4 brne L24
0106 .dbline 65
0106 ; {
0106 .dbline 66
0106 ; uart_sendB(rdata);
0106 00910000 lds R16,_rdata
010A C7DF xcall _uart_sendB
010C 0BC0 xjmp L27
010E L26:
010E .dbline 68
010E .dbline 69
010E C798 cbi 0x18,7
0110 .dbline 70
0110 01E0 ldi R16,1
0112 10E0 ldi R17,0
0114 75DF xcall _delay
0116 .dbline 71
0116 C79A sbi 0x18,7
0118 .dbline 72
0118 01E0 ldi R16,1
011A 10E0 ldi R17,0
011C 71DF xcall _delay
011E .dbline 73
011E 2224 clr R2
0120 20920000 sts _flag,R2
0124 .dbline 74
0124 L27:
0124 .dbline 67
0124 ; while(1)
0124 F4CF xjmp L26
0126 X0:
0126 .dbline 75
0126 ; {
0126 ; PORTB=PORTB&(~BIT(7));
0126 ; delay(1);
0126 ; PORTB=PORTB|BIT(7);
0126 ; delay(1);
0126 ; flag=0;
0126 ; }
0126 ; flag=0;
0126 2224 clr R2
0128 20920000 sts _flag,R2
012C .dbline 77
012C ;
012C ; }
012C L24:
012C .dbline 78
012C L22:
012C .dbline 62
012C E8CF xjmp L21
012E X1:
012E .dbline -2
012E L20:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\SW\桌面\lesson10\lesson10.c
0000 _rdata::
0000 .blkb 1
0001 .dbsym e rdata _rdata c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -