📄 uart_sub.lis
字号:
.module uart_sub.c
.area text(rom, con, rel)
0000 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart_sub.c
.area data(ram, con, rel)
0000 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart_sub.c
0000 _rx_data::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart_sub.c
0001 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart2.h
0001 .dbsym e rx_data _rx_data c
0001 _rx_lab::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart2.h
0002 .dbsym e rx_lab _rx_lab c
.area text(rom, con, rel)
0000 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart2.h
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 6
0000 ; #define uchar unsigned char
0000 ; uchar rx_data=0,rx_lab=0;
0000 ;
0000 ; //端口初始化
0000 ; void port_init(void)
0000 ; {
0000 .dbline 7
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 8
0004 ; DDRA = 0x00;
0004 2ABA out 0x1a,R2
0006 .dbline 9
0006 ; PORTB = 0x00;
0006 28BA out 0x18,R2
0008 .dbline 10
0008 ; DDRB = 0x00;
0008 27BA out 0x17,R2
000A .dbline 11
000A ; PORTC = 0x00; //m103 output only
000A 25BA out 0x15,R2
000C .dbline 12
000C ; DDRC = 0x00;
000C 24BA out 0x14,R2
000E .dbline 13
000E ; PORTD = 0xFF;
000E 8FEF ldi R24,255
0010 82BB out 0x12,R24
0012 .dbline 14
0012 ; DDRD = 0xFF;
0012 81BB out 0x11,R24
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e uart0_init _uart0_init fV
.even
0016 _uart0_init::
0016 .dbline -1
0016 .dbline 19
0016 ; }
0016 ;
0016 ; //串行口初始化
0016 ; void uart0_init(void)
0016 ; {
0016 .dbline 20
0016 ; UCSRB = 0x00; //disable while setting baud rate
0016 2224 clr R2
0018 2AB8 out 0xa,R2
001A .dbline 21
001A ; UCSRA = 0x00;
001A 2BB8 out 0xb,R2
001C .dbline 22
001C ; UCSRC = BIT(URSEL) | 0x06;
001C 86E8 ldi R24,134
001E 80BD out 0x20,R24
0020 .dbline 23
0020 ; UBRRL = 0x19; //set baud rate lo
0020 89E1 ldi R24,25
0022 89B9 out 0x9,R24
0024 .dbline 24
0024 ; UBRRH = 0x00; //set baud rate hi
0024 20BC out 0x20,R2
0026 .dbline 25
0026 ; UCSRB = 0x98;
0026 88E9 ldi R24,152
0028 8AB9 out 0xa,R24
002A .dbline -2
002A L2:
002A .dbline 0 ; func end
002A 0895 ret
002C .dbend
002C .dbfunc e init_devices _init_devices fV
.even
002C _init_devices::
002C .dbline -1
002C .dbline 30
002C ; }
002C ;
002C ; //call this routine to initialize all peripherals
002C ; void init_devices(void)
002C ; {
002C .dbline 32
002C ; //stop errant interrupts until set up
002C ; CLI(); //disable all interrupts
002C F894 cli
002E .dbline 33
002E ; port_init();
002E E8DF xcall _port_init
0030 .dbline 34
0030 ; uart0_init();
0030 F2DF xcall _uart0_init
0032 .dbline 36
0032 ;
0032 ; MCUCR = 0x00;
0032 2224 clr R2
0034 25BE out 0x35,R2
0036 .dbline 37
0036 ; GICR = 0x00;
0036 2BBE out 0x3b,R2
0038 .dbline 38
0038 ; TIMSK = 0x00; //timer interrupt sources
0038 29BE out 0x39,R2
003A .dbline 39
003A ; SEI(); //re-enable interrupts
003A 7894 sei
003C .dbline -2
003C L3:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E .dbfunc e uart_tx _uart_tx fV
003E ; txc -> R16
.even
003E _uart_tx::
003E .dbline -1
003E .dbline 45
003E ; //all peripherals are now initialized
003E ; }
003E ;
003E ; //发送一个字节数据
003E ; void uart_tx(uchar txc) //send a uchar data
003E ; {
003E L5:
003E .dbline 46
003E ; while(!(UCSRA&(1<<UDRE))); //check send enable
003E L6:
003E .dbline 46
003E 5D9B sbis 0xb,5
0040 FECF rjmp L5
0042 X0:
0042 .dbline 47
0042 ; UDR=txc;
0042 0CB9 out 0xc,R16
0044 .dbline -2
0044 L4:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbsym r txc 16 c
0046 .dbend
.area vector(rom, abs)
.org 44
002C 0C942300 jmp _uart0_rx_isr
.area text(rom, con, rel)
0046 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart2.h
0046 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
0046 _uart0_rx_isr::
0046 2A92 st -y,R2
0048 8A93 st -y,R24
004A 2FB6 in R2,0x3f
004C 2A92 st -y,R2
004E .dbline -1
004E .dbline 53
004E ; }
004E ;
004E ; //中断接收
004E ; #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
004E ; void uart0_rx_isr(void)
004E ; {
004E .dbline 54
004E ; rx_data=UDR;
004E 2CB0 in R2,0xc
0050 20920000 sts _rx_data,R2
0054 .dbline 55
0054 ; rx_lab=0x15;
0054 85E1 ldi R24,21
0056 80930100 sts _rx_lab,R24
005A .dbline -2
005A L8:
005A .dbline 0 ; func end
005A 2990 ld R2,y+
005C 2FBE out 0x3f,R2
005E 8991 ld R24,y+
0060 2990 ld R2,y+
0062 1895 reti
0064 .dbend
0064 .dbfile D:\16实验程序\串口通信\单片机间通信\从机\uart_sub.c
0064 .dbfunc e s_ms _s_ms fI
0064 ; aa -> R16,R17
.even
0064 _s_ms::
0064 .dbline -1
0064 .dbline 10
0064 ; //串口通信从机程序
0064 ; //收到主机发来的数据后发回给主机,并用led显示接收的数据
0064 ; #define uint unsigned int
0064 ; #include <iom16v.h>
0064 ; #include <macros.h>
0064 ; #include "uart2.h"
0064 ;
0064 ; //延时
0064 ; s_ms(uint aa)
0064 ; {
0064 .dbline 11
0064 ; for(;aa>0;aa--);
0064 02C0 xjmp L13
0066 L10:
0066 .dbline 11
0066 L11:
0066 .dbline 11
0066 0150 subi R16,1
0068 1040 sbci R17,0
006A L13:
006A .dbline 11
006A 0030 cpi R16,0
006C 0107 cpc R16,R17
006E D9F7 brne L10
0070 X1:
0070 .dbline -2
0070 L9:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r aa 16 i
0072 .dbend
0072 .dbfunc e main _main fI
.even
0072 _main::
0072 .dbline -1
0072 .dbline 16
0072 ; }
0072 ;
0072 ; //主函数
0072 ; main()
0072 ; {
0072 .dbline 17
0072 ; init_devices(); //初始化
0072 DCDF xcall _init_devices
0074 .dbline 18
0074 ; DDRD=0xff;
0074 8FEF ldi R24,255
0076 81BB out 0x11,R24
0078 .dbline 19
0078 ; PORTD=0x00;
0078 2224 clr R2
007A 22BA out 0x12,R2
007C .dbline 20
007C ; s_ms(60000);
007C 00E6 ldi R16,60000
007E 1AEE ldi R17,234
0080 F1DF xcall _s_ms
0082 10C0 xjmp L16
0084 L15:
0084 .dbline 22
0084 ; while(1)
0084 ; {
0084 .dbline 23
0084 ; if(rx_lab==0x15)//中断标志
0084 80910100 lds R24,_rx_lab
0088 8531 cpi R24,21
008A 61F4 brne L18
008C X2:
008C .dbline 24
008C ; {
008C .dbline 25
008C ; PORTD=~rx_data<<2; //数码管低两位用于串口通信指示
008C 20900000 lds R2,_rx_data
0090 2094 com R2
0092 220C lsl R2
0094 220C lsl R2
0096 22BA out 0x12,R2
0098 .dbline 26
0098 ; uart_tx(rx_data); //向主机发回收到的数据
0098 00910000 lds R16,_rx_data
009C D0DF xcall _uart_tx
009E .dbline 27
009E ; rx_lab=0;
009E 2224 clr R2
00A0 20920100 sts _rx_lab,R2
00A4 .dbline 28
00A4 ; }
00A4 L18:
00A4 .dbline 29
00A4 ; }
00A4 L16:
00A4 .dbline 21
00A4 EFCF xjmp L15
00A6 X3:
00A6 .dbline -2
00A6 L14:
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbend
00A8 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -