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

📄 soc_test.lis

📁 atmega128串口通信
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0076           ;       asm("pop r16");
 0076 0F91              pop r16
 0078                   .dbline 99
 0078           ;       asm("dec r16");
 0078 0A95              dec r16
 007A                   .dbline 100
 007A           ;       asm("brne CC1");
 007A B1F7              brne CC1
 007C                   .dbline 101
 007C           ;       asm("pop r16");
 007C 0F91              pop r16
 007E                   .dbline 102
 007E           ;       asm("dec r16");
 007E 0A95              dec r16
 0080                   .dbline 103
 0080           ;       asm("brne CC0");
 0080 91F7              brne CC0
 0082                   .dbline 104
 0082           ;       asm("pop r16");    
 0082 0F91              pop r16
 0084                   .dbline -2
 0084                   .dbline 105
 0084           ; }//end delay1
 0084           L11:
 0084                   .dbline 0 ; func end
 0084 0895              ret
 0086                   .dbend
 0086                   .dbfunc e query_TXC _query_TXC fV
                        .even
 0086           _query_TXC::
 0086                   .dbline -1
 0086                   .dbline 111
 0086           ; //--------------------------------------------------------
 0086           ; /*********************************************************
 0086           ; 串口发送查询
 0086           ; *********************************************************/
 0086           ; void  query_TXC(void)
 0086           ; {
 0086           L13:
 0086                   .dbline 112
 0086           L14:
 0086                   .dbline 112
 0086           ;       while(!(UCSR0A&BIT(TXC0)));
 0086 5E9B              sbis 0xb,6
 0088 FECF              rjmp L13
 008A                   .dbline 113
 008A           ;       UCSR0A|=BIT(TXC0);   //写1清零
 008A 5E9A              sbi 0xb,6
 008C                   .dbline -2
 008C                   .dbline 114
 008C           ; }//end query_TXC
 008C           L12:
 008C                   .dbline 0 ; func end
 008C 0895              ret
 008E                   .dbend
 008E                   .dbfunc e enable_XMEM _enable_XMEM fV
                        .even
 008E           _enable_XMEM::
 008E                   .dbline -1
 008E                   .dbline 120
 008E           ; //--------------------------------------------------------
 008E           ; /*********************************************************
 008E           ; 使能外部SRAM
 008E           ; *********************************************************/
 008E           ; void  enable_XMEM(void)
 008E           ; {
 008E                   .dbline 121
 008E           ;       MCUCR=0b10000000; //XMEM enable,no wait states
 008E 80E8              ldi R24,128
 0090 85BF              out 0x35,R24
 0092                   .dbline 122
 0092           ;       XMCRA=0;
 0092 2224              clr R2
 0094 20926D00          sts 109,R2
 0098                   .dbline 123
 0098           ;       XMCRB=0;                                //no XMEM high mask
 0098 20926C00          sts 108,R2
 009C                   .dbline -2
 009C                   .dbline 124
 009C           ; }//end enable_XMEM
 009C           L16:
 009C                   .dbline 0 ; func end
 009C 0895              ret
 009E                   .dbend
 009E                   .dbfunc e usart_flush _usart_flush fV
                        .even
 009E           _usart_flush::
 009E                   .dbline -1
 009E                   .dbline 130
 009E           ; //--------------------------------------------------------
 009E           ; /*********************************************************
 009E           ; 清串口
 009E           ; *********************************************************/
 009E           ; void  usart_flush(void)
 009E           ; {
 009E                   .dbline 131
 009E           ;       asm("push temp");
 009E 0F93              push temp
 00A0 01C0              xjmp L19
 00A2           L18:
 00A2                   .dbline 133
 00A2                   .dbline 134
 00A2 0CB1              in temp,0x0c
 00A4                   .dbline 135
 00A4           L19:
 00A4                   .dbline 132
 00A4           ;       while(UCSR0A&BIT(RXC0))
 00A4 5F99              sbic 0xb,7
 00A6 FDCF              rjmp L18
 00A8                   .dbline 137
 00A8           ;       {
 00A8           ;               asm("in temp,0x0c");   //in temp,udr0
 00A8           ;               continue;   //继续判断
 00A8           ;       }
 00A8           ;       asm("pop temp");
 00A8 0F91              pop temp
 00AA                   .dbline -2
 00AA                   .dbline 138
 00AA           ; }//end usart_flush
 00AA           L17:
 00AA                   .dbline 0 ; func end
 00AA 0895              ret
 00AC                   .dbend
 00AC                   .dbfunc e usart0_send _usart0_send fV
 00AC           ;              i -> R20
 00AC           ;       uSendLen -> R22
                        .even
 00AC           _usart0_send::
 00AC 0E940000          xcall push_gset2
 00B0 602F              mov R22,R16
 00B2                   .dbline -1
 00B2                   .dbline 146
 00B2           ; //--------------------------------------------------------
 00B2           ; 
 00B2           ; 
 00B2           ; /*********************************************************
 00B2           ; 通过异步串口0发送回复命令
 00B2           ; *********************************************************/
 00B2           ; void  usart0_send(unsigned char uSendLen)
 00B2           ; {
 00B2                   .dbline 147
 00B2           ;       unsigned char i=0;
 00B2 4427              clr R20
 00B4                   .dbline 148
 00B4           ;       for(i=0;i<uSendLen;i++)
 00B4 0AC0              xjmp L25
 00B6           L22:
 00B6                   .dbline 149
 00B6                   .dbline 150
 00B6 80E0              ldi R24,<_reply_buffer
 00B8 90E0              ldi R25,>_reply_buffer
 00BA E42F              mov R30,R20
 00BC FF27              clr R31
 00BE E80F              add R30,R24
 00C0 F91F              adc R31,R25
 00C2 2080              ldd R2,z+0
 00C4 2CB8              out 0xc,R2
 00C6                   .dbline 151
 00C6 DFDF              xcall _query_TXC
 00C8                   .dbline 152
 00C8           L23:
 00C8                   .dbline 148
 00C8 4395              inc R20
 00CA           L25:
 00CA                   .dbline 148
 00CA 4617              cp R20,R22
 00CC A0F3              brlo L22
 00CE                   .dbline -2
 00CE                   .dbline 153
 00CE           ;       {
 00CE           ;               UDR0=reply_buffer[i];
 00CE           ;               query_TXC();
 00CE           ;       }
 00CE           ; }//end usart0_send
 00CE           L21:
 00CE 0E940000          xcall pop_gset2
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym r i 20 c
 00D4                   .dbsym r uSendLen 22 c
 00D4                   .dbend
 00D4                   .dbfunc e usart0_sendbyte _usart0_sendbyte fV
 00D4           ;      uSendByte -> R20
                        .even
 00D4           _usart0_sendbyte::
 00D4 0E940000          xcall push_gset1
 00D8 402F              mov R20,R16
 00DA                   .dbline -1
 00DA                   .dbline 159
 00DA           ; //--------------------------------------------------------
 00DA           ; /*********************************************************
 00DA           ; 通过异步串口0发送一个字节
 00DA           ; *********************************************************/
 00DA           ; void  usart0_sendbyte(unsigned char uSendByte)
 00DA           ; {
 00DA                   .dbline 161
 00DA           ;     
 00DA           ;   UDR0=uSendByte;
 00DA 4CB9              out 0xc,R20
 00DC                   .dbline 162
 00DC           ;   query_TXC();  
 00DC D4DF              xcall _query_TXC
 00DE                   .dbline -2
 00DE                   .dbline 164
 00DE           ;     
 00DE           ; }//end usart0_sendbyte
 00DE           L26:
 00DE 0E940000          xcall pop_gset1
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r uSendByte 20 c
 00E4                   .dbend
 00E4                   .dbfunc e usart0_receive _usart0_receive fV
 00E4           ;        revChar -> R16
                        .even
 00E4           _usart0_receive::
 00E4 2A92              st -y,R2
 00E6 0A93              st -y,R16
 00E8 8A93              st -y,R24
 00EA 9A93              st -y,R25
 00EC EA93              st -y,R30
 00EE FA93              st -y,R31
 00F0 2FB6              in R2,0x3f
 00F2 2A92              st -y,R2
 00F4                   .dbline -1
 00F4                   .dbline 175
 00F4           ; //--------------------------------------------------------
 00F4           ; /*********************************************************
 00F4           ; **********************************************************
 00F4           ; 以下为中断服务子程序
 00F4           ; **********************************************************
 00F4           ; *********************************************************/
 00F4           ; //异步串口接收中断处理程序,将所接收命令存于数组buffer[]中
 00F4           ; //为防止意外改变寄存器的值,在这里只用全局变量
 00F4           ; //每次进中断接收一字节数据
 00F4           ; void usart0_receive(void)
 00F4           ; {
 00F4                   .dbline 177
 00F4           ;       unsigned char revChar;
 00F4           ;       haveUartInt=0x01;  //haveUartInt表示接收了一次串口中断,即一个字节数据
 00F4 81E0              ldi R24,1
 00F6 80930800          sts _haveUartInt,R24
 00FA                   .dbline 178
 00FA           ;       revChar=UDR0;   //接收一个字节
 00FA 0CB1              in R16,0xc
 00FC                   .dbline 179
 00FC           ;       if(buf_index<MAX_RECEV_LEN)     //如果长度小于最大长度
 00FC 80910500          lds R24,_buf_index
 0100 8436              cpi R24,100
 0102 08F0              brlo X0
 0104 98C0              xjmp L28
 0106           X0:
 0106                   .dbline 180
 0106           ;       {
 0106                   .dbline 181
 0106           ;               buffer[buf_index]=revChar;      //将该字节加入buffer
 0106 80E0              ldi R24,<_buffer
 0108 90E0              ldi R25,>_buffer
 010A E0910500          lds R30,_buf_index
 010E FF27              clr R31
 0110 E80F              add R30,R24
 0112 F91F              adc R31,R25
 0114 0083              std z+0,R16
 0116                   .dbline 182
 0116           ;               if(END_WORD==buffer[buf_index] && BEGIN_WORD==beginWord && buf_index>2)
 0116 E0910500          lds R30,_buf_index
 011A FF27              clr R31
 011C E80F              add R30,R24
 011E F91F              adc R31,R25
 0120 8081              ldd R24,z+0
 0122 8E37              cpi R24,126
 0124 81F4              brne L30
 0126 80910A00          lds R24,_beginWord
 012A 8E37              cpi R24,126
 012C 61F4              brne L30
 012E 82E0              ldi R24,2
 0130 20900500          lds R2,_buf_index
 0134 8215              cp R24,R2
 0136 38F4              brsh L30
 0138                   .dbline 184
 0138           ;               //这里为beginWord是因为beginWord是在结束字之前设置的,也就是说收到结束字时必须先收到了起始字否则这个结束字是非法的
 0138           ;               {       //注意:结束字判断应该在转义操作之前
 0138                   .dbline 185
 0138           ;                       endWord=END_WORD;                       //接收到结束标志
 0138 8EE7              ldi R24,126
 013A 80930900          sts _endWord,R24
 013E                   .dbline 186
 013E           ;                       beginWord=0x00;                 //接收完一次,为接收下一次数据做准备
 013E 2224              clr R2
 0140 20920A00          sts _beginWord,R2
 0144                   .dbline 187
 0144           ;               }
 0144 7BC0              xjmp L29
 0146           L30:
 0146                   .dbline 188
 0146           ;               else if(0==buf_index)
 0146 20900500          lds R2,_buf_index
 014A 2220              tst R2
 014C 61F4              brne L32
 014E                   .dbline 189
 014E           ;               {       //对第一个数据进行判断
 014E                   .dbline 190
 014E           ;                       if(BEGIN_WORD==buffer[0])
 014E 80911F00          lds R24,_buffer
 0152 8E37              cpi R24,126
 0154 21F4              brne L34
 0156                   .dbline 191
 0156           ;                       {
 0156                   .dbline 192
 0156           ;                               beginWord=BEGIN_WORD;   //接收到起始字
 0156 8EE7              ldi R24,126
 0158 80930A00          sts _beginWord,R24
 015C                   .dbline 193
 015C           ;                       }
 015C 6FC0              xjmp L29
 015E           L34:

⌨️ 快捷键说明

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