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

📄 usart_m8.lis

📁 AVR单片机的T_TO_TWI通讯方式
💻 LIS
字号:
                        .module usart_m8.c
                        .area data(ram, con, rel)
 0000           _Write_Error::
 0000                   .blkb 2
                        .area idata
 0000 7877              .byte 'x,'w
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 3430              .byte 52,48
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 7800              .byte 'x,0
                        .area data(ram, con, rel)
 0006                   .dbfile H:\程序库\usart_m8.c
 0006                   .dbsym e Write_Error _Write_Error A[6:6]c
 0006           _Read_Error::
 0006                   .blkb 2
                        .area idata
 0006 7877              .byte 'x,'w
                        .area data(ram, con, rel)
 0008                   .dbfile H:\程序库\usart_m8.c
 0008                   .blkb 2
                        .area idata
 0008 3830              .byte 56,48
                        .area data(ram, con, rel)
 000A                   .dbfile H:\程序库\usart_m8.c
 000A                   .blkb 2
                        .area idata
 000A 7800              .byte 'x,0
                        .area data(ram, con, rel)
 000C                   .dbfile H:\程序库\usart_m8.c
 000C                   .dbsym e Read_Error _Read_Error A[6:6]c
 000C           _aa::
 000C                   .blkb 2
                        .area idata
 000C 6F70              .byte 'o,'p
                        .area data(ram, con, rel)
 000E                   .dbfile H:\程序库\usart_m8.c
 000E                   .blkb 3
                        .area idata
 000E 000000            .byte 0,0,0
                        .area data(ram, con, rel)
 0011                   .dbfile H:\程序库\usart_m8.c
 0011                   .dbsym e aa _aa A[5:5]c
                        .area vector(rom, abs)
                        .org 22
 0016 00C0              rjmp _uart0_rx_isr
                        .area data(ram, con, rel)
 0011                   .dbfile H:\程序库\usart_m8.c
                        .area text(rom, con, rel)
 0000                   .dbfile H:\程序库\usart_m8.c
 0000                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
                        .even
 0000           _uart0_rx_isr::
 0000 2A92              st -y,R2
 0002 8A93              st -y,R24
 0004 9A93              st -y,R25
 0006 EA93              st -y,R30
 0008 FA93              st -y,R31
 000A 2FB6              in R2,0x3f
 000C 2A92              st -y,R2
 000E                   .dbline -1
 000E                   .dbline 28
 000E                   .dbline 31
 000E 80E0              ldi R24,<_UART_RX_buff
 0010 90E0              ldi R25,>_UART_RX_buff
 0012 E0910000          lds R30,_Rx_Count
 0016 FF27              clr R31
 0018 E80F              add R30,R24
 001A F91F              adc R31,R25
 001C 2CB0              in R2,0xc
 001E 2082              std z+0,R2
 0020                   .dbline 32
 0020 80910000          lds R24,_Rx_Count
 0024 8F5F              subi R24,255    ; addi 1
 0026 80930000          sts _Rx_Count,R24
 002A                   .dbline 33
 002A 8930              cpi R24,9
 002C 31F4              brne L2
 002E                   .dbline 34
 002E                   .dbline 35
 002E 81E0              ldi R24,1
 0030 80930200          sts _Rx_Flag,R24
 0034                   .dbline 37
 0034 2224              clr R2
 0036 20920000          sts _Rx_Count,R2
 003A                   .dbline 39
 003A           L2:
 003A                   .dbline -2
 003A           L1:
 003A 2990              ld R2,y+
 003C 2FBE              out 0x3f,R2
 003E F991              ld R31,y+
 0040 E991              ld R30,y+
 0042 9991              ld R25,y+
 0044 8991              ld R24,y+
 0046 2990              ld R2,y+
 0048                   .dbline 0 ; func end
 0048 1895              reti
 004A                   .dbend
 004A                   .dbfunc e uart0_init _uart0_init fV
                        .even
 004A           _uart0_init::
 004A                   .dbline -1
 004A                   .dbline 49
 004A           ; /*****************************************************************
 004A           ; //ICC-AVR application builder : 2005-8-19 14:40:53
 004A           ; // Target : M8
 004A           ; // Crystal: 7.3728Mhz
 004A           ; // Crystal: 4.6080Mhz
 004A           ; 
 004A           ; 实验:做usart串行通讯实验
 004A           ; 目的:了解及会使用usart串口
 004A           ; CPU:atmega8L
 004A           ; 相关的5个寄存器:UCSRA,UCSRB,UCSRC,UDR,UBRR(UBRRH,UBRRL)
 004A           ;                其中:UBRRH和UCSRC共用一个地址
 004A           ; ******************************************************************/
 004A           ; /*配置:CKOPT=0,CKSEL3..0=1111,SUT1..0=11(65ms慢速上升电源)*/
 004A           ; #include "usart_m8.h"
 004A           ; 
 004A           ; unsigned char UART_RX_buff[UART_RX_BUFFER_SIZE];
 004A           ; unsigned char UART_TX_buff[UART_TX_BUFFER_SIZE];
 004A           ; unsigned char Rx_Flag;
 004A           ; unsigned char Rx_Temp,Rx_Count;
 004A           ; unsigned char Rx_Start_Pack_Flag,Rx_Over_Pack_Flag;
 004A           ; 
 004A           ; unsigned char Write_Error[6] = {'x','w','4','0','x',0};//后面这个零是一定要加的,表示字符串结束
 004A           ; unsigned char Read_Error[6]  = {'x','w','8','0','x',0};//或者"\0"
 004A           ; unsigned char aa[5] = {'o','p'};
 004A           ; 
 004A           ; #pragma interrupt_handler uart0_rx_isr:12
 004A           ; void uart0_rx_isr(void)
 004A           ; {
 004A           ;    //uart has received a character in UDR
 004A           ;   
 004A           ;       UART_RX_buff[Rx_Count] = UDR;
 004A           ;     Rx_Count = Rx_Count+1;
 004A           ;     if(Rx_Count == 9)
 004A           ;        {
 004A           ;           Rx_Flag  = true; 
 004A           ;             //USART_TransmitByte((Rx_Count+0x30));
 004A           ;                 Rx_Count = 0;
 004A           ;                 //上位机在这时候要停一会儿,才能发第二串数据
 004A           ;          }
 004A           ;       //USART_TransmitByte((Rx_Count+0x30));
 004A           ; }
 004A           ; 
 004A           ; //UART0 initialize
 004A           ; // desired baud rate: 9600
 004A           ; // actual: baud rate:9600 (0.0%)
 004A           ; // char size: 8 bit
 004A           ; // parity: Disabled
 004A           ; void uart0_init(void)
 004A           ; {
 004A                   .dbline 50
 004A           ;  Rx_Count = 0;
 004A 2224              clr R2
 004C 20920000          sts _Rx_Count,R2
 0050                   .dbline 51
 0050           ;  Rx_Flag  = false;
 0050 20920200          sts _Rx_Flag,R2
 0054                   .dbline 52
 0054           ;  Rx_Start_Pack_Flag = false;
 0054 20924400          sts _Rx_Start_Pack_Flag,R2
 0058                   .dbline 53
 0058           ;  Rx_Over_Pack_Flag  = false;
 0058 20924300          sts _Rx_Over_Pack_Flag,R2
 005C                   .dbline 55
 005C           ;  //本身的uart的初始化
 005C           ;  UCSRB = 0x00; //disable while setting baud rate
 005C 2AB8              out 0xa,R2
 005E                   .dbline 59
 005E           ;  //UCSRB[RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZ2,RXB8,TXB8]
 005E           ;  //Bit 7 – RXCIE: RX Complete Interrupt Enable
 005E           ; 
 005E           ;  UCSRA = 0x00;
 005E 2BB8              out 0xb,R2
 0060                   .dbline 62
 0060           ;  //UCSRA[RXC,TXC,UDRE,FE,DOR,PE,U2X,MPCM]
 0060           ;  
 0060           ;  UCSRC = (BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0));//设置成8位
 0060 86E8              ldi R24,134
 0062 80BD              out 0x20,R24
 0064                   .dbline 71
 0064           ;  //UCSRC[URSEL,UMSEL,UPM1,UPM0,USBS,UCSZ1,UCSZ0,UCPOL]
 0064           ;  //位URSEL:寄存器选择("1"为UCSRC或"0"为UBRRH)
 0064           ;  //位UMSEL:工作模式选择(0为异步,1为同步)
 0064           ;  //位UPM1..0:为校验方式,硬件支持校验
 0064           ;  //位USBS:停止位选择(0为一位,1为两位)
 0064           ;  //位UCSZ0..2:发送位数选择(如果是8位:011)
 0064           ;  //位UCPOL:时钟极性(只在同步模式使用,异步应置为"0")
 0064           ;  
 0064           ;  UBRRL = 0x77;//baudrate; //set baud rate lo
 0064 87E7              ldi R24,119
 0066 89B9              out 0x9,R24
 0068                   .dbline 72
 0068           ;  UBRRH = 0x00; //set baud rate hi(设置波特率只用低四位,加起来一共12位)
 0068 20BC              out 0x20,R2
 006A                   .dbline 75
 006A           ;  //UBRR = baudrate; /* set the baud rate */
 006A           ; 
 006A           ;  UCSRB = ((1<<RXCIE)|(1<<RXEN)|(1<<TXEN));
 006A 88E9              ldi R24,152
 006C 8AB9              out 0xa,R24
 006E                   .dbline -2
 006E           L4:
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbend
 0070                   .dbfunc e UART_Receive _UART_Receive fV
                        .even
 0070           _UART_Receive::
 0070                   .dbline -1
 0070                   .dbline 81
 0070           ; }
 0070           ; /************************************************************************
 0070           ; 接收时采用中断方式,,,以"包"为单位接收(9个字符)
 0070           ; *************************************************************************/
 0070           ; void UART_Receive(void)
 0070           ; {
 0070                   .dbline 82
 0070           ;    if(Rx_Flag == true)
 0070 80910200          lds R24,_Rx_Flag
 0074 8130              cpi R24,1
 0076 71F4              brne L6
 0078                   .dbline 83
 0078           ;     {
 0078                   .dbline 84
 0078           ;               Rx_Flag = false;
 0078 2224              clr R2
 007A 20920200          sts _Rx_Flag,R2
 007E                   .dbline 86
 007E           ;               
 007E           ;               if((UART_RX_buff[0] == 0x58)&&(UART_RX_buff[8] == 0x58))//0x58  = 'w'
 007E 80912300          lds R24,_UART_RX_buff
 0082 8835              cpi R24,88
 0084 39F4              brne L8
 0086 80912B00          lds R24,_UART_RX_buff+8
 008A 8835              cpi R24,88
 008C 19F4              brne L8
 008E                   .dbline 87
 008E           ;         {
 008E                   .dbline 88
 008E           ;                       Rx_Over_Pack_Flag  = true;      //这个标志,可以让主函数去查
 008E 81E0              ldi R24,1
 0090 80934300          sts _Rx_Over_Pack_Flag,R24
 0094                   .dbline 90
 0094           ;                       //Rx_Count = 0;//接收计数器清零
 0094           ;               }
 0094           L8:
 0094                   .dbline 93
 0094           L6:
 0094                   .dbline -2
 0094           L5:
 0094                   .dbline 0 ; func end
 0094 0895              ret
 0096                   .dbend
 0096                   .dbfunc e USART_Transmit _USART_Transmit fV
 0096           ;              s -> R20,R21
                        .even
 0096           _USART_Transmit::
 0096 00D0              rcall push_gset1
 0098 A801              movw R20,R16
 009A                   .dbline -1
 009A                   .dbline 132
 009A           ;               //USART_TransmitByte('p');//接收一包完,就发一个信号叫上机暂停发

⌨️ 快捷键说明

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