PTR
INC DPTR
MOVX @DPTR,A ;给初始化寄存器R4写数据
MOV A,#1BH ;SA828控制寄存器
MOV DPTR,#0FE00H ;SA828地址
MOVX @DPTR,A ;给R0写数据
INC DPTR
MOV A,#2DH
MOVX @DPTR,A ;给R1写数据
INC DPTR
MOV A,#05CH
MOVX @DPTR,A ;给R2写数据
INC DPTR
MOVX @DPTR,A ;给控制寄存器R3写数据
SETB P2.1 ;允许PWM输
单片机对采样到的输出如做PI调节计算转换为电压幅值控制字后,需要重新写入控制字,其方法是相同的。
3.2.4 ADC0809的控制及数据处理子程序
单片机与ADC0809的接线图所示,P2.7作为ADC0809的片选控制口,因此ADC0809的起始地址为7F00H。如图所示,ADC0809的地址选择线接地,固定8路模拟数据输入端重IN-0为电压采样输入端。ADC0809的CLK信号是从AT89C52的ALE端经四分频器74LS74分频后得到的,工作频率为500HZ,转换时间为128us左右,据此设计一个延时时间,延时时间一到,采用查询方式进行数据传送。即用软件测试EOC(P3.1)的状态,若测试结果为1,则转换结束接着进行数据传送,否则等待,直到测试结果为1。因为ADC0809的最大输入电压为5V,其转换结果FFH对应5V。所以FFH对应的输入应大于等于5V,表示输入超过量程。本设计中FFH对应36V,其转换公式为 ,X= ,因此程序中有二进制转换及乘14子程序,除以100处理为小数点固定显示在次低位。另外,考虑到系统存在电磁干扰,采用了中值滤波子程序进行软件抗干扰。中值滤波对于去掉由于偶然因素引起的波动或采样器不稳定而造成的误差所引起的脉动干扰比较有效。中值滤波之后将最优值存于6AH中再进行转换处理。流程图如图下面是程序清单:
INCADC:
MOV R0,#2CH
MOV R2,#03H
SAMP: MOV DPTR,#7F00H ;AD0809端口地址送DPTR
MOV A,#00H ;输入通道0选择
MOVX @DPTR,A ;启动A/D转换
MOV R7,#0FFH ;延时查询方式
DELAY:DJNZ R7,DELAY
LOOP1:JB P3.1,T1 ;查询p3.1是否为1
JNB P3.1,LOOP1
T1:MOVX A,@DPTR ;读取从IN0输入的转换结果
MOV @R0,A
INC R0
DJNZ R2,SAMP
以下是数字滤波程序流程图及程序清单:
FILTER:MOV A,6CH
CJNE A,6DH,CMP1
AJMP CMP2
CMP1:JNC CMP2
XCH A,6DH
XCH A,6CH
CMP2:MOV A6DH
CJNE A,6EH,CMP3
MOV 6AH,A
CMP3:JC CMP4
MOV 6AH,A
CMP4:MOV A,6EH
CJNE A,6CH,CMP5
MOV 6AH,A
CMP5:JC CMP6
XCH A,6CH
CMP6:MOV 6AH,A ;滤波结果存于6AH
RET
3.2.5 数据处理及电压显示子程序
DISPLAY:
MOV A,6AH
ACALL L1 ;十进制转换
ACALL PLAY
RET
PLAY: ;显示程序
MOV A,R5 ;分离D1
ANL A,#0FH
MOV 50H,A
MOV A,R5 ;分离D2
ANL A,#0F0H
SWAP A
MOV 51H,A
MOV A,R4 ;分离D3
ANL A,#0FH
MOV 52H,A
MOV A,R4 ;分离D4
ANL A,#0F0H
SWAP A
MOV 53H,A