📄 uart_to_twi_m8.lis
字号:
00EE L30:
00EE .dbline 116
00EE L25:
00EE .dbline 105
00EE 4395 inc R20
00F0 L27:
00F0 .dbline 105
00F0 4430 cpi R20,4
00F2 C8F2 brlo L24
00F4 .dbline 117
00F4 ; }
00F4 ; ascii_to_hex();
00F4 24D0 rcall _ascii_to_hex
00F6 .dbline 118
00F6 ; Twi_Read_Flag = true;
00F6 81E0 ldi R24,1
00F8 80930600 sts _Twi_Read_Flag,R24
00FC .dbline 119
00FC ; }
00FC L21:
00FC .dbline 120
00FC ; Twi_Hex_Data_Flag = true;
00FC 81E0 ldi R24,1
00FE 80930400 sts _Twi_Hex_Data_Flag,R24
0102 .dbline 122
0102 ; //处理完,先把数据放在UART_TX_buff[]绶冲区,且接收绶冲区清零
0102 ; for(cnt=0;cnt<9;cnt++)
0102 4427 clr R20
0104 17C0 rjmp L36
0106 L33:
0106 .dbline 123
0106 .dbline 124
0106 80E0 ldi R24,<_UART_RX_buff
0108 90E0 ldi R25,>_UART_RX_buff
010A E42F mov R30,R20
010C FF27 clr R31
010E E80F add R30,R24
0110 F91F adc R31,R25
0112 2080 ldd R2,z+0
0114 80E0 ldi R24,<_UART_TX_buff
0116 90E0 ldi R25,>_UART_TX_buff
0118 E42F mov R30,R20
011A FF27 clr R31
011C E80F add R30,R24
011E F91F adc R31,R25
0120 2082 std z+0,R2
0122 .dbline 125
0122 80E0 ldi R24,<_UART_RX_buff
0124 90E0 ldi R25,>_UART_RX_buff
0126 E42F mov R30,R20
0128 FF27 clr R31
012A E80F add R30,R24
012C F91F adc R31,R25
012E 2224 clr R2
0130 2082 std z+0,R2
0132 .dbline 126
0132 L34:
0132 .dbline 122
0132 4395 inc R20
0134 L36:
0134 .dbline 122
0134 4930 cpi R20,9
0136 38F3 brlo L33
0138 .dbline 127
0138 A895 wdr
013A .dbline 128
013A L7:
013A .dbline -2
013A L6:
013A 00D0 rcall pop_gset2
013C .dbline 0 ; func end
013C 0895 ret
013E .dbsym r dat 22 c
013E .dbsym r cnt 20 c
013E .dbend
013E .dbfunc e ascii_to_hex _ascii_to_hex fV
013E ; i -> R16
013E ; cnt -> R18
.even
013E _ascii_to_hex::
013E .dbline -1
013E .dbline 132
013E ; {
013E ; UART_TX_buff[cnt] = UART_RX_buff[cnt];
013E ; UART_RX_buff[cnt] = 0;
013E ; }
013E ; WDR();
013E ; }
013E ; }
013E ; //继续解包,=>两个ASCII码组成一个数
013E ; void ascii_to_hex(void)
013E ; {
013E .dbline 135
013E ; unsigned char cnt,i;
013E ;
013E ; for(cnt=0,i=0;cnt<6;cnt++,cnt++,i++)
013E 2227 clr R18
0140 0027 clr R16
0142 2BC0 rjmp L41
0144 L38:
0144 .dbline 136
0144 .dbline 137
0144 80E0 ldi R24,<_Twi_ASCI_Data
0146 90E0 ldi R25,>_Twi_ASCI_Data
0148 E22F mov R30,R18
014A FF27 clr R31
014C E80F add R30,R24
014E F91F adc R31,R25
0150 2080 ldd R2,z+0
0152 80E0 ldi R24,<_Twi_Hex_Data
0154 90E0 ldi R25,>_Twi_Hex_Data
0156 E02F mov R30,R16
0158 FF27 clr R31
015A E80F add R30,R24
015C F91F adc R31,R25
015E 2082 std z+0,R2
0160 .dbline 138
0160 202E mov R2,R16
0162 3324 clr R3
0164 280E add R2,R24
0166 391E adc R3,R25
0168 F101 movw R30,R2
016A 8081 ldd R24,z+0
016C 8F70 andi R24,#0x0F
016E 8295 swap R24
0170 8083 std z+0,R24
0172 .dbline 139
0172 80E0 ldi R24,<_Twi_Hex_Data
0174 90E0 ldi R25,>_Twi_Hex_Data
0176 202E mov R2,R16
0178 3324 clr R3
017A 280E add R2,R24
017C 391E adc R3,R25
017E 80E0 ldi R24,<_Twi_ASCI_Data+1
0180 90E0 ldi R25,>_Twi_ASCI_Data+1
0182 E22F mov R30,R18
0184 FF27 clr R31
0186 E80F add R30,R24
0188 F91F adc R31,R25
018A 4080 ldd R4,z+0
018C F101 movw R30,R2
018E 5080 ldd R5,z+0
0190 540C add R5,R4
0192 5082 std z+0,R5
0194 .dbline 140
0194 L39:
0194 .dbline 135
0194 2395 inc R18
0196 2395 inc R18
0198 0395 inc R16
019A L41:
019A .dbline 135
019A 2630 cpi R18,6
019C 08F4 brsh X2
019E D2CF rjmp L38
01A0 X2:
01A0 .dbline -2
01A0 L37:
01A0 .dbline 0 ; func end
01A0 0895 ret
01A2 .dbsym r i 16 c
01A2 .dbsym r cnt 18 c
01A2 .dbend
01A2 .dbfunc e hex_to_ascii _hex_to_ascii fV
01A2 ; dat_buff -> R20
01A2 ; dat -> R16
.even
01A2 _hex_to_ascii::
01A2 00D0 rcall push_gset1
01A4 .dbline -1
01A4 .dbline 143
01A4 ; {
01A4 ; Twi_Hex_Data[i] = Twi_ASCI_Data[cnt];//先放ASCII的高位(四位)
01A4 ; Twi_Hex_Data[i] <<= 4;
01A4 ; Twi_Hex_Data[i] += Twi_ASCI_Data[cnt+1];
01A4 ; }
01A4 ; }
01A4 ; void hex_to_ascii(unsigned char dat)
01A4 ; {
01A4 .dbline 146
01A4 ; unsigned char dat_buff;
01A4 ;
01A4 ; dat_buff = dat;
01A4 402F mov R20,R16
01A6 .dbline 147
01A6 ; dat = dat&0x0f;
01A6 0F70 andi R16,15
01A8 .dbline 148
01A8 ; if((dat>=0)&&(dat<=9))
01A8 0030 cpi R16,0
01AA 28F0 brlo L44
01AC 89E0 ldi R24,9
01AE 8017 cp R24,R16
01B0 10F0 brlo L44
01B2 .dbline 149
01B2 ; {
01B2 .dbline 150
01B2 ; dat += 0x30;
01B2 005D subi R16,208 ; addi 48
01B4 .dbline 151
01B4 ; }
01B4 01C0 rjmp L45
01B6 L44:
01B6 .dbline 153
01B6 ; else
01B6 ; dat += 0x37;
01B6 095C subi R16,201 ; addi 55
01B8 L45:
01B8 .dbline 154
01B8 ; UART_TX_buff[7] = dat;
01B8 00930700 sts _UART_TX_buff+7,R16
01BC .dbline 156
01BC ;
01BC ; dat = dat_buff;
01BC 042F mov R16,R20
01BE .dbline 157
01BE ; dat >>= 4;
01BE 802F mov R24,R16
01C0 8295 swap R24
01C2 8F70 andi R24,#0x0F
01C4 082F mov R16,R24
01C6 .dbline 158
01C6 ; dat = dat&0x0f;
01C6 0F70 andi R16,15
01C8 .dbline 159
01C8 ; if((dat>=0)&&(dat<=9))
01C8 0030 cpi R16,0
01CA 28F0 brlo L47
01CC 89E0 ldi R24,9
01CE 8017 cp R24,R16
01D0 10F0 brlo L47
01D2 .dbline 160
01D2 ; {
01D2 .dbline 161
01D2 ; dat += 0x30;
01D2 005D subi R16,208 ; addi 48
01D4 .dbline 162
01D4 ; }
01D4 01C0 rjmp L48
01D6 L47:
01D6 .dbline 164
01D6 ; else
01D6 ; dat += 0x37;
01D6 095C subi R16,201 ; addi 55
01D8 L48:
01D8 .dbline 165
01D8 ; UART_TX_buff[6] = dat;
01D8 00930600 sts _UART_TX_buff+6,R16
01DC .dbline -2
01DC L43:
01DC 00D0 rcall pop_gset1
01DE .dbline 0 ; func end
01DE 0895 ret
01E0 .dbsym r dat_buff 20 c
01E0 .dbsym r dat 16 c
01E0 .dbend
01E0 .dbfunc e general_hex_to_ascii _general_hex_to_ascii fc
01E0 ; dat -> R16
.even
01E0 _general_hex_to_ascii::
01E0 .dbline -1
01E0 .dbline 172
01E0 ; }
01E0 ; //<<<<<<<<<<<<<<<<<<<<<
01E0 ; /***********************************************************************
01E0 ; 通用的hex转成ascii
01E0 ; ************************************************************************/
01E0 ; unsigned char general_hex_to_ascii(unsigned char dat)
01E0 ; {
01E0 .dbline 173
01E0 ; dat = dat & 0x0f;
01E0 0F70 andi R16,15
01E2 .dbline 174
01E2 ; if((dat >= 0)&&(dat <= 9))
01E2 0030 cpi R16,0
01E4 28F0 brlo L51
01E6 89E0 ldi R24,9
01E8 8017 cp R24,R16
01EA 10F0 brlo L51
01EC .dbline 175
01EC ; {
01EC .dbline 176
01EC ; dat = dat + 0x30;
01EC 005D subi R16,208 ; addi 48
01EE .dbline 177
01EE ; }
01EE 01C0 rjmp L52
01F0 L51:
01F0 .dbline 179
01F0 ; else
01F0 ; {
01F0 .dbline 180
01F0 ; dat += 0x37;
01F0 095C subi R16,201 ; addi 55
01F2 .dbline 181
01F2 ; }
01F2 L52:
01F2 .dbline 182
01F2 ; return dat;
01F2 .dbline -2
01F2 L50:
01F2 .dbline 0 ; func end
01F2 0895 ret
01F4 .dbsym r dat 16 c
01F4 .dbend
01F4 .dbfunc e show_data _show_data fV
01F4 ; dat_buff -> R22
01F4 ; dat -> R20
.even
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -