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

📄 uart_sub.lis

📁 16个单片机c语言实验程序
💻 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 + -