📄 uart_main.lis
字号:
.module uart_main.c
.area text(rom, con, rel)
0000 .dbfile D:\16实验程序\串口通信\单片机间通信\主机\uart_main.c
0000 .dbfile D:\16实验程序\串口通信\单片机间通信\主机\uart1.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;
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 = 0x00;
000E 22BA out 0x12,R2
0010 .dbline 14
0010 ; DDRD = 0x00;
0010 21BA out 0x11,R2
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e uart0_init _uart0_init fV
.even
0014 _uart0_init::
0014 .dbline -1
0014 .dbline 19
0014 ; }
0014 ;
0014 ; //串行口初始化
0014 ; void uart0_init(void)
0014 ; {
0014 .dbline 20
0014 ; UCSRB = 0x00; //disable while setting baud rate
0014 2224 clr R2
0016 2AB8 out 0xa,R2
0018 .dbline 21
0018 ; UCSRA = 0x00;
0018 2BB8 out 0xb,R2
001A .dbline 22
001A ; UCSRC = BIT(URSEL) | 0x06;
001A 86E8 ldi R24,134
001C 80BD out 0x20,R24
001E .dbline 23
001E ; UBRRL = 0x19; //set baud rate lo
001E 89E1 ldi R24,25
0020 89B9 out 0x9,R24
0022 .dbline 24
0022 ; UBRRH = 0x00; //set baud rate hi
0022 20BC out 0x20,R2
0024 .dbline 25
0024 ; UCSRB = 0x18;
0024 88E1 ldi R24,24
0026 8AB9 out 0xa,R24
0028 .dbline -2
0028 L2:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e init_devices _init_devices fV
.even
002A _init_devices::
002A .dbline -1
002A .dbline 30
002A ; }
002A ;
002A ; //call this routine to initialize all peripherals
002A ; void init_devices(void)
002A ; {
002A .dbline 32
002A ; //stop errant interrupts until set up
002A ; CLI(); //disable all interrupts
002A F894 cli
002C .dbline 33
002C ; port_init();
002C E9DF xcall _port_init
002E .dbline 34
002E ; uart0_init();
002E F2DF xcall _uart0_init
0030 .dbline 36
0030 ;
0030 ; MCUCR = 0x00;
0030 2224 clr R2
0032 25BE out 0x35,R2
0034 .dbline 37
0034 ; GICR = 0x00;
0034 2BBE out 0x3b,R2
0036 .dbline 38
0036 ; TIMSK = 0x00; //timer interrupt sources
0036 29BE out 0x39,R2
0038 .dbline 39
0038 ; SEI(); //re-enable interrupts
0038 7894 sei
003A .dbline -2
003A L3:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e uart_tx _uart_tx fV
003C ; txc -> R16
.even
003C _uart_tx::
003C .dbline -1
003C .dbline 45
003C ; //all peripherals are now initialized
003C ; }
003C ;
003C ; //发送一个字节的数据
003C ; void uart_tx(uchar txc) //send a uchar data
003C ; {
003C L5:
003C .dbline 46
003C ; while(!(UCSRA&(1<<UDRE))); //check send enable
003C L6:
003C .dbline 46
003C 5D9B sbis 0xb,5
003E FECF rjmp L5
0040 X0:
0040 .dbline 47
0040 ; UDR=txc;
0040 0CB9 out 0xc,R16
0042 .dbline -2
0042 L4:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r txc 16 c
0044 .dbend
0044 .dbfunc e rx_c _rx_c fc
.even
0044 _rx_c::
0044 .dbline -1
0044 .dbline 52
0044 ; }
0044 ;
0044 ; //查询接收
0044 ; uchar rx_c()
0044 ; {
0044 .dbline 53
0044 ; PORTC|=(1<<2);
0044 AA9A sbi 0x15,2
0046 L9:
0046 .dbline 54
0046 ; while(!(UCSRA&(1<<RXC)));
0046 L10:
0046 .dbline 54
0046 5F9B sbis 0xb,7
0048 FECF rjmp L9
004A X1:
004A .dbline 55
004A ; PORTC|=(1<<3);
004A AB9A sbi 0x15,3
004C .dbline 56
004C ; return UDR;
004C 0CB1 in R16,0xc
004E .dbline -2
004E L8:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbend
0050 .dbfile D:\16实验程序\串口通信\单片机间通信\主机\uart_main.c
0050 .dbfunc e ms _ms fI
0050 ; aa -> R16,R17
.even
0050 _ms::
0050 .dbline -1
0050 .dbline 10
0050 ; //串口通信的主机程序
0050 ; //发送数据并等待接收数据,收到数据与发送数据对比,正确继续,错误闪烁
0050 ; //led显示数据
0050 ; #include <iom16v.h>
0050 ; #include <macros.h>
0050 ; #include "uart1.h"
0050 ; #define uint unsigned int
0050 ;
0050 ; ms(uint aa)
0050 ; {
0050 .dbline 11
0050 ; for(;aa>0;aa--);
0050 02C0 xjmp L16
0052 L13:
0052 .dbline 11
0052 L14:
0052 .dbline 11
0052 0150 subi R16,1
0054 1040 sbci R17,0
0056 L16:
0056 .dbline 11
0056 0030 cpi R16,0
0058 0107 cpc R16,R17
005A D9F7 brne L13
005C X2:
005C .dbline -2
005C L12:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r aa 16 i
005E .dbend
005E .dbfunc e main _main fI
005E ; rx_temp -> R12
005E ; i -> R10
.even
005E _main::
005E .dbline -1
005E .dbline 15
005E ; }
005E ;
005E ; main()
005E ; {
005E .dbline 16
005E ; uchar i=0,rx_temp;
005E AA24 clr R10
0060 .dbline 17
0060 ; init_devices(); //初始化
0060 E4DF xcall _init_devices
0062 .dbline 18
0062 ; DDRD=0xff;
0062 8FEF ldi R24,255
0064 81BB out 0x11,R24
0066 .dbline 19
0066 ; PORTD=0x00;
0066 2224 clr R2
0068 22BA out 0x12,R2
006A .dbline 20
006A ; ms(60000);
006A 00E6 ldi R16,60000
006C 1AEE ldi R17,234
006E F0DF xcall _ms
0070 33C0 xjmp L19
0072 L18:
0072 .dbline 22
0072 ; while(1)
0072 ; {
0072 .dbline 23
0072 ; uart_tx(i); //发送数据i
0072 0A2D mov R16,R10
0074 E3DF xcall _uart_tx
0076 .dbline 24
0076 ; rx_temp=rx_c(); //查询接收
0076 E6DF xcall _rx_c
0078 C02E mov R12,R16
007A .dbline 25
007A ; if(rx_temp==i) //验证发送接收是否正确
007A 0A15 cp R16,R10
007C 61F5 brne L24
007E X3:
007E .dbline 26
007E ; {
007E .dbline 27
007E ; i++;
007E A394 inc R10
0080 .dbline 28
0080 ; PORTD=~i<<2;
0080 2A2C mov R2,R10
0082 2094 com R2
0084 220C lsl R2
0086 220C lsl R2
0088 22BA out 0x12,R2
008A .dbline 29
008A ; ms(60000);
008A 00E6 ldi R16,60000
008C 1AEE ldi R17,234
008E E0DF xcall _ms
0090 .dbline 30
0090 ; ms(60000);
0090 00E6 ldi R16,60000
0092 1AEE ldi R17,234
0094 DDDF xcall _ms
0096 .dbline 31
0096 ; ms(60000);
0096 00E6 ldi R16,60000
0098 1AEE ldi R17,234
009A DADF xcall _ms
009C .dbline 32
009C ; ms(60000);
009C 00E6 ldi R16,60000
009E 1AEE ldi R17,234
00A0 D7DF xcall _ms
00A2 .dbline 33
00A2 ; ms(60000);
00A2 00E6 ldi R16,60000
00A4 1AEE ldi R17,234
00A6 D4DF xcall _ms
00A8 .dbline 34
00A8 ; }
00A8 17C0 xjmp L22
00AA L23:
00AA .dbline 38
00AA ; else //通信错误
00AA ; {
00AA ; while(1)
00AA ; {
00AA .dbline 39
00AA ; PORTD=0x00;
00AA 2224 clr R2
00AC 22BA out 0x12,R2
00AE .dbline 40
00AE ; ms(60000);
00AE 00E6 ldi R16,60000
00B0 1AEE ldi R17,234
00B2 CEDF xcall _ms
00B4 .dbline 41
00B4 ; ms(60000);
00B4 00E6 ldi R16,60000
00B6 1AEE ldi R17,234
00B8 CBDF xcall _ms
00BA .dbline 42
00BA ; ms(60000);
00BA 00E6 ldi R16,60000
00BC 1AEE ldi R17,234
00BE C8DF xcall _ms
00C0 .dbline 43
00C0 ; PORTD=0xff;
00C0 8FEF ldi R24,255
00C2 82BB out 0x12,R24
00C4 .dbline 44
00C4 ; ms(60000);
00C4 00E6 ldi R16,60000
00C6 1AEE ldi R17,234
00C8 C3DF xcall _ms
00CA .dbline 45
00CA ; ms(60000);
00CA 00E6 ldi R16,60000
00CC 1AEE ldi R17,234
00CE C0DF xcall _ms
00D0 .dbline 46
00D0 ; ms(60000);
00D0 00E6 ldi R16,60000
00D2 1AEE ldi R17,234
00D4 BDDF xcall _ms
00D6 .dbline 47
00D6 ; }
00D6 L24:
00D6 .dbline 37
00D6 E9CF xjmp L23
00D8 L22:
00D8 .dbline 49
00D8 ; }
00D8 ; }
00D8 L19:
00D8 .dbline 21
00D8 CCCF xjmp L18
00DA X4:
00DA .dbline -2
00DA L17:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym r rx_temp 12 c
00DC .dbsym r i 10 c
00DC .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\16实验程序\串口通信\单片机间通信\主机\uart_main.c
0000 _rx_data::
0000 .blkb 1
0001 .dbfile D:\16实验程序\串口通信\单片机间通信\主机\uart1.h
0001 .dbsym e rx_data _rx_data c
0001 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -