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

📄 uart_main.lis

📁 ATmega16单片机的实验程序
💻 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 + -