AD/DA转换

Posted on 2022-05-24 20:33  Capterlliar  阅读(354)  评论(0编辑  收藏  举报

仅代码编写方面,AD/DA转换本身比较简单,操作一下处理芯片就行;重点是和其他芯片的连接。

1.A/D转换

有三种方式,查询,中断,和DMA方式的数据采集程序框架。最后一个一看就很复杂,所以重点是前两个。

查询的意思就是转换好了在那等着cpu来查,中断是转换好了芯片积极地发出信号中断cpu,说可以读取数据了。

查询方式数据采集  ADC0804

先out随便一个值,产生脉冲;然后开个循环查询转换成功没有,成功了,就存起来,看下一个。

代码:

STARTP EQU 310H        ; 转换启动端口 
STATEP EQU 311H        ; 状态端口 
DATAP EQU 310H        ; 数据端口 
;注意:ADC器件本身不具有A0等地址线,不提供多个数据/控制/状态端口,也无需CPU对其写命令字。
;IN/OUT这三个端口的指令的作用是让相关管脚产生电平或脉冲,不一定非得有数据进/出CPU。
DATA SEGMENT BUFR DB 1000) DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA BEGIN: MOV SI, OFFSET BUFR ; 缓冲区指针 MOV CX,100 ; 采样次数 START: MOV DX,STARTP ; 启动转换 MOV AL,00H ;(可以是其它值) OUT DX,AL ;使CS和WR同时有效 WAIT1: MOV DX,STATEP ; 查转换结束 IN AL,DX AND AL,80H ; 查D7=0(INTR=0?) JNZ WAIT1 ; 未结束,等待 MOV DX,DATAP ; 已结束,读数据 IN AL,DX MOV[SI],AL ; 数据传输到BUFR区 INC SI ;缓冲区地址加1 DEC CX ; 采样次数减1 JNZ START ; 未完,继续启动 MOV AX,4C00H ; 已完,退出 INT 21H CODE ENDS END BEGIN

中断方式数据采集  ADC0809

用8259进行中断处理,无需给8259初始化。需要修改8259向量和开放屏蔽。

 

 

 D0-D7读取数据,ADD锁存地址,这两个都是A口,它又读又写;ALE启动转换,OE读取转换数据,这些扔给8255处理。所以还要初始化一下8255。中间处理完EOC扔给8259,发出中断,然后cpu来读数据。

8259下降沿启动转换。

代码:

    MOV    DX,303H    ;82C55初始化
    MOV    AL,80H     ;10000000B, 0方式,A口出,C口出
   ;书上有误,A口在地址选择时为输出,在获取采样数据时为输入,8255需要被两次初始化才行
    OUT    DX,AL
MOV AL,0EH ;置PC7=0,使START和ALE无效 OUT DX,AL MOV AL,0CH ;置PC6=0,使OE无效(位控字) OUT DX,AL
---------------------------------------------------
MOV AX,350CH ;获取IRQ4的中断向量并保存 INT 21H MOV OLD-OFF,BX MOV BX,ES MOV OLD-SEG,BX
CLI MOV AX,250CH ;置新中断向量 MOV DX,SEG A-D MOV DS,DX MOV DX,OFFSET A-D INT 21H MOV AX,DATA ;恢复数据段 MOV DS,AX
STI
IN AL,21H ;开放IRQ4 AND AL,0EFH OUT 21H,AL
MOV CX,100 ;设置采集字节数 MOV AX,OFFSET BUFF ;设置内存指针 MOV PRT,AX
MOV DX,300H ;选择通道 MOV AL,07H OUT DX,AL
------------------------------------------------
BEGIN:
MOV DX,303H ;启动转换 MOV AL,0FH ;产生START启动脉冲信号 OUT DX,AL NOP MOV AL,0EH OUT DX,AL
STI ;开中断 HLT ;等待中断 DEC CX ;采样次数减1 JNZ BEGIN ;没完,继续
-----------------------------------------------
CLI ;已完,关中断
MOV AX,250CH ;恢复IRQ4的原中断向量 MOV DX,OLD-SEG MOV DS,DX MOV DX,OLD-OFF INT 21H
MOV AX,DATA ;恢复数据段 MOV DS,AX STI
IN AL,21H OR AL,10H ;屏蔽IRQ4 OUT 21H,AL
MOV AX,4C00H ;返回DOS INT 21H

2.D/A转换器  DA823C

主要目的是生成各种各样的波。

跟上面差不多,把各种口扔给8255,然后只要根据点画图就行了。

3.参数

1.分辨率

能输出几位数据

2.转换时间