📄 soc_test.lis
字号:
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 + -