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

📄 usart.lis

📁 //实验板的AVR程序
💻 LIS
字号:
                        .module usart.c
                        .area data(ram, con, rel)
 0000           _temprecv::
 0000                   .blkb 1
                        .area idata
 0000 F0                .byte 240
                        .area data(ram, con, rel)
 0001                   .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
 0001                   .dbsym e temprecv _temprecv c
                        .area vector(rom, abs)
                        .org 22
 0016 00C0              rjmp _uart0_rx_isr
                        .area data(ram, con, rel)
 0001                   .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
 0000                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
                        .even
 0000           _uart0_rx_isr::
 0000 2A92              st -y,R2
 0002 2FB6              in R2,0x3f
 0004 2A92              st -y,R2
 0006                   .dbline -1
 0006                   .dbline 33
 0006           ; //******************************************************************************
 0006           ; //                                                                             *
 0006           ; //    FileName   : 实验板uart.c         ICCAVR V6.31A编译                      *
 0006           ; //    Function   : uart应用练习 ,回送PC发送的数据,从而双向通讯。              *
 0006           ; //    Date       : 2006-05-07                                                  *
 0006           ; //    Version    : 1.0                                                         *
 0006           ; //                                                                             *
 0006           ; //    Author     : 开关电源              hongtusy@163.com                      *
 0006           ; //    Company    : 电子信息技术咨询网    http://www.itsn.cn                    *
 0006           ; //                                                                             *
 0006           ; //***************************描述与记事*****************************************
 0006           ; //实验板的AVR程序,uart应用,和计算机通讯,回送PC发送的数据
 0006           ; //接线定义:PD0-RXD PD1-TXD 开关位置:SW6-7/8打开。
 0006           ; //使用串口调试器,使用十六进制方式,首先让PC发送一个字符给MCU,然后将接收到MCU返回的值。
 0006           ; //记事:本程序旨在对uart的理解与演示,程序适合初学者使用.
 0006           ; //使用片外8MHz晶体,9600bps波特率
 0006           ; //******************************************************************************
 0006           ; 
 0006           ; #include <iom16v.h>             //头文件,ATmega8535单片机的寄存器定义
 0006           ; #include <macros.h>               //包含有SEI()、CLI()、NOP()、WDR()、等宏定义.
 0006           ; 
 0006           ; typedef unsigned char uchar;      //数据类型说明,无符号整型,两字节大小。
 0006           ; typedef unsigned int uint;        //数据类型说明,无符号字符型,单字节大小。
 0006           ; 
 0006           ; #define BAUDRATE        9600   //波特率
 0006           ; #define F_CPU                 8000000  //系统晶体频率
 0006           ; uchar temprecv=0xf0,tempsend;
 0006           ; /*========*/
 0006           ;  
 0006           ; #pragma interrupt_handler uart0_rx_isr: 12 
 0006           ;  
 0006           ;  void uart0_rx_isr(void)
 0006           ;  {
 0006                   .dbline 35
 0006           ;    
 0006           ;         temprecv=UDR;
 0006 2CB0              in R2,0xc
 0008 20920000          sts _temprecv,R2
 000C                   .dbline 37
 000C           ;         //while(!(UCSRA&(1<<UDRE)));
 000C           ;         UDR = temprecv;
 000C 2CB8              out 0xc,R2
 000E                   .dbline -2
 000E           L1:
 000E 2990              ld R2,y+
 0010 2FBE              out 0x3f,R2
 0012 2990              ld R2,y+
 0014                   .dbline 0 ; func end
 0014 1895              reti
 0016                   .dbend
 0016                   .dbfunc e DelaymS _DelaymS fV
 0016           ;              j -> R20
 0016           ;              i -> R16,R17
                        .even
 0016           _DelaymS::
 0016 00D0              rcall push_gset1
 0018                   .dbline -1
 0018                   .dbline 48
 0018           ;       
 0018           ;   }
 0018           ; /************************************************
 0018           ; 函 数 名:    DelaymS()
 0018           ; 功    能:    毫秒级延时函数
 0018           ; 输入参数:     延迟时间/系统晶体
 0018           ; 输出参数:    做相应的延迟处理
 0018           ; 描    述:    /
 0018           ; ***********************************************/
 0018           ; void DelaymS (uint i)            //延时函数,参数i为延时时间
 0018           ; {
 0018                   .dbline 50
 0018           ;     uchar j;                        //双重延时
 0018           ;       for (;i!=0;i--)
 0018 07C0              rjmp L6
 001A           L3:
 001A                   .dbline 51
 001A           ;       {
 001A                   .dbline 52
 001A 4EE1              ldi R20,30
 001C 01C0              rjmp L10
 001E           L7:
 001E                   .dbline 52
 001E           L8:
 001E                   .dbline 52
 001E 4A95              dec R20
 0020           L10:
 0020                   .dbline 52
 0020 4423              tst R20
 0022 E9F7              brne L7
 0024                   .dbline 53
 0024           L4:
 0024                   .dbline 50
 0024 0150              subi R16,1
 0026 1040              sbci R17,0
 0028           L6:
 0028                   .dbline 50
 0028 0030              cpi R16,0
 002A 0107              cpc R16,R17
 002C B1F7              brne L3
 002E           X0:
 002E                   .dbline -2
 002E           L2:
 002E 00D0              rcall pop_gset1
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r j 20 c
 0032                   .dbsym r i 16 i
 0032                   .dbend
 0032                   .dbfunc e usart_Init _usart_Init fV
                        .even
 0032           _usart_Init::
 0032                   .dbline -1
 0032                   .dbline 63
 0032           ;           for (j=30;j!=0;j--);
 0032           ;       }
 0032           ; }
 0032           ; /********************************************************
 0032           ;   子程序名:   usart_Init()
 0032           ;   功    能:   串口初始化
 0032           ;   输入参数:   /
 0032           ;   输出参数:   /
 0032           ;   描    述:   /
 0032           ; ********************************************************/
 0032           ; void usart_Init (void)
 0032           ; {
 0032                   .dbline 64
 0032           ;    CLI();    //关闭中断
 0032 F894              cli
 0034                   .dbline 65
 0034           ;        UBRRL= (F_CPU/BAUDRATE/16-1)%256;
 0034 83E3              ldi R24,51
 0036 89B9              out 0x9,R24
 0038                   .dbline 66
 0038           ;      UBRRH= (F_CPU/BAUDRATE/16-1)/256;
 0038 2224              clr R2
 003A 20BC              out 0x20,R2
 003C                   .dbline 68
 003C           ;        //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
 003C           ;        UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  //接收结束中断使能,RXD&TXD使能
 003C 88E9              ldi R24,152
 003E 8AB9              out 0xa,R24
 0040                   .dbline 69
 0040           ;        UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
 0040 86EA              ldi R24,166
 0042 80BD              out 0x20,R24
 0044                   .dbline 71
 0044           ;         //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位, 
 0044           ;         SREG  = 0b10000000;
 0044 80E8              ldi R24,128
 0046 8FBF              out 0x3f,R24
 0048                   .dbline -2
 0048           L11:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
 004A                   .dbfunc e main _main fV
 004A           ;           temp -> R20
                        .even
 004A           _main::
 004A                   .dbline -1
 004A                   .dbline 77
 004A           ;          //TIMSK =0X00;
 004A           ;        //SEI();      //开全局中断使能
 004A           ; }
 004A           ; //*****************主程序**********************************
 004A           ; void main (void)
 004A           ; {
 004A                   .dbline 78
 004A           ;      uchar temp=0xff;
 004A 4FEF              ldi R20,255
 004C                   .dbline 79
 004C           ;      usart_Init();    //串口初始化
 004C F2DF              rcall _usart_Init
 004E 0BC0              rjmp L14
 0050           L13:
 0050                   .dbline 81
 0050           ;        while(1)                      //无限循环执行
 0050           ;        {
 0050                   .dbline 86
 0050           ;          //if (UCSRA & (1<<RXC))              //等待接收完成,
 0050           ;             //{
 0050           ;                 // temp = UDR;                    //将接收到的数据暂存
 0050           ;                         //while(!(UCSRA&(1<<UDRE)));
 0050           ;                       if(temp!=temprecv)
 0050 20900000          lds R2,_temprecv
 0054 4215              cp R20,R2
 0056 29F0              breq L16
 0058                   .dbline 87
 0058           ;                          {
 0058           L18:
 0058                   .dbline 88
 0058           L19:
 0058                   .dbline 88
 0058           ;                          while(!(UCSRA&(1<<UDRE)));
 0058 5D9B              sbis 0xb,5
 005A FECF              rjmp L18
 005C                   .dbline 89
 005C           ;                          UDR = temprecv;                    //将接收到的数据发送出去
 005C 20900000          lds R2,_temprecv
 0060 2CB8              out 0xc,R2
 0062                   .dbline 90
 0062           ;                          }
 0062           L16:
 0062                   .dbline 92
 0062 40910000          lds R20,_temprecv
 0066                   .dbline 94
 0066           L14:
 0066                   .dbline 80
 0066 F4CF              rjmp L13
 0068           X1:
 0068                   .dbline -2
 0068           L12:
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbsym r temp 20 c
 006A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
 0000           _tempsend::
 0000                   .blkb 1
 0001                   .dbsym e tempsend _tempsend c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -