主题:[讨论]关于STC12C5410AD的A/D转换
关于STC12C5410AD的A/D转换
哪位能帮偶看看,按说输入端接VCC,应该显示1111111111B,接GND应该显示0才对,可是转换的结果漂移不定:
AUXR EQU 8EH
P1M0 EQU 91H ;P1 口模式选择寄存器0
P1M1 EQU 92H ;P1 口模式选择寄存器1
;AUXR2 EQU 0A2H
WDTRST EQU 0A6H
ADC_CONTR EQU 0C5H ;A/D 转换寄存器
;ADC_DATAH EQU 2FH ;A/D 转换结果寄存器, 为10 位A/D 转换结果的高8 位
;ADC_DATAL EQU 3CH ;A/D 转换结果寄存器, 低2 位有效, 为10 位A/D 转换结果的低2 位
ADC_DATAH EQU 0C6H ;A/D 转换结果寄存器, 为10 位A/D 转换结果的高8 位
ADC_DATAL EQU 0BEH ;A/D 转换结果寄存器, 低2 位有效, 为10 位A/D 转换结果的低2 位
WDT_CONTR EQU 0E1H
ORG 0000H
LJMP START
ORG 002BH
LJMP INT_ADC
MOV PCON,#00H
MOV IE,#10110010B ;(B2H),EA, EPCA_LVD, EADC_SPI, ES, ET1, EX1, ET0, EX0;允许 A/D 、SIO 和 T0 中断
MOV IP,#00000000B ;(20H), -, PPCA_LVD, PADC_SPI, PS, PT1, PX1, PT0, PX0;A/D 转换优先
MOV SCON,#01010000B ;(50H)SM0/FE, SM1, SM2, REN, TB8, RB8, TI, RI
MOV TH0,#0F8H
MOV TL0,#0CCH
MOV TH1,#0FBH ;18.432MHz 晶振, 波特率= 9600
MOV TL1,#0FBH
MOV TH2,#0C7H
MOV TL2,#0BCH
MOV RCAP2H,#0C7H
MOV RCAP2L,#0BCH
MOV TMOD,#00100001B ;(21H),GATE, C/T, M1, M0, GATE, C/T, M1, M0;T1,8位自动重装,T0,16位
MOV TCON,#01010101B ;(55H),TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0;启动两定时器,外部中断边沿触发
MOV WDT_CONTR,0B ;WDT_FLAG, - ,EN_WDT, CLR_WDT, IDLE_WDT, PS2, PS1, PS0
MOV AUXR,#00010000B ;(10H),T0x12, T1x12, UART_M0x6, EADCI, ESPI, ELVDI, -, - ;允许A/D 中断
MOV ADC_CONTR,#10001111B ;(8FH),ADC_POWER, SPEED1, SPEED0, ADC_FLAG, ADC_START, CHS2, CHS1, CHS0 ;开A/D 转换电源
MOV A,#10000000B ;(80H)设置A/D 通道所在的I/O P1.7为开漏模式
START:
MOV P1M0,A
MOV P1M1,A
LCALL DELAY_1
MOV T_25MS,#25
MOV T_80MS,#4
MOV ALA_DELAY,#0
MOV DFICOUNT,#0
MOV DFIADDR,#5
MOV SAMPADR,#0H
MOV SRXWP,#MHG_HDR1
MOV A,#11100000B
MOV A,#11111111B
ANL CHIP_SE,A
; ORL ADC_CONTR,#00001000B ;启动AD 转换
MOV ADC_DATAH,#0h;01001011B ;(4BH)
MOV ADC_DATAL,#0H
SJMP $
INT_ADC:
PUSH A
PUSH 0
PUSH 1
PUSH 2
ANL ADC_CONTR,#11100111B ;清0 ADC_FLAG, ADC_START 位, 停止A/D 转?
MOV A,DFICOUNT
MOV R3,A ;后面用
ADD A,#DFI_BUFH ;高低字节在同一缓冲区
MOV R1,A
MOV A,ADC_DATA ;读高字节
RL A
RL A
MOV R2,A ;高8位暂存R2
ANL A,#00000011B
MOVX @R1,A ;送入采集滤波缓存
; MOV R5,A ;取高8位的高2位暂存R5
MOV A,R2 ;恢复高8位
ANL A,#11111100B
MOV R2,A ;取高8位的低6位暂存R2
MOV A,ADC_LOW2 ;读低字节
ANL A,#00000011B ;低2位有效,所以屏蔽高6位
ORL A,R2 ;与高8位的低6位合成低8位
INC R1 ;
MOVX @R1,A ;送入采集缓存
;送入数字滤波缓存
ORL ADC_CONTR,#00001000B ;再次启动AD 转换
POP 2
POP 1
POP 0
POP A
RETI
急用,请您务必帮忙,多谢!
哪位能帮偶看看,按说输入端接VCC,应该显示1111111111B,接GND应该显示0才对,可是转换的结果漂移不定:
AUXR EQU 8EH
P1M0 EQU 91H ;P1 口模式选择寄存器0
P1M1 EQU 92H ;P1 口模式选择寄存器1
;AUXR2 EQU 0A2H
WDTRST EQU 0A6H
ADC_CONTR EQU 0C5H ;A/D 转换寄存器
;ADC_DATAH EQU 2FH ;A/D 转换结果寄存器, 为10 位A/D 转换结果的高8 位
;ADC_DATAL EQU 3CH ;A/D 转换结果寄存器, 低2 位有效, 为10 位A/D 转换结果的低2 位
ADC_DATAH EQU 0C6H ;A/D 转换结果寄存器, 为10 位A/D 转换结果的高8 位
ADC_DATAL EQU 0BEH ;A/D 转换结果寄存器, 低2 位有效, 为10 位A/D 转换结果的低2 位
WDT_CONTR EQU 0E1H
ORG 0000H
LJMP START
ORG 002BH
LJMP INT_ADC
MOV PCON,#00H
MOV IE,#10110010B ;(B2H),EA, EPCA_LVD, EADC_SPI, ES, ET1, EX1, ET0, EX0;允许 A/D 、SIO 和 T0 中断
MOV IP,#00000000B ;(20H), -, PPCA_LVD, PADC_SPI, PS, PT1, PX1, PT0, PX0;A/D 转换优先
MOV SCON,#01010000B ;(50H)SM0/FE, SM1, SM2, REN, TB8, RB8, TI, RI
MOV TH0,#0F8H
MOV TL0,#0CCH
MOV TH1,#0FBH ;18.432MHz 晶振, 波特率= 9600
MOV TL1,#0FBH
MOV TH2,#0C7H
MOV TL2,#0BCH
MOV RCAP2H,#0C7H
MOV RCAP2L,#0BCH
MOV TMOD,#00100001B ;(21H),GATE, C/T, M1, M0, GATE, C/T, M1, M0;T1,8位自动重装,T0,16位
MOV TCON,#01010101B ;(55H),TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0;启动两定时器,外部中断边沿触发
MOV WDT_CONTR,0B ;WDT_FLAG, - ,EN_WDT, CLR_WDT, IDLE_WDT, PS2, PS1, PS0
MOV AUXR,#00010000B ;(10H),T0x12, T1x12, UART_M0x6, EADCI, ESPI, ELVDI, -, - ;允许A/D 中断
MOV ADC_CONTR,#10001111B ;(8FH),ADC_POWER, SPEED1, SPEED0, ADC_FLAG, ADC_START, CHS2, CHS1, CHS0 ;开A/D 转换电源
MOV A,#10000000B ;(80H)设置A/D 通道所在的I/O P1.7为开漏模式
START:
MOV P1M0,A
MOV P1M1,A
LCALL DELAY_1
MOV T_25MS,#25
MOV T_80MS,#4
MOV ALA_DELAY,#0
MOV DFICOUNT,#0
MOV DFIADDR,#5
MOV SAMPADR,#0H
MOV SRXWP,#MHG_HDR1
MOV A,#11100000B
MOV A,#11111111B
ANL CHIP_SE,A
; ORL ADC_CONTR,#00001000B ;启动AD 转换
MOV ADC_DATAH,#0h;01001011B ;(4BH)
MOV ADC_DATAL,#0H
SJMP $
INT_ADC:
PUSH A
PUSH 0
PUSH 1
PUSH 2
ANL ADC_CONTR,#11100111B ;清0 ADC_FLAG, ADC_START 位, 停止A/D 转?
MOV A,DFICOUNT
MOV R3,A ;后面用
ADD A,#DFI_BUFH ;高低字节在同一缓冲区
MOV R1,A
MOV A,ADC_DATA ;读高字节
RL A
RL A
MOV R2,A ;高8位暂存R2
ANL A,#00000011B
MOVX @R1,A ;送入采集滤波缓存
; MOV R5,A ;取高8位的高2位暂存R5
MOV A,R2 ;恢复高8位
ANL A,#11111100B
MOV R2,A ;取高8位的低6位暂存R2
MOV A,ADC_LOW2 ;读低字节
ANL A,#00000011B ;低2位有效,所以屏蔽高6位
ORL A,R2 ;与高8位的低6位合成低8位
INC R1 ;
MOVX @R1,A ;送入采集缓存
;送入数字滤波缓存
ORL ADC_CONTR,#00001000B ;再次启动AD 转换
POP 2
POP 1
POP 0
POP A
RETI
急用,请您务必帮忙,多谢!