📄 210.lis
字号:
0084 ; ADC = 0;
0084 2224 clr R2
0086 3324 clr R3
0088 35B8 out 0x5,R3
008A 24B8 out 0x4,R2
008C .dbline 103
008C ; ADCSRA |= (1 << ADSC); //启动AD转换
008C 369A sbi 0x6,6
008E .dbline 105
008E ;
008E ; del(10);
008E 0AE0 ldi R16,10
0090 10E0 ldi R17,0
0092 D4DF rcall _del
0094 L25:
0094 .dbline 106
0094 L26:
0094 .dbline 106
0094 ; while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
0094 349B sbis 0x6,4
0096 FECF rjmp L25
0098 .dbline 109
0098 ; //loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
0098 ;
0098 ; ADCSRA |= (1 << ADIF); //写1清除标志位
0098 349A sbi 0x6,4
009A .dbline 111
009A ;
009A ; adc_value = ADC; //读转换结果
009A 44B1 in R20,0x4
009C 55B1 in R21,0x5
009E .dbline 112
009E ; DDRB&=~(1<<PB3);
009E BB98 cbi 0x17,3
00A0 .dbline 113
00A0 ; PORTB|=(1<<PB3);
00A0 C39A sbi 0x18,3
00A2 .dbline 115
00A2 ;
00A2 ; return adc_value;
00A2 042F mov R16,R20
00A4 152F mov R17,R21
00A6 .dbline -2
00A6 L24:
00A6 00D0 rcall pop_gset1
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r adc_value 20 i
00AA .dbend
00AA .dbfunc e CRC3 _CRC3 fc
00AA ; i -> <dead>
00AA ; j -> R22
00AA ; len -> R10
00AA ; data -> R20,R21
.even
00AA _CRC3::
00AA 00D0 rcall push_gset3
00AC A22E mov R10,R18
00AE 402F mov R20,R16
00B0 512F mov R21,R17
00B2 .dbline -1
00B2 .dbline 127
00B2 ; }
00B2 ; /******************************************
00B2 ; CRC3校验函数
00B2 ; 输 入: ptr需要进行校验的数据包
00B2 ; len需要校验的数据包字节数
00B2 ; 输 出: 校验码;
00B2 ; 调 用: 无;
00B2 ; 被调用: 从机协议打包函数;
00B2 ; 功 能: 将一给定的数据包进行CRC3校验给调用者返回校验码
00B2 ; ******************************************/
00B2 ; unsigned char CRC3(unsigned char *data, unsigned char len)
00B2 ; {
00B2 .dbline 130
00B2 ; unsigned char i;
00B2 ; unsigned char j;
00B2 ; j = 0;
00B2 6627 clr R22
00B4 .dbline 131
00B4 ; crc=0;
00B4 2224 clr R2
00B6 20920C00 sts _crc,R2
00BA 34C0 rjmp L30
00BC L29:
00BC .dbline 134
00BC ;
00BC ; while(len)
00BC ; {
00BC .dbline 136
00BC ; /*多项式除法*/
00BC ; if(*data & (0x80>>j)) //如果该位为1
00BC 262F mov R18,R22
00BE 3327 clr R19
00C0 00E8 ldi R16,128
00C2 10E0 ldi R17,0
00C4 00D0 rcall asr16
00C6 E42F mov R30,R20
00C8 F52F mov R31,R21
00CA 2080 ldd R2,z+0
00CC 3324 clr R3
00CE 2022 and R2,R16
00D0 3122 and R3,R17
00D2 2220 tst R2
00D4 11F4 brne X0
00D6 3320 tst R3
00D8 29F0 breq L32
00DA X0:
00DA .dbline 137
00DA ; crc |= 0x01; //则在余数尾部添1否则添0
00DA 80910C00 lds R24,_crc
00DE 8160 ori R24,1
00E0 80930C00 sts _crc,R24
00E4 L32:
00E4 .dbline 138
00E4 ; if(crc >= 0x8)
00E4 80910C00 lds R24,_crc
00E8 8830 cpi R24,8
00EA 30F0 brlo L34
00EC .dbline 139
00EC ; crc ^= 11;
00EC 8BE0 ldi R24,11
00EE 20900C00 lds R2,_crc
00F2 2826 eor R2,R24
00F4 20920C00 sts _crc,R2
00F8 L34:
00F8 .dbline 140
00F8 ; crc <<= 1;
00F8 20900C00 lds R2,_crc
00FC 220C lsl R2
00FE 20920C00 sts _crc,R2
0102 .dbline 141
0102 ; j++;
0102 6395 inc R22
0104 .dbline 142
0104 ; if(len==1)
0104 8A2D mov R24,R10
0106 8130 cpi R24,1
0108 39F4 brne L36
010A .dbline 143
010A ; {
010A .dbline 144
010A ; if(j == 7)
010A 6730 cpi R22,7
010C 59F4 brne L37
010E .dbline 145
010E ; {
010E .dbline 146
010E ; j = 0;
010E 6627 clr R22
0110 .dbline 147
0110 ; data++;
0110 4F5F subi R20,255 ; offset = 1
0112 5F4F sbci R21,255
0114 .dbline 148
0114 ; len--;
0114 AA94 dec R10
0116 .dbline 149
0116 ; }
0116 .dbline 150
0116 ; }
0116 06C0 rjmp L37
0118 L36:
0118 .dbline 152
0118 ; else
0118 ; {
0118 .dbline 153
0118 ; if(j == 8)
0118 6830 cpi R22,8
011A 21F4 brne L40
011C .dbline 154
011C ; {
011C .dbline 155
011C ; j = 0;
011C 6627 clr R22
011E .dbline 156
011E ; data++;
011E 4F5F subi R20,255 ; offset = 1
0120 5F4F sbci R21,255
0122 .dbline 157
0122 ; len--;
0122 AA94 dec R10
0124 .dbline 158
0124 ; }
0124 L40:
0124 .dbline 159
0124 ; }
0124 L37:
0124 .dbline 160
0124 L30:
0124 .dbline 133
0124 AA20 tst R10
0126 51F6 brne L29
0128 .dbline 161
0128 ; }
0128 ; return(crc);
0128 00910C00 lds R16,_crc
012C .dbline -2
012C L28:
012C 00D0 rcall pop_gset3
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbsym l i 1 c
0130 .dbsym r j 22 c
0130 .dbsym r len 10 c
0130 .dbsym r data 20 pc
0130 .dbend
0130 .dbfunc e addr_f _addr_f fV
0130 ; j -> <dead>
0130 ; i -> <dead>
.even
0130 _addr_f::
0130 .dbline -1
0130 .dbline 168
0130 ; }
0130 ;
0130 ;
0130 ;
0130 ; //地址计算
0130 ; void addr_f(void)
0130 ; {
0130 .dbline 171
0130 ; unsigned char i;
0130 ; unsigned char j; //data[0]data[1]地址
0130 ; data[0]=EEPROM_read(0);
0130 0027 clr R16
0132 7EDF rcall _EEPROM_read
0134 00930300 sts _data,R16
0138 .dbline 172
0138 ; data[1]=EEPROM_read(1); //EEPORM内地址,最大FFFF
0138 01E0 ldi R16,1
013A 7ADF rcall _EEPROM_read
013C 00930400 sts _data+1,R16
0140 .dbline 173
0140 ; data[2]=0;
0140 2224 clr R2
0142 20920500 sts _data+2,R2
0146 .dbline 174
0146 ; if(GetADC()<579) data[2]|=0x80; //2.5/(3.3/13.3)/(1.1/1024)=579
0146 9BDF rcall _GetADC
0148 0334 cpi R16,67
014A E2E0 ldi R30,2
014C 1E07 cpc R17,R30
014E 28F4 brsh L45
0150 .dbline 174
0150 80910500 lds R24,_data+2
0154 8068 ori R24,128
0156 80930500 sts _data+2,R24
015A L45:
015A .dbline 175
015A ; if(PINBS) data[2]|=0x40;
015A 20900800 lds R2,_PINBS
015E 2220 tst R2
0160 29F0 breq L48
0162 .dbline 175
0162 80910500 lds R24,_data+2
0166 8064 ori R24,64
0168 80930500 sts _data+2,R24
016C L48:
016C .dbline 176
016C ; data[2]+=CRC3(data,3);
016C 23E0 ldi R18,3
016E 00E0 ldi R16,<_data
0170 10E0 ldi R17,>_data
0172 9BDF rcall _CRC3
0174 20900500 lds R2,_data+2
0178 200E add R2,R16
017A 20920500 sts _data+2,R2
017E .dbline -2
017E L42:
017E .dbline 0 ; func end
017E 0895 ret
0180 .dbsym l j 1 c
0180 .dbsym l i 1 c
0180 .dbend
0180 .dbfunc e data_1 _data_1 fV
.even
0180 _data_1::
0180 .dbline -1
0180 .dbline 180
0180 ; }
0180 ; //要发送的数据1
0180 ; void data_1(void)
0180 ; {
0180 .dbline 181
0180 ; RF_OFF;
0180 C298 cbi 0x18,2
0182 .dbline 182
0182 ; del(700);
0182 0CEB ldi R16,700
0184 12E0 ldi R17,2
0186 5ADF rcall _del
0188 .dbline 183
0188 ; RF_ON;
0188 C29A sbi 0x18,2
018A .dbline 184
018A ; del(350);
018A 0EE5 ldi R16,350
018C 11E0 ldi R17,1
018E 56DF rcall _del
0190 .dbline -2
0190 L52:
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbend
0192 .dbfunc e data_0 _data_0 fV
.even
0192 _data_0::
0192 .dbline -1
0192 .dbline 188
0192 ; }
0192 ; //要发送的数据0
0192 ; void data_0(void)
0192 ; {
0192 .dbline 189
0192 ; RF_OFF;
0192 C298 cbi 0x18,2
0194 .dbline 190
0194 ; del(350);
0194 0EE5 ldi R16,350
0196 11E0 ldi R17,1
0198 51DF rcall _del
019A .dbline 191
019A ; RF_ON;
019A C29A sbi 0x18,2
019C .dbline 192
019C ; del(700);
019C 0CEB ldi R16,700
019E 12E0 ldi R17,2
01A0 4DDF rcall _del
01A2 .dbline -2
01A2 L53:
01A2 .dbline 0 ; func end
01A2 0895 ret
01A4 .dbend
01A4 .dbfunc e rf _rf fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -