|
1黑币
在测试STC15W408AS内部基准电压时,读出的两字节是108H。高位ADC_RES=1,低位ADC_RESL=08。108h=264D
程序运行时会有1mv--2mv的电压变化,这都正常
编程时显示内部基准是1244mv,现在读出是264(十进制)
反推单片机供电电源公式:(1244*1024)/264=4825mv
就是4.825mv,我用数字表测得供电是4.84V,
看来还是很准确的,下面程序读出的
供大家讨论,给个意见
ADC_CONTR EQU 0BCH;ADC控制寄存器
;B7,ADC_POWER;ADC电源控制位
;B6,A/D转换需要时间11=90 10=180
;B5,A/D转换需要时间01=360 00=540
;B4,ADC_FLAG;模数转换完成标志位。=1转换完成,一定要由软件清0
;B3,ADC_START;启动转换位,=1开始转换,转换完成为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;开始转换ADC
NOP
NOP
NOP
NOP
WAIT:
MOV A,ADC_CONTR
JNB ACC.4,WAIT ;等待转换完成
MOV ADC_CONTR,#10000000B;清除标志
LCALL JISUAN ;拆分字节
; MOV ADC_CONTR,#00000000B;关闭ADC电源
LCALL DISP
LCALL DELAY10ms
JMP MAIN
;======================================
;------------初始化MAX7219----------------
M_CSHCX:
MOV A,#0BH;扫描位数寄存器
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是测试内部电压
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供电稳定
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
;------------写入数据-------------------
SEND:
MOV R4,#08H
LOOP2:
CLR M_CLK
RLC A
MOV M_DIN,C
NOP
NOP
SETB M_CLK
DJNZ R4,LOOP2
ret
;-----------拆分字节显示用-----------------
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
|
最佳答案
查看完整内容
你想过没有?为什么数据手册的10.7章节(898页面)要强调这个?而如果你看STC8G系列就不会有这个EEPROM的操作那是因为STC15W系列的内部参考电压虽然稳定,但每片之间的内部参考电压是有差距的,很有可能是在这个单片机上是准确的,换一个单片机就不准确了
当然,也有可能你换了10片都是准确的,那就是你运气很好
我之前用过10片来DIY手电,有5个是很准确的,另外5个不是高了就是低了,最大误差0.25V,所以,现在一直在用STC8G系列的
8G系列要 ...
|