1.A/D转换器模拟量的输入
①.ADC0809芯片及其接口(逐次比较A/D)
转换程序
a. 查询方式?
MOV DPTR, #0FEF8H ;指出IN0通道地址? MOV A, #00H?
MOVX @DPTR,A ; 启动IN0通道转换??
MOV R2, #20H?
DLY: DJNZ R2, DLY ;延时,等待EOC变低?
WAIT:JB P3.3,WAIT ;查询,等待EOC变高? MOVX A,@DPTR?
b. 延时等待方式?
MOV DPTR, #0FEF8H ? MOV A, #00H ? MOVX @DPTR, A MOVX R2, #48H?
;启动IN0通道?
;延时约140μs?
MOV 30H, A
;结果存30H
WAIT:DJNZ R2, WAIT MOVX A, @DPTR? MOV 30H, A
;转换结果存30H
c. 中断方式 (主程序)?
MAIN:SETB IT1 ;选边沿触发? SETB EX1 ;允许中断? SETB EA ;打开中断? MOV DPTR,#0FEF8H?
MOV A, #00H ;启动A/D转换 MOVX @DPTR,A ? ?? ;执行其他任务 中断服务程序:?
NTR1:PUSH DPL ;保护现场? PUSH DPH?
PUSH A?
MOV DPTR,#0FEF8H?
MOVX A, @DPTR ;读结果 MOV 30H, A ;结果存30H MOV A, #00H ?
MOVX @DPTR, A ;启动下次转
POP A ;恢复现场 POP DPH? POP DPL?
RETI ;返回?
②.AD5470芯片及其接口(延时比较A/D)
延时方式对应控制程序清单:
MOV R0, #1FH ;启动?
MOVX @R0, A ?
MOV R7, #10H ;延时? DJNZ R7, $?
MOV R1, #7FH ;读低四位? MOVX A, @R1 ?
MOV R2, A ; 存低四位? MOV R1, #3FH ; 读高八位? MOVX A, @R1?
MOV R3, A ; 存高四位? SJMP $?
③.MC14433A/D芯片及其接口(双积分式A/D)
设要求外部中断为边沿触发方式, 主程序: ?
INIT: SETB IT1 ;选择INT1边沿触发方式? MOVC IE,#10000100B ;打开中断,INT?1中断允许? ???
中断服务程序: ? SAP:MOV A,P1? JNB ACC.4, SAP ;等待DS?1选通信号? JB ACC.0, SER ;若超、欠量程,转SER? JB ACC.2, SP1 ;若极性为正,转SP1? SETB 77H ;为负,2EH单元D7为1? AJMP SP2?
SP1: CLR 77H ;为正,2EH单元 D7为0? SP2: JB ACC.3, SP3 ;查千位(1/2位)?
SETB 74H ;千位数2EH单元D4为1? AJMP SP4?
SP3: CLR 74H ;千位数2EH单元D4为0? SP4: MOV A, P1?
JNB ACC.5, SP4 ;等待DS?2选通信号? MOV R0, #2EH ;?
XCHD A, @R0 ;百位数送2EH低4位? SP5: MOV A, P1?
JNB ACC.6, SP5 ;等待DS3选通信号? SWAP A ;高低4位交换? INC R0 ;指针指向2FH?
MOV @R0, A ;十位数2FH高4位? SP6: MOV A, P1?
JNB ACC.7, SP6 ;等待DS4选通信号? XCHD A, @R0 ;个位数送2FH低4位 RETI ;中断返回?
SER: SETB 10H ;置超、欠量程标志? RETI ;中断返回
④.DMA控制的数据传输方式
2.模拟量的输出通道 D/A转换器 ①.DAC0832单缓冲接口电路
相应程序段:
MOV DPTR,#0FEFFH ;给出0832的地址? MOV A, #DATA ;欲输出的数据装入A?
MOVX @DPTR, A ;数据装入0832并启动D/A转换
②.12位D/A转换器DAC1208