|
1黑幣
在測試STC15W408AS內(nèi)部基準(zhǔn)電壓時,讀出的兩字節(jié)是108H。高位ADC_RES=1,低位ADC_RESL=08。108h=264D
程序運行時會有1mv--2mv的電壓變化,這都正常
編程時顯示內(nèi)部基準(zhǔn)是1244mv,現(xiàn)在讀出是264(十進(jìn)制)
反推單片機供電電源公式:(1244*1024)/264=4825mv
就是4.825mv,我用數(shù)字表測得供電是4.84V,
看來還是很準(zhǔn)確的,下面程序讀出的
供大家討論,給個意見
ADC_CONTR EQU 0BCH;ADC控制寄存器
;B7,ADC_POWER;ADC電源控制位
;B6,A/D轉(zhuǎn)換需要時間11=90 10=180
;B5,A/D轉(zhuǎn)換需要時間01=360 00=540
;B4,ADC_FLAG;模數(shù)轉(zhuǎn)換完成標(biāo)志位。=1轉(zhuǎn)換完成,一定要由軟件清0
;B3,ADC_START;啟動轉(zhuǎn)換位,=1開始轉(zhuǎn)換,轉(zhuǎn)換完成為0。
;B2,模擬輸入通道選擇000=1.0 001=1.1 010=1.2
;B1,模擬輸入通道選擇011=1.3 100=1.4 101=1.5
;B0,模擬輸入通道選擇110=1.6 111=1.7
ADC_RES EQU 0BDH ;高8位
ADC_RESL EQU 0BEH ;低2位
P1ASF EQU 09DH ;P1口功能控制
M_CS BIT P1.0 ;LOAD和CS一樣
M_DIN BIT P3.3
M_CLK BIT P1.1
ORG 00H
LJMP MAIN
ORG 100H
;=======================
MAIN:
MOV SP,#70H
LCALL M_CSHCX ;初始化MAX7219顯示
LCALL INIT_ADC ;初始化ADC
MOV ADC_CONTR,#10001000B;開始轉(zhuǎn)換ADC
NOP
NOP
NOP
NOP
WAIT:
MOV A,ADC_CONTR
JNB ACC.4,WAIT ;等待轉(zhuǎn)換完成
MOV ADC_CONTR,#10000000B;清除標(biāo)志
LCALL JISUAN ;拆分字節(jié)
; MOV ADC_CONTR,#00000000B;關(guān)閉ADC電源
LCALL DISP
LCALL DELAY10ms
JMP MAIN
;======================================
;------------初始化MAX7219----------------
M_CSHCX:
MOV A,#0BH;掃描位數(shù)寄存器
MOV R2,#07;
LCALL YYY
MOV A,#0AH;亮度控制寄存器
MOV R2,#00H;
LCALL YYY
MOV A,#09H;譯碼方式寄存器
MOV R2,#0FFH;
LCALL YYY
MOV A,#0CH;停機寄存器
MOV R2,#01H;
LCALL YYY
RET
;-----------初始化ADC-------------
INIT_ADC:
MOV P1ASF,#0 ;0是測試內(nèi)部電壓
MOV CLK_DIV,#20H;高2位存儲在ADC_RES,低8位在ADC_RESL
MOV ADC_RES,#0 ;清除寄存器
MOV ADC_RESL,#0 ;清除寄存器
MOV ADC_CONTR,#10000000B;開啟ADC電源
LCALL DELAY1S ;延時程序讓ADC供電穩(wěn)定
RET
;-----------MAX7219顯示程序--------------------
DISP:
MOV R2,37H
MOV A,#01H
LCALL YYY
MOV R2,36H
MOV A,#02H
LCALL YYY
MOV R2,35H
MOV A,#03H
LCALL YYY
MOV R2,34H
MOV A,#04H
LCALL YYY
MOV R2,33H
MOV A,#05H
LCALL YYY
MOV R2,32H
MOV A,#06H
LCALL YYY
MOV R2,31H
MOV A,#07H
LCALL YYY
MOV R2,30H
MOV A,#08H
LCALL YYY
RET
YYY:
CLR M_CS
LCALL SEND
MOV A,R2
LCALL SEND
SETB M_CS
RET
;------------寫入數(shù)據(jù)-------------------
SEND:
MOV R4,#08H
LOOP2:
CLR M_CLK
RLC A
MOV M_DIN,C
NOP
NOP
SETB M_CLK
DJNZ R4,LOOP2
ret
;-----------拆分字節(jié)顯示用-----------------
JISUAN:
MOV A,ADC_RESL
ANL A,#0FH
MOV 33H,A
MOV A,ADC_RESL
SWAP A
ANL A,#0FH
MOV 32H,A
MOV A,ADC_RES
ANL A,#0FH
MOV 31H,A
MOV A,ADC_RES
SWAP A
ANL A,#0FH
MOV 30H,A
RET
;==================延時程序==================
DELAY10MS:
MOV 6CH,#50 ;10mS延時
D4: MOV 6DH,#200
D3: DJNZ 6DH,D3
DJNZ 6CH,D4
RET
DELAY1S:
MOV 6DH, #100
DLY1: MOV 6EH, #100
DLY2: MOV 6FH, #100
DJNZ 6FH, $
DJNZ 6EH, DLY2
DJNZ 6DH, DLY1
RET
END
|
最佳答案
查看完整內(nèi)容
你想過沒有?為什么數(shù)據(jù)手冊的10.7章節(jié)(898頁面)要強調(diào)這個?而如果你看STC8G系列就不會有這個EEPROM的操作那是因為STC15W系列的內(nèi)部參考電壓雖然穩(wěn)定,但每片之間的內(nèi)部參考電壓是有差距的,很有可能是在這個單片機上是準(zhǔn)確的,換一個單片機就不準(zhǔn)確了
當(dāng)然,也有可能你換了10片都是準(zhǔn)確的,那就是你運氣很好
我之前用過10片來DIY手電,有5個是很準(zhǔn)確的,另外5個不是高了就是低了,最大誤差0.25V,所以,現(xiàn)在一直在用STC8G系列的
8G系列要 ...
|