打印

STC12C5412AD 单片机有谁使用过其A/D转换的请进来...

[复制链接]
1901|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lib6303c|  楼主 | 2009-12-19 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lib6303c 于 2009-12-20 19:02 编辑

现使用此单片机已有的A/D转换功能来简单电压表功能功能,电压信号直接接入A/D接口:
我发现的问题:0电压和5V电压下能够正常转换,中间的电压值都不能准确的被转换,误差太大!
试问有更好的方法来解决吗?
我测试的程序如下:
LED_MCU_START BIT    P1.7
P1M0               EQU     0091H
P1M1               EQU     0092H
ADC_CONTR     EQU     00C5H
ADC_DATA      EQU     00C6H
ADC_LOW2      EQU     00BEH
RESULT           EQU     0030H
MSCNT            EQU     0039H
             ORG     0000H
             AJMP    MAIN
             ORG     000BH
             AJMP    SEC_INT
             ORG     0100H
MAIN:     MOV     SP,#4FH
             CLR     LED_MCU_START                ;MCU 工作指示灯
             ACALL   INIT_T0
             ACALL   INIT_UART
             ACALL   INIT_A_D         
             SJMP    $
SEC_INT:
             PUSH    PSW
             SETB    PSW.3
             MOV     TH0,#0BH
             MOV     TL0,#0DCH
             DEC     MSCNT
             MOV     R1,MSCNT
             CJNE    R1,#0,EXIT
             MOV     MSCNT,#2
             ACALL   CONVERT
             ;ACALL   SETDATA
             ACALL   DISPLAY            
   EXIT:  POP     PSW
             RETI            
INIT_T0:
             ORL     TMOD,#01H
             MOV     TH0,#0BH
             MOV     TL0,#0DCH
             SETB    EA
             SETB    ET0
             SETB    TR0
             MOV     MSCNT,#2
             RET            
INIT_UART:
             ORL     TMOD,#20H
             MOV     TL1,#0FDH
             MOV     TH1,#0FDH
             SETB    TCON.6
             MOV     SCON,#0D0H
             MOV     PCON,#00H
             RET
INIT_A_D:
             MOV     P1M0,#00000001B       ;设置P1.0为输入高阻
             MOV     P1M1,#00000000B
             ORL     ADC_CONTR,#00000000B  ;选择A/D输入通道 P1.0口
             ORL     ADC_CONTR,#01000000B  ;选择模数转换速度
             ORL     ADC_CONTR,#10000000B  ;打开A/D转换器电源
             ACALL   DELAY1MS
             RET                          
CONVERT:
             MOV     ADC_DATA,#0
             ORL     ADC_CONTR,#00001000B  ;启动A/D转换器            
             ;CLR     P3.2
             ;CLR     P3.3
             ACALL   DELAY1MS
    WAIT:MOV     A,#00010000B
             ANL     A,ADC_CONTR
             JZ      WAIT
             ANL     ADC_CONTR,#11101111B
             MOV     RESULT,ADC_DATA                    
             RET
DISPLAY:
             CLR      TI
             MOV      SBUF,RESULT
   WAIT1:JNB      TI,WAIT1
             CLR      TI                        
             RET
DELAY1MS:
             MOV     R7,#250
             MOV     R6,#250
             DJNZ    R7,$
             DJNZ    R6,$
             RET
           
             END

相关帖子

沙发
lib6303c|  楼主 | 2009-12-20 19:00 | 只看该作者
人都去哪了?
怎么没人关注我的问题!!!

使用特权

评论回复
板凳
aihe| | 2009-12-20 19:46 | 只看该作者
把STC的手册上例程抠过来用吧
注意输入信号的阻抗,多看手册,虽然STC手册很烂,但还是老实参考它吧

使用特权

评论回复
地板
lib6303c|  楼主 | 2009-12-20 23:09 | 只看该作者
先谢谢LS了,我认真看...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

242

帖子

6

粉丝