關(guān)于中穎4位單片機(jī)AD轉(zhuǎn)換中的一些經(jīng)驗(yàn)
1,起初以為10位數(shù)據(jù)取8位,把低兩位直接省掉就可以了,準(zhǔn)備開始寫程序了,偶然看到論壇里的一個(gè)人也在這里;
本文引用地址:http://www.ex-cimer.com/article/201611/323364.htm于是重新進(jìn)入中穎網(wǎng)站,原來(lái)"1111,1111,XX11"得合并為"1111,1111,11"然后再求和,取平均值;
處理方法,最低位和0011相于,把中位用ADDM左移兩位空出低,并上低位,[0011或1100],得低位;再把中位右位兩位得[0011],等
待高位,然后把高位左移兩位[1100]與中位相或,得中位,最后把高右移位兩位,即數(shù)據(jù)變?yōu)?11,1111,1111";
想一下吧,是不是很簡(jiǎn)單?!
2,我根據(jù)上面的思路,自已寫的,把"X111,1111,111X"變?yōu)?1111,1111,11"
首先把高位左移一位,判高位有無(wú)進(jìn)位,把進(jìn)位位[1000]或上最高位(這里可以省掉),
然后把中位左移一位,判有無(wú)進(jìn)位位,有進(jìn)位位,把[0001]或上最高位的最低位,
最后把低位左移一位,判有無(wú)進(jìn)位位,有進(jìn)位位,把[0001]或上中位的最低位,
這樣處理后,數(shù)據(jù)變?yōu)?1111,1111,11"
想一下吧,看看對(duì)不對(duì)?
這部份代碼如下:http://www.51hei.com/f/zyad.rar
adc_adc:
lda adcdh
sta temp
addm temp
sta adcdh_buff
bnc adcdm_cal
ldi temp,1000b
orm adcdh_buff
adcdm_cal:
lda adcdm
sta temp
addm temp
sta adcdm_buff
bnc adcdl_cal
ldi temp,0001b
orm adcdh_buff
adcdl_cal:
lda adcdl
sta temp
add temp
sta adcdl_buff
bnc total_sum
ldi temp,0001b
orm adcdm_buff
total_sum:
lda adcdl_buff
addm adc_0
lda adcdm_buff
adcm adc_1
lda adcdh_buff
adcm adc_2
ldi temp,0
adcm adc_3
bnc adc_total_cnt_end
lda adc_1
sta adc_data1
lda adc_2
sta adc_data2
lda adc_3
sta adc_data3
ldi temp,0
sta adc_0
sta adc_1
sta adc_2
sta adc_3
jmp adc_change
評(píng)論