找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2600|回复: 5
打印 上一主题 下一主题
收起左侧

STC15W408AS单片机测内部基准电压汇编语言的问题

[复制链接]
跳转到指定楼层
楼主
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系列要 ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2021-11-5 08:17 | 只看该作者
你想过没有?为什么数据手册的10.7章节(898页面)要强调这个?而如果你看STC8G系列就不会有这个EEPROM的操作那是因为STC15W系列的内部参考电压虽然稳定,但每片之间的内部参考电压是有差距的,很有可能是在这个单片机上是准确的,换一个单片机就不准确了
当然,也有可能你换了10片都是准确的,那就是你运气很好
我之前用过10片来DIY手电,有5个是很准确的,另外5个不是高了就是低了,最大误差0.25V,所以,现在一直在用STC8G系列的
8G系列要比15W系列好用很多,价钱也一样......


回复

使用道具 举报

板凳
ID:72088 发表于 2021-11-5 20:23 | 只看该作者
利用内部基准电压推算供电电压还是很准的,测量低于基准的电压就不行了,
这就需要另一个公式了,利用推算的VCC算:(VCC/1024)*adc值
回复

使用道具 举报

地板
ID:624769 发表于 2021-11-5 21:49 | 只看该作者
STC8手册是这么写的:



描述和STC15不同,但是一样承认自己不准。
而STC8因为大多有Vref引脚,需要用到内部参考电压的概率不大。虽然没有强调要校正,但也提出校正建议。
最后提一下,我屯的60+片STC8G, 里面内部参考电压最低的1.17多,最高的1.23多比手册说的 正负1%的浮动要大。

总之,要用内部参考电压,先用精准的外部电压校正一下,总不会错。
回复

使用道具 举报

5#
ID:401564 发表于 2021-11-5 22:17 | 只看该作者
188610329 发表于 2021-11-5 21:49
STC8手册是这么写的:

只要对于ADC的精度不超过1%的,根本就不需要校正
就算是有误差,也不会超过数据手册上的正负1%,虽说这STC算不上什么顶级芯片制造商,但这点精度也不是什么值得炫耀的参数
1.23对比于1.19这个误差肯定是在数据手册的范围之内的
如果要搞清楚整个ADC精度,你还要看一下数据手册的第558页面的ADC电气参数

评分

参与人数 1黑币 +5 收起 理由
新乡家电维修 + 5

查看全部评分

回复

使用道具 举报

6#
ID:72088 发表于 2021-11-6 19:05 | 只看该作者
你们说的很好,可以这样:
1、跳过内部基准测量,设定1250mv存入eeprom,
2、带入公式计算供电电源是否准确,用程序修改参考电压。
达到修正的目的,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表