![]() |
PC-1216-K系列AD/DA转换板用户手册 |
|
| 目 录 | ||
| 一、概述 | ||
| 二、特性指标 | ||
| 三、简要工作原理 | ||
| 四、端口定义和设置说明 | ||
| 五、软件编程 | ||
| (一)I/O方式 | ||
| (二)DMA方式 | ||
| 六、各种高级语言编程技巧 | ||
| (一)Basic编程技巧 | ||
| (二)Pascal编程技巧 | ||
| (三)C与汇编语言的链接 | ||
| 七、安装和调试 | ||
| 八、附录 |
一、概述
PC-1216-K系列是为IBM PC/XT/AT/586/及兼容机配套使用的高性能价格比通用AD/DA板。 为了满足各界用户从入门级到
高水平高速采集的不同需要,设计成为升级方式多功能板,用户可根据需要选型做为数据采集或控制板使用。
PC-1216-K系列有三种型号, PC-1216-K系列功能对照见下表:
| 型 号 | 1216-K1 | 1216-K2 | 1216-K3 |
| A / D | 16路单端 | 16路单端/8路双端 | |
| 分 辨 率 | 12位 | ||
| 增 益 | 1-100(出厂设置G=2) | 1-1000 | |
| 转换时间 | 8.5uS | ||
| DMA 吐纳率 | ≥100KHz | ||
| I / O 吐纳率 | 单通道/多通道 110 K/ 80 KHz | ||
| 输入量程 | 0~5V ;±2.5V;±5V | ||
| 数字 I / O | 8 位 输 出 / 8位 输入 | ||
| 其 它 | 3路定时/计数,内/外触发中断 / DMA | ||
*所有通道均设有输入防冲击保护,并预留RC滤波电容焊孔位置. 该板可用于:
①测量仪器、医疗设备 ②数据采集 ③测试系统
二、特性指标
1.模拟量输入
·分辨率: 12 bit
·量化误差: ±1LSB
·系统精度: 0.1%(单极性)
±0.1%(双极性)
·非线性(DC): ±0.02% FS 1/2LSB
·过压输入: 2×FS
·输入阻抗: >500KΩ
·漂移
温度漂移: FS 20PPm/℃(单极); FS 50PPm/℃(双极)
增益漂移: 35PPm/℃
·码制: 二进制、偏移二进制
2.数字输入/输出能力:TTL兼容/-24mA
3.定时/计数、数字输入/输出
·工作方式: 事件计数、频率测量 . 脉冲(方波)输出、定时输出
·事件计数
计数率: 典型值500KHz (MAX:5MHz)
范 围: 2^32
·频率测量 频率范围: 典型值0~500KHz (MAX:5MHz)
分辩率: 16位
·脉冲输出
脉 宽: 0.5uS至0.03S
级 数: 232
·时基精度: ±0.01%
·输入/输出能力:TTL兼容
4.数据交换方式
·I/O方式
·查询I/O
·定时+DMA(仅适用于单通道)
·定时+中断
·外触发+定时
5.地址
·地址范围: 00X ~ FFXH
·方 式: 板选+基址(16个) , A11~A4+A3~A0
6.中断
·中断请求: IRQ3~IRQ7(跨线选择)
·中断源: 外触发、定时/计数器
7.物理特性
·模量接口: J1-模拟信号输入/输出(DC-26)
·数字量: J2-数字信号输入/输出(26PIN)
·工作温度: 0~60℃
·工作湿度: <90%(无结露)
·外形尺寸: 125×108 mm
8.电源
·电压: 5V ±5% ±12V ±5% ·电流: 0.5A 0.05A
三、简要工作原理:
PC-1216-K主要由110KHzA/D转换、多路器、数字I/O、 定时/计数器、I/O口译码电路、DMA及中断控制逻辑等几个部分组成。
ADC 使用芯片为自带采样保持器的AD转换器,转换时间8.5uS;该芯片由单一5V 供电,功耗很低。由于采用祥云特有的复式A/D并行操作方式
与特殊电路处理,从根本上保证了110KHz的实际数据采集速度和±1LSB的变换误差。
四、端口定义和设置说明
(一)外部端口定义
1.PC-1216-K系列为了兼容多种机型,因此设计为8位数据总线结构,即总线接口为PC机短槽62总线插脚,亦可插在AT/386 及 486
586机上。
2. J1是模拟量输入输出及控制信号插座,接口定义见下图。
| p1 | CH0 | GND | CH3 | CH4 | GND | CH7 | CH8 | GND | CH1 | CH1 | GND | CH1 | EXT | |
| CH1 | CH2 | GND | CH5 | CH6 | GND | CH9 | CH1 | GND | CH1 | CH1 | NC | DA | p26 |
⑴A/D输入通道地址定义:
单端:CH0 - CH7: 10 - 17 H
CH8 - CH15: 20 - 27 H
双端:CH0 - CH8: 30 - 37 H
注:双端输入时,插脚CH0和CH8为一对输入,CH1和CH9为一对输入,依此类推。
⑵控制信号说明:
·EXT为外触发控制端:
"1" 允许定时/计数器工作 "0" 禁止定时/计数器工作
3. J2是数字量及定时/计数器输入输出插座,接口定义见下图
| p1 | DO0 | GND | DO3 | DO4 | GND | DO7 | DI0 | GND | DI3 | DI4 | GND | DI7 | NC | |
| DO1 | DO2 | GND | DO5 | DO6 | GND | DI1 | DI2 | GND | DI5 | DI6 | NC | XCLK | p26 |
控制信号说明:
·XCLK为定时/计数器的外时钟信号。
(二)硬件设置说明
1.板选地址设定: 板选地址由SW设定。
设定范围:00~FFH(A11~A4)
| A4 A5 A6 A7 A8 A9 A10 A11 | 地 址 | |
| OFF | 0 0 0 0 0 0 0 0 | 00 |
| ON | 1 1 1 1 1 1 1 1 | FF |
2. I/O端口基本地址分配:
0:CNT0 — 定时/计数器通道0的时间常数
1:CNT1 — 定时/计数器通道1的时间常数
2:CNT2 — 定时/计数器通道2的时间常数
3:8253 — 工作方式命令
4: — AD通道控制寄存器
5: — 未使用
6: — 未使用
7: — 未使用
8: — AD输入低4位
9: — AD输入高8位
A: — 数字量8位输入
B: — 数字量8位输出
C: — 未使用
D: — 未使用
E: — 未使用
F: — 未使用
3.跨线说明:
JP1 左 — 双端输入 , 右 — 单端输入
JP2 AD量程选择
上 — 10V , 下 — 5V
JP3 AD输入极性选择
上 — 双极性模入, 下 — 单极性模入
JP5 内/外时钟选择
开路 — 外控制时钟XCLK输入,
短路 — 内时钟/DMA时钟/XCLK输出
JP6 中断方式选择
左 - AD/DMA 字计数, 右 - 定时计数
JP7中断请求选择
![]()
IRQ 3 4 5 6 7
JP8 DMA通道选择
左 - DMA通道1, 右 - DMA通道3
4.调整电位器说明:
VR3 — 单极性模入调零 , VR4 — A/D增益微调 ,
VR5 — 双极性模入调零
五、软件编程
PC-1216-K板支持各种带有口操作指令的高级语言,如: BASIC 、PASCAL、C等以及80X86汇编语言。
对于WINDOWS环境的用户,祥云公司可提供 PC系列产品的动态连接库, 编程请参阅有关手册.
(一)I/O方式的编程(以BASIC为例,板选地址610H)
1.A/D的编程:
⑴送模拟通道号/地址寄存器
OUT &h614,CH 注:CH数见A/D通道地址定义(4.2.1)
⑵取前一通道A/D转换低4位数据 ADL = INP(&h618)
⑶取前一通道A/D转换高8位数据,并启动此次A/D转换 ADH = INP(&h619)
⑷拼合12位数据 AD = ADH * 16 + ADL / 16
⑸换算电压值 V = ( AD - B ) * G / 4096
双极性采集时B = 2047,单极性采集时B = 0;
量程为10V时G = 10 ,20V时 G = 20。
⑹A/D数据格式:
ADH:高8位数据 ADL:低4位数据
| D7 D6 D5 D4 | D3 D2 D1 D0 |
| 低 4 位 数 据 | 0 0 0 S |
* S = 0 AD数据准备好。 S = 1 AD正在转换。
⑺编程举例
例1.单通道采数程序
10 OUT &H614,&H11 '置通道1
20 ADH = INP(&H619) '启动AD
30 ADL = INP(&H618) '读转换完成标志及低4位数据
40 IF (ADL AND 1) = 1 THEN GOTO 30 'AD未准备好
50 ADH = INP(&H619) 'AD准备好,读入AD高8位数据
60 AD = ADH*16+ADL/16 '拼合12位数据
70 PRINT AD*5/4096 '显示电压值
80 GOTO 30
例2.多单通道采数程序
10 OUT &H614,&H10 '置通道(初始通道0)
20 ADH = INP(&H619) '启动AD
30 FOR I = 1 TO 8
40 OUT &H614,&H10+I '置通道号
50 ADL = INP(&H618) '读转换完成标志及低4位数据
60 IF (ADL AND 1) = 1 THEN GOTO 50 'AD未准备好
70 ADH = INP(&H619) 'AD准备好,读入AD高8位数据
80 AD = ADH*16+ADL/16 '拼合12位数据
90 PRINT "CH = ',I; "VOLT = ",AD*5/4096 '显示电压值
100 NEXT
110 GOTO 30
2.数字量输出口/扩展口编程 OUT &H61A,0~255
3.数字量输入口 DIN = INP(&h61B)
(二)DMA方式的编程
8253定时器是为A/D转换器以DMA方式与主机交换数据而设置的器件,用户在使用DMA方式时,应对PC-1216-K的8253 芯片和主机中8237DMA 控制器同时编程才能正常使用。
8253占用地址口: XX0 ~ XX3H
通道功能分配:CNT0 — 触发中断
CNT1 — DMA定时及中断时钟
CNT2 — 时基发生器/DA转换脉宽
1.对8253的编程
⑴8253方式字说明: D7 D6 D5 D4 D3 D2 D1 D0
方式字格式: SC1 SC0 RL1 RL0 M2 M1 M0 BCD
·方式字定义:
*SC1、SC0 ─ 选择计数器
00 选择计数器0
01 选择计数器1
10 选择计数器2
11 非法
*RL1、RL0 ─ 读/写方式选择
00 锁定计数值操作
01 只读/写低八位计数值
10 只读/写高八位计数值
11 先读/写低八位计数值 后读/写高八位计数值
*M2、M1、M0 ─ 选择工作方式
000 方式0
001 方式1
010 方式2
011 方式3
100 方式4
101 方式5
*BCD ─ 选择计数值进制
0 选择二进制计数值
1 选择BCD码计数值
·方式说明:
8253的三个计数器按照各工作方式寄存器中控制字的设置进行工作。可以选择的工作方式有六种。
*方式0:计数到终点时中断
编程后自动启动,计数器开始减1计数,计数到终点(减到0)后输出高电平,可用作中断请求信号,在GATE为低电平时
停止计数,回到高电平继续往下计数。再次启动要重新装入计数值或重新编程。
*方式1:可编程单脉冲输出
在GATE上升沿进行初始化并开始计数,输出低电平的宽度等于计数时间。单脉冲输出可用GATE上升沿多次触发。
*方式2:比率发生器
编程后重复地循环计数。计数到终点时输出一个时钟周期宽度的低电平脉冲,自动初始化后继续计数。用GATE的上升沿
初始化并开始计数。GATE为低电平时停止计数。
*方式3:方波比率发生器
这种方式也在编程后重复地循环计数,输出波形为方波。如果初始计数值为偶数,每个输入时钟脉冲使计数器减2,
达到计数终点时输出电平改变。如果初始计数值为奇数,则输出高电平时第一个时钟输入脉冲使计数器减1,随后每个输入脉冲使计数器减2,
输出为低电平时第一个输入脉冲使计数器减3,随后每个输入脉冲使计数器减2,达到计数终点时输出电平改变,计数器自动初始化后继续计数,
用GATE的上升沿初始化并开始计数。GATE为低电平时停止计数。
*方式4:软件启动选通脉冲输出
编程后自动启动,计数到终点后输出一个时钟周期的低电平脉冲。在计数期间,如果写入新的计数常数值,则在下一个
时钟脉冲到来时开始新的计数周期。GATE为低电平时停止计数,恢复为高电平时,继续计数。
*方式5:硬件启动选通脉冲输出
编程后,等待GATE上升沿初始化并开始计数,计数到终点后输出一个时钟周期的低电平脉冲,计数器开始计数后不受
GATE信号电平的影响。这种选通脉冲的输出可用GATE的上升沿多次触发。
⑵编程步骤:
写入各通道方式字和时间常数:
OUT &H613,&h94 ;置通道2方式字
OUT &H612,nn ; 置通道2计数值
OUT &H613,&h54 ;置通道1方式字
OUT &H611,nn ; 置通道1计数值
每个通道一旦写入时间常数便开始工作(起动)。
2.PC主机中8237 DMA控制器编程
DMA控制器有4个8位DMA通道,PC-1216-K板使用通道1或通道3。
①.DMA通道和页寄存器的对应关系
DCH0 -- 87H; DCH1 -- 83H; DCH2 -- 81H; DCH3 -- 82H;
②.DMA控制器简介:
·通用地址寄存器:用于DMA传送期间保存地址数值, 在传送期间可自动加/减1。
·通用计数寄存器:在DMA传送期间测定传输字节的数量, 每传送一次自动减1。
·基地址寄存器:存放地址原始数值,用于自动预置方式下复位通用地址寄存器。
·基计数寄存器:存放计数原始数值,用于自动预置方式下复位通用计数寄存器。
·命令寄存器:用于控制8237操作,按命令寄存器程序规则进行编程,用总清指令清除。
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
0位:0 禁止存储器到存储器传输 1 允许存储器到存储器传输
1位:0 禁止通道0保存地址
1 允许通道0保存地址
2位:0 允许控制
1 禁止控制
3位:0 正常计时
1 压缩计时 × 当0位数值为1时无关
4位:0 固定优先极
1 循环优先极
5位:0 滞后写操作周期
1 延长写操作周期 × 当3位为1时无关
6位:0 请求信号DREQ高电平有效 1 请求信号DREQ低电平有效
7位:0 响应信号DACK低电平有效 1 响应信号DACK高电平有效
·方式寄存器:确定DMA控制器各通道工作方式。
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
0,1位:00 选择通道0 01 选择通道1
10 选择通道2 11 选择通道3
2,3位:00 检验传输 01 写传输
10 读传输 11 非法 ×× 当6,7位为11时无关
4位: 0 禁止自动预置 1 允许自动预置
5位: 0 地址加一
1 地址减一
6,7位:00 选查询方式传输 01 选单一字节传输方式
10 选块传输方式 11 级联方式
DMA控制器口地址:
| DMA口地址 | 寄 存 器 名 称 | |
| 读 (-IOR) | 写 (-IOW) | |
| 0H | CH0当前地址寄存器 | CH0基地址寄存器 |
| 1H | CH0当前字计数寄存器 | CH0基字计数寄存器 |
| 2H | CH1当前地址寄存器 | CH1基地址寄存器 |
| 3H | CH1当前字计数寄存器 | CH1基字计数寄存器 |
| 4H | CH2当前地址寄存器 | CH2基地址寄存器 |
| 5H | CH2当前字计数寄存器 | CH2基字计数寄存器 |
| 6H | CH3当前地址寄存器 | CH3基地址寄存器 |
| 7H | CH3当前字计数寄存器 | CH3基字计数寄存器 |
| 8H | 状 态 寄 存 器 | 命 令 寄 存 器 |
| 9H | 请 求 寄 存 器 | |
| AH | 屏蔽寄存器单个屏蔽位 | |
| BH | 工 作 方 式 寄 存 器 | |
| CH | 清 除 先 后 触 发 器 | |
| DH | 暂 存 寄 存 器 | 清 除 指 令 |
| EH | 清 屏 蔽 寄 存 器 | |
| FH | 写屏蔽寄存器全部位 | |
·请求寄存器:响应DMA服务请求,可用软件和DREQ 发出请求置位信号。
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
0,1位:00 选通道0 01 选通道1
10 选通道2 11 选通道3
2位: 0 复位请求位 1 置位请求位
3-7位:无关
·屏蔽寄存器:每个通道有一关联的屏蔽位,屏蔽位置位使新来的请求信号无效。此寄存器有两种方式控制,一种方式是单一位控制,
对应的I/O口地址为0AH,另一种方式为所有屏蔽位控制,对应I/O 口地址为0FH。
| 0AH口数据定义: | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
0,1位:00 选择通道0
01 选择通道1
10 选择通道2
11 选择通道3
2位: 0 清除屏蔽
1 设置屏蔽
3-7位:无关
| 0FH口数据定义: | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
0位=1 通道0计数完成
1位=1 通道1计数完成
2位=1 通道2计数完成
3位=1 通道3计数完成
4位=1 通道0请求
5位=1 通道1请求
6位=1 通道2请求
7位=1 通道3请求
·临时寄存器:此寄存器用于存储器到存储器传输数据期间保存数据,可读到传输的最后一个字节。
⑶初始化DMA控制器编程:
由于IBM PC计算机上电后其BIOS已对DMA 控制器做了必要的初始化工作,用户只需按如下步骤继续对通道1或通道3
进行初始化, 即可使PC-1216-K板通过1通道或3通道传输数据。
·屏蔽通道1请求 OUT &H0A,5
·清字节指针触发器 OUT &H0C,0
·写方式字 OUT &H0B,MW
数值MW取值为:自动预置 = 55H ,非自动预置 = 05H
·写1通道页寄存器及页控制寄存器 OUT &H83,DMAPAGE
DMAPAGE — 数据缓冲区页地址
·写地址寄存器
OUT 2,LA
OUT 2,HA
写地址寄存器必须写两次,第一次写16位绝对地址的最低8 位数值,第二次写另外8位数值。
·写计数寄存器
OUT 3,LC
OUT 3,HC
写计数寄存器同样需要写两次,第一次写低8位计数值, 第二次写高8位计数值。
·清屏蔽位 OUT &H0A,1
用户编程时应将初始化DMA的程序放在启动8253定时器指令之前。
例3.DMA定时采数程序
设采样间隔为100uS,采样长度为10K WORD,通道为CH4
编程步骤如下:
1.计算定时常数C C = 100 / 0.25 = 400
2.将C分为C1(通道1时间常数)和C2(通道2时间常数),C2应≥8,若C2 = 8,则 C1 = C / C2 = 400 / 8 = 50
3.将采样长度分为低8位和高8位
LH = INT(10240 / 256) = 40
LW = 10240 - LH * 256 = 0
4.程序清单
10 OUT &H614,&H14 '设置A/D通道号
20 OUT &H0A,5 '设置DMA通道1
30 OUT &H0C,0 '清除先后触发器
40 OUT &H0B,MW '写DMA方式字
50 OUT &H83,PAGE '置1通道页寄存器(3-9) /数据缓冲区段地址
60 OUT &H02,0 '数据缓冲区初始地址低8位
70 OUT &H02,0 '数据缓冲区初始地址高8位
80 OUT &H03,0
90 OUT &H03,40 '置采数长度
100 OUT &H613,&h94 '置8253通道2方式字
110 OUT &H612,C2 '置通道2计数值
120 OUT &H613,&h54 '置8253通道1方式字
130 OUT &H611,C1 '置通道1计数值
六、各种高级语言编程技巧
(一)BASIC语言
1.欲提高解释BASICA程序的执行速度,可将10进制数据改为16进制数据。将循环语句改为分组单次操作语句。另外还可以对解释BASIC 程序
进行编译。编译后的BASIC程序比解释BASIC程序运行速度快3~10倍。
2.建立数据段提取数据
BASIC语言中POKE和PEEK语句与DEF SEG语句结合起来可对任一内存单元寻址。POKE、PEEK语句直接访问DEF SEG所定义的64K字节的RAM区。
举例如下:
500 DEF SEG=&H3000
510 LB=PEEK(0)
520 HB=PEEK(1)
530 D=HB*16+LB/16
540 V=(D-2048)*10/4096
550 PRINT D,V
3.数据写入磁盘
使用BASIC语言中BSAVE命令可一次将64K字节的数据存入BSAVE命令定义的磁盘文件中。
格式: BSAVE "filename",offset,length
说明: filename填入数据文件名,缺省扩展名则默认为 .BAS ,offset是 DEF SEG指明段的偏移量,取值范围0~65535。lenght是存盘数据的长度,取值范围1~65535。
程序举例:
600 DEF SEG=&H3000
610 BSAVE"DATA.DAT",0,65535
4.使用BLOAD命令可将用BSAVE命令保存在磁盘上的数据文件调入内存。此命令与BSAVE一样可一次装入64K字节数据。
格式:BLOAD "filename",[offset]
说明: filename填入数据文件名,缺省扩展名则默认为 .BAS ,offset是 DEF SEG指明段的偏移量。若缺省则取BSAVE 命令中指定的偏移量。
程序举例:
650 DEF SEG=&H3000
660 BLOAD"data,dat",0
BLOAD命令的其他使用方法,请参阅BASIC手册。
使用汇编语言编程的用户可参考BASIC语言调用方法进行编程。
用户编程时可参考PC-1216-K的检测程序。
5.BASIC调用机器语言子程序方法
在使用计算机进行过程控制,数据采集的工作中,为提高程序运行速度,往往需要调用机器语言子程序。以下介绍CALL
语句调用的子程序的建立方法、装入方法和CALL语句调机器语言子程序的方法。
⑴先编写汇编语言子程序:
·假设文件名为SUBRT.ASM。
格式:CODE SEGMENT
ASSUME CS:CODE
SUBRT PROC FAR
PUSH BP
MOV BP,SP
. .
POP BP
RET n
SUBRT ENDP
CODE ENDS
END
注:①子程序不能设置栈段,若需用栈段可另辟。
②n等于CALL语句所有参数的地址偏移量在栈内所占字节数。
③子程序用SS:BP访问堆栈。
·使用MASM.EXE程序汇编子程序得目标文件SUBRT.OBJ。
·使用LINK.EXE程序将汇编好的子程序目标文件连接在内存的高位,即使用/HIGH参数。
格式:LINK/HIGH SUBRT.OBJ
经连接得到子程序的执行文件SUBRT.EXE。
·使用调试程序DEBUG.COM装入子程序的执行文件。用调试程序的R命令显示寄存器数据:记录CS、IP和CX寄存器中的十六进制数值。
·使用调试程序的 N,L 命令装入BASICA.EXE程序。使用G命令运行BASICA.EXE程序,并在BASICA下建立程序。
10 DEF SEG=CS
20 BSAVE"SUBRT.DAT",IP,CX
10行CS处填入记录的CS寄存器的数值,20行 SUBRT.DAT是子程序映象文件名,IP处填入记录的IP寄存器中的数值,CX处填入记录的CX
寄存器中的数值。完成以上步骤就可得到子程序的机器码文件。
⑵装入方法
在BASIC主程序加入以下程序,就可将子程序调入内存指定单元。
DEF SEG=SEGMENT
BLOAD "SUBRT.DAT",offset
SEGMENT处填入子程序的段地址,SUBRT.DAT是子程序映象文件名,offset处填入子程序的地址偏移量。
⑶CALL语句调用机器语言子程序
格式:CALL numver [variable,...,variable]
说明:numver是一个数字变量的名字,此变量的数值是子程序开始处的存贮器地址的偏移量。子程序开始处的段地址由 DEF SEG
语句指定。
举例如下:
100 DEF SEG=&H2000
110 SUBRT=0
120 CALL SUBRT(A%,B%,C)
6.使用BASIC语言装入中断服务程序
使用中断将给过程控制、数据采集工作提供极大的方便。 用BASIC语言装入中断服务程序的方法类似于BASIC调用机器语言
子程序的方法。其中建立中断服务程序的方法与机器语言子程序的建立方法一样,装入方法也一样,可完全照搬,不同之处只是要修改中断向量。
下面就中断向量的修改方法作必要的介绍。
IBM PC/XT计算机中断控制器八级中断号分别为8、9、A、B、C、D、E和F。对应的中断请求信号为IRQ0、IRQ1、IRQ2、IRQ3、
IRQ4、IRQ5、IRQ6和IRQ7。
62总线扩展槽引出其中6根请求线,即IRQ2~IRQ7。用户的PC 机可使用IRQ3~IRQ7 。 这几个中断的向量分别存放在绝对
地址 &H0028 ~&H002B、&H002C~&H002F和&H0034~&H0037的内存中,PC-1216-K 使用IRQ3~IRQ7。修改中断向量
步骤:
⑴保存原向量。
⑵写入用户中断程序的入口地址。
程序举例:
100 DEF SEG=&H0000
110 IPL=PEEK(&H28)
120 IPH=PEEK(&H29)
130 CSL=PEEK(&H2A)
140 CSH=PEEK(&H2B)
150 POKE &H28,0:POKE &H29,0
160 POKE &H2A,0:POKE &H2B,&H27
说明:
100行设置段地址为0,110和120行保存原向量的偏移量,130和140行保存原向量的段地址。140行写入用户中断服务程序起始地址的偏移量
,150 行写入段地址。用户中断服务程序装在&H2700 段内。起始地址偏移量为 0。用户在编写中断服务程序时应特别注意在服务
程序结束处发中断结束信号,即向 20H 口写 20H。
(二)PASCAL语言编程
1.PASCAL语言与汇编语言的链接用汇编语言编写的程序可以作为PASCAL的过程或函数被调用。
⑴建立汇编语言子程序
①格式:
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE
PUBLIC SUBRT
SUBRT PROC FAR
PUSH BP
MOV BP,SP
.
POP BP
RET n
SUBRT ENDP
CODE ENDS
END
②用MASM.EXE汇编子程序生成目标文件SUBRT.OBJ。
⑵PASCAL语言调用格式是:
PROGRAM MYPRO
{$L SUBRT}
{$F+}
PROCEDURE SUBRT(MM:WORD):WORD;EXTERNAL;
{$F-}
BEGIN
.
END.
其中$L编译指令链接子程序目标文件,$F+ 指明子程序为长调用,并且用机器语言编写的过程或函数必须被声明为外部的。
当子程序为函数时,其结果作为第一个参数首先入栈,然后其它参数顺序入栈,访问它们可用BP加一个固定偏移量作地址。
⑶举例说明:
主程序如下:
PROGRAM Main;
Uses crt,dos;
TYPE
adarray=array[0..1024] of word;
VAR
ad,i,count :word;
chp :byte;
adbuf :^adarray;
{$L ADIN}
{$F+}
PROCEDURE ADIN(chp:byte;count:word;adbuf:pointer);EXTERNAL;
{$F-}
BEGIN
read(chp,count);
getmem(adbuf,4096);
repeat
adin(chp,count,adbuf);
for i:=1 to 600 do
begin
ad:=adbuf^[i];
ad:=ad div 16;
ad:=ad and $fff;
writeln(ad);
end;
until keypressed;
freemem(adbuf,4096);
END.
*子程序ADIN.ASM见测试软件。
2.PASCAL语言调中断服务子程序方法
⑴中断服务子程序格式:
PROCEDURE INTHANDLER(FLAGS,CS,IP,AX,BX,CX,DX,SI,DI,ES,BP:WORD);
INTERRUPT;
BEGIN
.
END;
在入口时,中断过程自动保存所有的寄存器(不管过程头如何)并初始化DS寄存器。
注意:在缺少STI指令时,可以被再中断。应用INLINE语句, 可以自己产生这个代码。出口代码恢复寄存器并执行中断返回指令。
中断过程可以改变它的参数,改变已说明的参数将在中断处理返回时改变对应的寄存器。
含有硬中断的过程不能使用TURBO PASCAL的输入输出和动态存储分配程序,因为这些程序都是不可重入的;也不能使用 DOS 功能,
因为DOS也是不可重入的。
⑵主程序中应有保存原中断向量、设置将要调用的新的中断向量及在程序结束前恢复原中断向量等语句,如:
GETINTVEC ($1B,INT1BSAVE);
SETINTVEC ($1B,@INT1BHANDLER);
. .
SETINTVEC ($1B,INT1BSAVE);
其中:GETINTVEC ($1B,INT1BSAVE)语句的功能是把内存$1B单元的原中断向量保存在变量INT1BSAVE中;SETINTVEC ($1B,@INT1BHANDLER)
语句是把名为INT1BHANDLER的中断服务程序的首地址(即新的中断向量)置入内存$1B单元;显然SETINTVEC ($1B,INT1BSAVE)的功能是
恢复原中断向量于$1B中。
(三)C语言与汇编语言的链接
1.建立子程序(与PASCAL调用格式大致相同)
格式:
-TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:_TEXT
PUBLIC _SUBRT
_SUBRT PROC NEAR(或FAR)
PUSH BP
MOV BP,SP
SUB SP,n ;在栈内为局部变量保留 n字节
PUSH DI
PUSH SI
. .
POP SI
POP DI
MOV SP,BP ;当有SUB BP,SP指令时
RET
_SUBRT ENDP
_TEXT ENDS
END
2.汇编子程序可以象C的普通函数被调用,C程序的调用格式是:
MAIN()
{
.
}
3.举例说明:
子程序完成 1 + 2 = 3的计算,主程序将结果打印出来。
主程序如下:
MAIN()
{
PRINTF("1+2=%d\n",ADD(1,2);
}
子程序如下:
_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:_TEXT
PUBLIC _ADD
_ADD PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,[BP+4]
ADD AX,[BP+6]
RET
_ADD ENDP
_TEXT ENDS
END
运行结果:
1+2=3
说明:
①C的编译程序将自动到AX/DX寻找函数的结果,因此必须把子程序的结果放入 AX(结果为WORD),或放入 AX/DX(结果为DWORD)。本例AX = 3。
②带入子程序的参数以反序压入堆栈(与BASIC、PASCAL 的调用格式刚好相反),每个参数所占字节由它的类型决定。
③本例调用类型为 NEAR(短调用), 故返回地址在栈内占两字节(仅是返回地址的偏移量);若调用类型为FAR(长调用), 则返回地址(包括段和偏移量)在栈内占四字节。
无论是PASCAL还是C都有多种编译程序, 每种编译程序的调用约定可能略有不同,使用时请参阅有关书籍。
七、安装与调整
(一)、安装
1.安装PC-1216-K前应根据需要将板上跨线短路器设置好。
2.关掉主机电源后打开机箱盖,将PC-1216-K插入空余的扩展槽中。
3.将固定螺钉拧紧后即可打开主机电源进行检测调整工作(检测调整方法见检测及调整说明部分)
4.调整正常后,关掉主机电源,将机盖装好。
(二)、检测及调整
PC-1216-K配有检测程序,检测程序文件名为1216K.EXE板上最多装有六个调整电位器,用于调整AD,DA转换器的满度量程
和零点偏移。
1.检测
在PC-1216-K正确装入主机后,打开主机电源,运行检测程序。 屏幕将出现屏幕菜单,用户根据AD,DA所设置的工作极性
选择项号进行检测。检测时应先选择AD 或 DA项,然后进行DMA方式的检测。
2.调整
(1)A/D调整
运行检测程序1项:A/D Conversion
首先根据A/D设置的极性运行1至3项。
调整VR3(调整单极性零点)、VR5(调整双极性零点)使显示的电压值为0V;
调整VR4使显示值为输入电压;
反复调整,使A/D正确。
(2)DMA测试
运行检测程序3项:A/D DMA Demo
单次输入'5';多次输入'85'。
(3)I/O测试
运行检测程序6项:
检测输出与输入是否相同
(4)A/D放大器调整
PC-1216-K为小信号模拟量输入设计了缓冲放大器, 用户可根据需要调整放大器增益。
PC-1216-K1/2为普通同相放大器,增益计算公式:A = 1 + (Rf/Ri)。
出厂设置为± 10V时, A = 1 (Rf=1K )
PC-1216-K3为仪器放大器,增益计算公式:A = 1 + 49.4K/Rg, Rg 与ADZ为同一位置。
(5)输入滤波电容的配接
PC-1216-K板为了方便用户,在信号输入端可加上RC滤波网络:
f0 (Hz) =159 / R * C 例:f0 =15.9KHz , R =1K , C =0.01 .

八、附 录
磁盘文件说明:
① 1216K.PAS : PC-1216-K 板检测源程序
② 1216K.EXE : PC-1216-K 板检测程序
③ ADIN.ASM : PC-1216-K 汇编程序
④ ADIN.OBJ : ADIN.ASM 的目标文件
⑤ MASM.EXE : 宏汇编程序
⑥ LINK.EXE : 连接程序
*可提供WINDOWS环境使用的动态连接库.
公司地址:北京海淀北三环中路31号生产力大楼1206室 邮编:100088 e_mail:webmaster@xiangyun.com.cn 市场部 Tel:82002398 传真:82002398 技术部 Tel:82002399 |
返回主页 |