微机原理与接口技术实验讲稿PPT.ppt_第1页
微机原理与接口技术实验讲稿PPT.ppt_第2页
微机原理与接口技术实验讲稿PPT.ppt_第3页
微机原理与接口技术实验讲稿PPT.ppt_第4页
微机原理与接口技术实验讲稿PPT.ppt_第5页
已阅读5页,还剩178页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理与接口技术 实验讲稿(PPT),实验项目,实验箱简介 基于 EPP接口的LED显示 8255并行接口原理及编程 8253计数器原理及分频实验 8253计数器在测频中的应用 双积分式A/D 转换器7109 的原理及编程 逐次比较式A/D转换器0809的原理及编程 D/A转换器0832的原理实验 DAC0832在程控信号源中的应用 LED点阵显示 基本并行输入/输出口在键盘接口中的应用 8250串行通信 电子称实验,实验箱简介,实验箱的组成原理 实验主板的原理 实验主板是由并行I/O、定时器/计数器、 A/D转换器、D/A转换器及LED显示器等接口 部件构成,采用了总线结构,各功能部件 均通过内部总线进行连接,如下图所示。,实验主板的布局,EPP接口原理 EPP信号特性,其引脚定义如下图, EPP端口寄存器 端口地址如表下图所示。表中BASE为并 口基地址,,状态寄存器和控制寄存器各位具体定义如下图所示。, EPP接口初始化 在使用EPP之前应将并口置于正向传输模式(输出),即将控制寄存器的方向位(Bit5)置0。可编写EPP初始化函数epp_init()如下: void epp_init(void) outportb(0x37a,0x04); , EPP时序 数据/地址写周期时序,数据/地址读周期时序, EPP端口读写 计算机要同外设实验箱通信,就要通过EPP接口来读写数据,因此,首先应向EPP地址端口(BASE+3)写入欲访问的外设地址,然后从EPP数据端口(BASE+4)读写数据,每次读写1个字节,EPP端口写函数epp_write_data() void epp_write_data(unsigned char paddr,unsigned char data) outportb(0x37b,paddr); epp_check_clear(); outportb(0x37c,data); epp_check_clear(); ,EPP端口读函数epp_read_data() void epp_read_data(unsigned char paddr,unsigned char *data) outportb(0x37b, paddr); epp_check_clear(); *data = inportb(0x37c); epp_check_clear(); ,EPP接口与本实验平台的连接 ,如下,扩展接口 扩展接口的原理及管脚定义如下图所示。,键盘、点阵实验扩展板 ,原理框图如下:,串口实验扩展板 ,原理框图如下:,端口地址 为了方便同学们的在实验中更快,更方便的找到实验板上各个芯片的端口地址,在实验指导书上详细列出了各个端口的地址及其简要的功能描叙。,头文件 在本实验指导书的附录里,列举了部分实验的参考源程序,以便同学们在学习的过程中参考。为了使程序更简化、直观,将常用的地址端口和函数定义成头文件的形式,其头文件有: paddr.h 对实验板内地址进行了宏定义。 eppinit.h EPP接口初始化。 epprw.h EPP端口的读/写。 displed.h LED数字显示函数。,实验一 EPP接口驱动LED显示,实验目的 1熟悉EPP接口的输入/输出及读/写操作。 2掌握七段LED显示驱动原理及接口方法。 3熟悉C语言。,实验任务 1分析实验主板电路,指出输入/输出口地址。 2编写LED显示程序,使实验主板上的四个LED显示任意四位数字和任意一位的小数点,并通过调试。,实验原理 LED显示器原理 7段LED显示器的结构和8位字节数的对应关系如下图:, LED显示实验电路 实验箱主板上带有的四位LED显示器采用 四片CD4511(BCD七段锁存译码器)来驱 动 。其原理图如下:, 4位LED显示的端口操作为:,本实验共用到的端口地址及其功能介绍 00H(2Y0):输出口,用作后两位显示译码驱动器4511 的锁存使能信号。 01H(2Y1):输出口, 用作前两位显示译码驱动器4511 的锁存使能信号。 03H(2Y3):输出口, 用作4位小数点锁存器74LS273的 控制CLK信号。,编程与调试 程序说明 该程序设计功能为: 先从最高位开始依次显示1,2,3,4,显示时只有一位显示,其它位熄灭。 从高到低轮流点亮小数点。 依次显示0000,1111,2222,3333,一直到9999。, 编程思路, 编程步骤 调用自定义头文件 #include “paddr.h“ #include “epprw.h“ #include “displed.h“ #include “eppinit.h “ EPP端口初始化 epp_init(); LED的数字显示 在LED上显示某个数,只要在对应的字节上写入这个数即可,例如:要在 第二位LED上显示1,第一位LED上显示5,只要先向EPP地址端口写入这两位 的地址0x00(D_LED) ,再向EPP数据端口写入相应的数据。 epp_write_data(D_LED, 0x15); 如果想要熄灭某个LED,只要在相应的位上写入10到15的任意一个数。程序 中利用此方法循环点亮LED。,思考和练习题 若不对EPP接口进行初始化,会发生什么现象?为什么? 编写循环点亮四位小数点的程序。 可以同时点亮四位的小数点吗?如果可以,应怎样设置其端口控制字?,实验二 8255并行接口原理及编程,实验目的 1.熟悉8255内部结构和外部引脚定义。 2.熟悉8255并行接口的原理和接口方法。 3.掌握8255的简单应用编程。,实验任务 1编写出8255的初始化程序。 2编写出循环控制发光二极管的显示程序, 并运行通过 3编写出交通灯控制模拟程序。 4理清8255的一些与实验板上其他芯片相连 接的I/O端口电路。 5掌握对8255PC口的位操作。,实验原理 8255工作原理 8255有8条数据引脚D0D7,它们全部是双向、三态,用来与数据总线相连接; 另外,还有6条输入控制引脚,分别是: RESET: 复位输入信号,高电平有效。当RESET有效时,将梭鱼哦内部寄存器, 包括控制寄存器清零,而且把A、B、C三个都设为输入方式,对应的PA7PA0、PB7 PB0、PC7PC0引脚均为高阻态。 CS:芯片选中信号,输入低电平有效。只有当它为低电平时,8255才被CPU选 中。 A0和A1:芯片内部寄存器的选中信号。当有效时,8255被选中,再由A0、A1 的编码决定选中通道A、B、C,还是控制寄存器。 RD:读信号。输入低电平有效。当它为低电平时,由CPU读出8255的数据或者 状态信息。 WR:写信号。输入低电平有效当它为低电平时,由CPU将数据或命令写到8255。 CS、A0、A1、WR、五根引脚的电平与8255操作的关系,详见下表,8255通道选择和基本操作表, 8255控制字 8255方式选择控制字,方式0基本输入/输出 方式1选通输入/输出 方式2双向数据传送, 8255按位置位/复位的控制字 通道C的每一位都可以通过向控制寄存器写入置位/复位控制字, 而使它相应位置位(即输出为1)或复位(即输出为0)。通道C置位、 复位控制字的具体格式下图所示。, 实验电路图,本实验用到的端口地址: 23H(1Y1):输出口,8255的控制端口 20H(1Y1):输出口,8255端口A的地址 21H(1Y1):输入口,8255B端口B的地址 22H(1Y1):输入/输出口,8255端口C的地址,编程与调试 (一)交通灯实验 1程序说明 通过对8255的A口读/写命令,来循环点亮与A口相 连接的红、黄、绿三个发光二级管。在点亮的过程中, 同时在LED上显示时间,从60秒开始倒计时,60秒到6 秒红灯亮,5秒到1秒黄灯亮,然后再从从60秒开始倒 计时,60秒到6秒绿灯亮,5秒到1秒黄灯亮。依次循环。,2编程思路,3编程步骤 调用自定义头文件(同上实验一)。 EPP端口初始化(同上实验一)。 初始化8255。 在本实验中设计为方式0、A口输出、B口输入,故向控制寄存器写 入的数据为0x82。在交通灯的实验中,我们就用到A口的输出。8255 的片选由1Y1来控制,其控制寄存器的地址为0x23(CW_8255)。 epp_write_data(CW_8255,0x82); 向8255的A口写数据。 由指示灯的硬件电路可知,与其相连的端口输出为低电平,指示 灯亮;输出为高电平,指示灯灭。 在本实验中我们要依次点亮红色、黄色、绿色、黄色。 epp_write_data(PA_8255, 0xfe); /*点亮红色指示灯*/ delay(10000); /*延时*/ epp_write_data(PA_8255, 0xfd); /*点亮黄色指示灯*/ delay(10000); epp_write_data(PA_8255, 0xfb); /*点亮绿色指示灯*/ delay(10000); epp_write_data(PA_8255, 0xfd); /*点亮黄色指示灯*/, 点亮实验板上的LED。 在点亮指示灯的同时,要在LED上显示点亮时间,这个数字显示 程序可直接调用上面介绍过的LED数字显示程序。 epp_write_data(PA_8255, 0xfe); /*点亮红色指示灯*/ for( i=60;i5;i- ) /* 点亮时间55秒*/ displed(i,0); /*调用LED数字显示函数*/ for( j=0;j100;j+ ) delay(1000); if(kbhit() exit(0); 4源程序清单 参考指导书附录I-2。,(二)A、B并行口实验 1程序说明 该程序为通过操作与8255的B口相连的开关键,来控制与8255的A 口相连的发光二极管的亮和灭。 2编程思路,3编程步骤 调用自定义头文件(同上)。 EPP端口初始化(同上)。 初始化8255(同上)。 读取8255的B端口的数据 与8255的B端口相连接的是8个开关控制器,通过操作这些开关可以使与其相连的B端口呈现高电平“1”或者低电平“0”。 epp_read_data(PB_8255, 向A端口写数据 epp_write_data(PA_8255, data) 4源程序清单 参考实验指导书附录I-3。,思考和练习 1交通灯实验中如何同时点亮多个指示灯。 2. 能否从A口输出C口的获取量。 3在不同的工作方式下,考虑I/O口的外设连接。,实验三 8253计数器原理及分频实验,实验目的 1.熟悉8253定时器/计数器的功能及接口方法。 2.熟悉8253的分频原理。 3.掌握8253的分频应用编程。,实验任务 1分析本实验主板上8253的硬件电路原理。 2熟悉8253的工作原理后,编写出8253的 初始化程序。 3编写出8253分频程序,观察实验显现。,实验原理 8253的引脚 8253有3个独立的16位减计器通道,每一个通道有三条引线: CLK、GATE和OUT。 CLK: 输入时钟, 8253规定,加在CLK引脚的输入时钟周期 不能小于380ns。 GATE:门控信号输入引脚。这是控制计数器工作的一个外部 信号。当GATE引脚为低时,通常都是禁止计数器工作的;只有 GATE 为高时,才允许计数器工作。 OUT:输出引脚。当计数到“0”时,OUT 引脚上必然有输出, 输出信号波形取决于工作方式。,8253内部端口的选择及每个通道的读/写操 作的选择如下表所示, 8253的端口控制子, 8253的工作方式和输出波形,实验电路组成原理框图,本实验共用到六个端口地址: 23H(1Y1): 输出口,8255的控制端口 22H(1Y1): 输出端口(PC3),发出计数器0的闸门信 号(0为关,1为开) A0H(1Y5): 输入/输出端口,8253计数器0 的读写口 A1H(1Y5): 输入/输出端口,8253计数器1的读写口 A3H(1Y5): 输出端口,8253的控制寄存器的端口,编程与调试 1.程序说明 对8253的计数器0和1写入初值,使计数器1输出一定 频率的方波,从而使得与计数器1输出端相连接的指示灯 循环亮和灭。 2.编程思路,3.编程步骤 调用自定义头文件(同上实验一)。 EPP端口初始化(同上实验一)。 初始化8255。 8255的控制字应该定义C口的低位为输出口,工作方式为方式0。 epp_write_data(CW_8255,0x8a); PC3口置“0”,阻止脉冲输入。 初始化8253前,要阻止脉冲输入,就要向PC3口置0,8255的C口 的各个端口可以直接置位和复位。 epp_write_data(CW_8255,0x06); 初始化8253。 8253的计数器0、计数器1,工作方式分别为方式2和方式3,都是 先写低字节再写高字节和BCD码计数。向计数器0置入初值是1000, 向计数器1置入的初值也是1000。,/*8253的0口初始化,写1000进去*/ epp_write_data(CW_8253,0x35); epp_write_data(CT0_8253,0x00); epp_write_data(CT0_8253,0x10); / *8253的1口初始化,设置时间为1s*/ epp_write_data(CW_8253,0x77); epp_write_data(CT1_8253,0x00); epp_write_data(CT1_8253,0x10); PC3置“1”,允许脉冲输入。 epp_write_data(CW_8255,0X07); 4.源程序清单 参考实验指导书附录I-4。,思考和练习题 1向计数器0和计数器1写入不通的值,指示灯 会出现什么现象? 2计数器0和1采用不同的工作方式,指示灯有 什么现象。 38253的初始化要在一个脉冲的作用下才能完 成,这对实验中计数器输出信号的频率有没 有影响?,实验四 8253计数器在测频中的应用,实验目的 1了解频率测量原理。 2.掌握8253的应用编程。 实验任务 1.进一步理解8253的硬件电路原理。 2.根据测频原理,编写出8253的测频程序,并运行通过。,实验原理 频率测量原理 所谓“频率”,就是周期性信号在单位时间变化的次数。 若在一定时间间隔T内,计得这个周期信号得重复变化次 数为N,则其频率可表达为: fN/T。电子计数器就是严 格按照该定义进行测频得。其原理方框图和工作时间波 形下图所示。, 8253的工作原理。 自激振荡电路,图中将滑动变阻器Rw左边的阻值设为Rx,令R=RxR1。 当R=R2时,当RR2时,,本实验主板上设计的是第二种情况,通过调节滑动变阻 器Rw可获得不同频率的信号源。,电路原理, 输入单元:输入的待测信号fx有以下三种来源: a. AO2是自D/A0832(程控信号源)输出的信号,详见实验六。 b. FX是外界直接输入的信号。 c. 实验主板上自带的振荡电路源。 计数部分:被测频率信号由8253的计数器2计数, 时基信号产生与变换单元 逻辑控制单元 开门信号由8255的PC3控制。计数器0的输出(OUT0)和计数器1的时钟(CLK1)直接相连,计数器1的OUT1通过反相器,控制计数器2的CLK2的信号输入,完成硬件方面的控制。实验波形如下图4所示(计数器0、1、2的工作方式依次为方式2、0、2,闸门信号全部为高),闸门时间 在本实验中初始化8253时,设定计数器0、1、2的工作方式分别为0 方式2、0、2,向计数器0、1、2中置入的数据一次为为N0、N1、N2。 定义计数器0的时钟输入频率为F。闸门(PC3)打开后,信号F进入 计数器0,计数器0工作在方式2经N0分频后输出的波形信号频率f0为:,(1),计数器0输出的频率为f0的信号作为计数器1时钟信号(CLK1),计数 器1工作在方式0,经 N1分频后输出的波形信号频率f1为:,由式(1)、(2)得:,(2) (3),计数器1输出的频率为f1的信号作为被测信号fx的门控信号,则信号 f1的周期即为闸门时间T,由式(3)得:,(4),本实验共用到六个端口地址: 23H(1Y1):输出端口,8255的控制端口 22H(1Y1):输出端口(PC3),发出计数器0的闸门信号(0为关,1为开) 输入端口(PC6),读取计数器2的闸门信号(0为开,1为关) A3H(1Y5):输出端口,8253计数器的控制寄存器的端口 A0H(1Y5):输入/输出端口,8253计数器0 的读写口 A1H(1Y5):输入/输出端口,8253计数器1的读写口 A2H(1Y5):输入/输出端口,8253计数器2的读写口,编程步骤 1.程序说明 本程序是利用8253计数器,实现对未知频率信号的测频。实验过 程中,可以通过探测点TP9、TP10、TP11分别查看计数器0、1、2的 输出情况,通过测试点TP12、TP13测量经过74LS74输出的1Mhz、 5KHz的波形信号。 2.编程思路,4.编程步骤 调用自定义头文件(同上实验一)。 EPP端口初始化(同上实验一)。 初始化8255。 epp_write_data(CW_8255,0x8a); /*8255写控制字*/ PC3置0,阻值脉冲输入(同实验三)。 初始化8253。 /*8253的0口初始化,写1000进去*/ epp_weite_data(CW_8253,0x35); epp_weite_data(CT0_8253,0x00); epp_weite_data(CT0_8253,0x01); /*8253的1口初始化,设置时间为1s*/ epp_weite_data(CW_8253,0x71); epp_weite_data(CT1_8253,0x00); epp_weite_data(CT1_8253,0x10); /*8253的2口初始化,写ff进去*/ epp_weite_data(CW_8253,0xb4); epp_weite_data(CT2_8253,0xff); epp_weite_data(CT2_8253,0xff);, PC3置1,允许脉冲输入(同实验三) 读取计数器1的输出量(PC6)。 do epp_read_data(PC_8255, /*在实验主板上显示测频结果 */,4. 源程序清单 参考实验指导书附录I-5。 思考和练习题 1为什么计数器1要工作在方式0能否工作在其余的工作 方式下? 2图中计数器1和计数器0级联,计数器1是对计数器0的 溢出计数,其目的是什么? 3不通的闸门时间对测频结果是否有影响?如何影响? 48253的初始化要在一个脉冲的作用下才能完成,这对 用软件打开闸门的测频结果有什么影响?应该怎样降 低这种影响?,实验五 双积分式A/D 转换器7109 的原理及应用,实验目的 1.熟悉双积分式A/D转换器7109的工作原理和外围接口设计。 2.深化理解双积分A/D转换器及数字电压表的工作原理。 3.了解双积分式A/D转换器7109的简单应用程序。 4.掌握利用A/D转换器进行电压测量的基本方法。,实验任务 1.编写利用A/D转换器进行电压测量的程序,并通过运行。 2.分析测量数据的误差及其来源。,工作原理 其主要端口端定义如下: (1)B1B12:12bit的数据输出端 (2)OR:溢出判别,输出高电平表示过量程;反之,数据有效。 (3)POL:极性判别,输出高电平表示测量值为正值;反之,负值。 (4)MODE:方式选择, 当输入低电平信号时,转换器处于直接输出工作 方式。此时可在片选和字节使能的控制下直接读取数据;当输入高电平时, 转换器将在信号信号握手方式的每一转换周期的结尾输出数据(本实验选 用直接输出工作方式)。 (5)REF:外部参考电压输入(本实验用其典型值:2.048V)。 (6)INL,INH:输入电压端口(有效范围是参考电压的2倍)。 (7)OO,OI:外部时钟输入(本实验用其典型值:3.579MHz)。 (8)RUN/:运行/保持输入, 当输入高电平时,每经8192时钟脉冲完成一次 转换;当输入低电平时,完成正在进行的转换,并停在自动调零阶段 (9)STATUS:状态输出,输出高电平,表明芯片处于积分和反向积分阶段; 输出为低电平,表明反向积分结束,数据被锁存,模拟部分处于自动返回 零态阶段。,(10)CE/:片选,当其为低电平时,数据正常输出;当其为高电平时,所 有数据输出端(B1B12、POL、OR)均处于高阻状态。 (11)LBEN:低字节使能,输出低电平时,数据线输出低位字节B1B8。 (12)HBEN:高字节使能,输出低电平时,数据线输出当高位字节B9B12 以及POL、OR的状态值。 A/D转换时序(ICL7109直接接口方式),测量放大电路,如图选择不通电阻其增益分别为: 引脚“1”脚断开,增益选择为1倍。 引脚“1”和“10”相连,增益为10倍; 引脚“1”和“100”相连,增益为100倍; 引脚“1”和“200”相连,增益为200倍; 引脚“1”和“300”相连,增益为300倍;, A/D转换器7109实验原理图, 数据及控制信号接口,本实验共用到五个端口: 80H(1Y4):输出口,7109低位字节输出口。 60H(1Y3):输出口,7109高位字节输出口。 22H(1Y1):输入/输出端口,D2控制7109起停(R/H), D4位读取7109的状态(STATUS)信号(1正 在转换;0转换完毕)。 23H(1Y1):输出口,8255的控制端口,校准测量原理 参见实验指导书。,编程与调试 1.程序说明 本程序是利用实验主板上的7109A/D测量输入电压,输入电压有4 种选择,测量前必须将输入电压端口的跳线选择到需要测量的那个 端口。增益也有五种选择(1,10,100,200,300), 可根据实验需要选择某一档,并将其跳线连接好。实验测得的电压 值同时在PC机的CRT和实验主板内的LED上显示出来。 实验过程中,可以通过测试点TP2查看7109的工作状态,通过探 测点TP3查看7109芯片的启动状态。,2.编程思路,3.编程步骤 1调用自定义头文件(同上实验一)。 2EPP接口初始化(同上实验一)。 3初始化8255(同上实验二)。 epp_write_data(CW_8255, 0x8a); /*初始化8255*/ 4PC2置“1”。 8255的端口PC2与芯片7109的启动端口()直接相连,将PC2置“1”,则启动芯片7109让它开始工作。 epp_write_data(CW_8255,0x05);/*PC2置1,启动芯片7109的转换 */ 5读PC4的状态。 do epp_read_data(PC_8255, /*判断status值:为1正在转换;为0转换完*/,6PC2置“0”。 epp_write_data(CW_8255,0x04); /*PC2置0,R/=停止转换 */ 7读取7109转换完毕的数字量,并将其转化成电压值。 epp_read_data(H_7109, 9电压值显示在实验主板内的LED上。,源程序清单 参考实验指导书附录I-6。,思考和练习题 1. 双斜积分式A/D转换器7109芯片包括哪几个工作过程? 2. 7109的输入参考电压对A/D转换结果有何影响?如A/D转换结果 偏大,应如何调节参考电压? 3. 记录10组对2.048V的标准电压由7109A/D转换结果。如测量结果 偏大,可能是什么原因造成的? 4. 若输入电压的范围是0204.8mV,则参考电压应调节在多大? 此时电压测量的分辨率是多大? 5根据校准原理,试用校准方法测量(AIN+)输入的被测电压,并 显示结果。,实验六 逐次比较式A/D转换器0809的原理及编程,实验目的 1.熟悉逐次逼近式A/D转换器芯片的工作原理。 2.了解A/D转换芯片0809的接口设计方法。 3.掌握A/D转换器0809简单的应用编程。,实验任务 1.分析本实验板的电路原理。 2.编写出逐次逼近式A/D转换器芯片0809的转换与显示的控制 程序,测量通道0-7的输入的信号。,实验原理 0809工作原理 ADC0809是8路输入的8位逐次逼近A/D转换器,其转换时间为16个外部时钟周期。 其主要端口端定义如下: IN7IN0:八个模拟量输入端。 D7D0:数字量输出端。 ENABLE:输出允许信号。当此信号被选中时,允许从A/D转换器的锁存器中读取数字量。高电平有效。 START:启动A/D转换,当START为高电平时,A/D转换开始。 ALE:地址锁存允许,高电平有效。当ALE为高电平时,允许C、B、A所示的通道被选中,并把该通道的模拟量接入A/D转换器。 EOC:转换结束信号。当A/D转换结束后,发出一个正脉冲,表示A/D转换完毕。此信号可用作A/D转换是否完成的检测信号。 ADDA、ADDB、ADDC:通道号选择端,C为最高位,A为最低位。 CLOCK:外部时钟(本实验采用500KHz的时钟频率)。 Vref(),Vref():参考电压端,用来提供D/A转换器权电阻的标准电平(本实验采用典型值:Vref()=5V,Vref()=0V)。,A/D转换时序, 被测电压与A/D转换结果关系,式中: Vin 0809A/D转换器输入电压。 NADC 0809A/D转换结果的8bit数字量; Vr 0809A/D转换器外部参考输入电压,Vr5.00V;, 数据及控制信号接口, A/D转换器0809实验电路图,本实验共用到三个端口: 40H47H(1Y2):输入/输出端口,0809的地址,控制 字任意。 23H(1Y1):输出端口,8255的控制端口。 22H(1Y1):输入端口,查询0809转换状态信号(“0”正 在转换;“1”转换完毕)。,编程与调试 (一)0通道测量电压 1程序说明 输入电压有4种选择,测量前,在实验主板上必须将跳线选择到 需要测量的那个端口。增益也有五种选择(1,10,100, 200,300),可根据实验需要选择一档,并在实验板上将其跳 线连好。实验测得的电压值显示在PC机的CRT和实验主板的LED上。 2编程思路,3编程步骤 调用自定义头文件。 EPP端口初始化。 初始化8255。 epp_write_data(CW_8255, 0x8a); 启动芯片0809。 epp_write_data(AD_0809,0x00); /*启动0809进行转换*/ 读取转换状态量 void eoc(void) unsigned char status; do /*读8255的pc5的值,为1时转换完毕*/ epp_read_data(PC_8255, /*状态为0时,继续读取状态转换量*/ , 读取A/D转换完毕的数字量,放入firstdata中。 epp_read_data(AD_0809, 在LED上的显示被测电压值。 4源程序清单 参考实验指导书附录I-7。,(二)测量17通道电压 测量17通道电压的编程思路和测量0通道的输入电压一样,所不通的只是要根据信号的输入通道来确定其输入端口的地址,通道不同其端口地址也不同。下面就仅介绍如何获取通道地址,其余部分参见上面的0通道测量电压实验。 程序的开始要输入当前实验所采用的输入通道(cha),如: printf(“Please input the channel which you will measure(int 1-7) :“); scanf(“%d“,/*输入值是被测信号输入的那个通道*/ 芯片0809的基地址为:0x40(AD_0809),选择通道后,该通道的地址就为:0x40cha(AD_0809cha)。即程序中对端口地址的读写就不再是0x40,而是0x40cha。 参考程序实验指导书附录I-8。,思考和练习题 1用AD0809采集交流正弦波形,调节信号频率从 100Hz增加,观察显示波形的变化。当多高频率时,显示 波形异常,解释此现象? 2.利用实验五介绍的校准方法,思考如何进行校准测 量? 3.编写0通道的有校准测量的实验程序,电压输入端 选择04.096V,调节其输入电压值,比较有无校准的测 量结果,参考源程序见实验指导书附录I-9) 。,实验七 D/A转换器0832的原理实验,实验目的 1.了解典型D/A转换器DAC0832的工作原理。 2.掌握芯片0832的接口设计方法。,实验任务 1.找出本实验中芯片0832的地址。 12.编写实验程序,向0832输入不通的数字电压以获得其相应的模拟电压输出,并运行通过。 3.记录实验中电压的输出值。,实验原理 DAC0832工作原理 主要引脚定义如下: DI0-DI7:8条数据输入线。 ILE、CS、WR1:三条为输入锁存器的选通线,其中ILE为输 入锁存器允许信号输入线(高电平有效),为片选信号输入线(低 电平有效),为写信号输入线(低电平有效)。只有当三条线同时 有效时,输入数据锁存器才被选通。 XFER和WR2:二条为DAC锁存器选通线,其中XFER为传送控制 信号输入线(低电平有效), WR2为写信号输入线(低电平有效), 只有当二条线同时有效时,DAC锁存器才被选通。, D/A电流输出表达式,式中, Io1 DAC0832输出电流;(Io1Io2常数); NDAC DAC0832数字输入量; Vr DAC0832外部参考输入电压; R DAC0832内部固定电阻,恒为5K。, DAC0832数/模电压转换实验电路,芯片0832的数字电压输入端口(DI7DI0)与实验主板上的八位 双向数据总线(D7D0)相连;与地址线2Y5相连,则其地址为05H; 参考电压有以下两种选择: AO1来自实验主板上的信号源(参见实验八)。 Vr5V来自实验主板上的参考电压源,实验电路原理如下图。,Vr5V实验电路, 输出电压值的计算 DAC0832直接得到的转换输出信号是模拟电流,为得到电压输出, 实验电路加了一个运算放大器,得到单极性的电压输出。其中, R=5k;Rfb=15k是固定的内部电阻。则,D/A转换后的输出电压,在本实验中参考电压Vref选择实验主板上的参考电压源Vr5V,其理 论值为5V,则D/A转换后的输出电压就为:,本实验只用到一个端口地址: 05H(2Y5):输出口,DAC0832(IC35)的地址。,编程与调试 (1)程序说明 向实验主板上的DAC0832(IC35)写入不同的数字(0 256),在其输出端测量其相应的电压值,因实验主板上 测试点AO2与其输出端口直接相连,只要测量测试点AO2, 就可获取经DAC0832的转换电压。程序中在PC机的CRT上 还将显示对应的理论电压值,以便实验者参考。,(2)编程思路,(3)编程步骤 1调用自定义头文件(同实验一)。 2EPP接口初始化(同实验一)。 3启动芯片DAC0832(实验主板上的IC35)。 epp_write_data(DA2_0832,0x00); /*启动0832(IC35)芯片*/ 4向0832写入数据。 DAC0832是8位的D/A转换器,故写入的数据应该在0256之间。epp_write_data(DA2_0832,number); 5在PC机的CRT上显示转换电压。 volt=(float)(number*5.00/256);/*电压转换*/ printf(“n%.2f“,volt); /*输出模拟电压值*/,思考和练习题 1.为什么测得的电压值和理论值有区别? 2.数字输入“0”时,其输出电压为什么不为0? 3.测量电压时,万用表的负极分别和实验主板上的模拟 地和数字地相连接,其测得的结果是不是一样?如 不一样,为什么? 4.测得的电压值与输入数字0时获得的电压值的差值与其 相应的理论电压有什么关系?,(4) 源程序清单 参考程序见实验指导书附录I-10,实验八 DAC0832在程控信号源中的应用,实验目的 1.了解数字式信号波形合成的原理和方法。 2.掌握程控信号源的工作原理及实现方法。,实验任务 1.根据本实验的电路原理图确定各端口的地址。 2.通过EPP接口控制相应端口,使之产生不同波形、不同频率和幅度的信号。,实验原理 波形的数字合成原理 在波形的数字合成中,通常是向D/A转换器输入端提 供特定的数据流,则在输出端便可获得相应函数波形的 信号电压。,如图(a)所示的一个八位二进制的加法计数器对时钟计数过程中,计数值N按0、1、2、3255、0、1、2、3规律递增变化,得到一串8位二进制码的数据流,把它送入DAC的输入端,则DAC的输出Uo(t) 呈梯形的增长,获得如图(b)所示的波形。若每步跳为0.01V,则Uo(t)从02.55V的范围变化。 若采用一个可逆计数器对时钟信号交替地作加、减计数时,N的变化为0、1、2、3255、254、2533、2、1、0、1、2,则Uo将获得一个三角波的输出电压。,本实验如果采用所示的方案,在计数器和DAC之间 接入一个ROM,先在ROM中写入某一函数的幅值数据,根 据加法(或减法)计数器提供的地址码,取出相应地址 单元的内容,送至DAC输入端,则可获得任意波形的输出。 如三角波、矩形波、正弦波、辛克波(sinx/x)、钟形 波等。, DAC0832工作原理 程控信号源实验电路,程控的实现 在8KB 的EPROM中固化有16种波形数据,由高4位地址A8A11选择;每一 种波形的一个周期由256个数据代码构成,由低8位地址A0A7寻址。EPROM 高4位地址A8A11来自锁存器74LS273的高4位Q5Q8,通过对74LS273的编 程可实现波形的程控。 选择好波形后,该波形的256个数据点的8位地址A7A0由一个8位地址计 数器(二进制计数器)循环计数产生。实验主板上采用了两个4位二进制计 数器74LS169级联实现。通过改变地址计数器的输入时钟频率便可控制波形 数据从EPROM中读出的速率,从而改变输出频率。固定的2MHz频率通过一 74LS169向地址计数器提供输入时钟。计数器74LS169采用减计数的工作方式, 4位预置初值位A、B、C、D与74LS273的低4位Q1Q4相连,通过对74LS273的 编程可实现频率的 程控。 DAC0832(IC33)的数据写入控制端WR1与74LS169的动态进位输出TC相连, 同时TC又作为波形数据点地址计数器的时钟,这使得每个地址状态对应一个 信号周期,从而实现地址计数器、波形EPROM及DAC0832(IC33)的同步工作。 将AO1作为DAC0832(IC35)的参考电压(参见实验七的图7-1),DAC0832 (IC35)就构成一个8位程控衰减器。通过控制写入DAC0832(IC35)的8位 数字量,可实现对电压幅度的程控。,输出电压值的计算 在本实验中,第一片DAC0832(IC33)的输出电压为:,第二片DAC0832(IC35)的输出电压为:, 输出信号及其 对应的控制数据,本实验共用到二个端口地址 04H(2Y4):输出口,锁存器273地址,对程控信号源波 形、频率控制。 05H(2Y5):输出口,第二片DAC0832(IC35)地址, 程控信号源幅度控制。,编程与调试 (一)程序说明 程控信号源可输出16种波形(正弦波、方波。锯齿 波(1)、锯齿波(2)、梯形波、三角波、台阶波(1)、 台阶波(2)、台阶三角波、全波整流波、钟形波、辛克 波、对数波、M波、调幅波、窄脉冲波),幅度范围位 05V。 本实验中,可在AO1和AO2口测量获得的波形。,(二)编程思路,(三)编程步骤 1调用自定义头文件(同实验一)。 2EPP端口初始化(同实验一)。 3选择波形和分频数。 例如要选择1倍分频的方波,则高四位分别为0001,低 四位分别为0001: epp_write_data(AD1_0832,0x11); 4电压幅度的控制。 (四)源程序清单 参考程序见实验指导书附录I-10。,思考和练习题 1.若分频器的输入数据增大,则产生的波形频率是增 大还是减小? 2.若DAC0832(IC35)的输入数据增大,产生的信号幅 度是增大还是减小? 3.本实验主板产生的信号频率范围如何?有多少个点 频信号输出,其频率值分别为多少? 4.本实验主板产生的信号幅度范围如何?有多少个幅 度值输出,每跳步的幅度间值相同吗?,实验九 LED点阵显示技术,实验目的 1.了解LED点阵显示的原理及接口驱动方法。 2.熟悉动态扫描显示方式在显示技术中的应用。 3.掌握并行接口与点阵显示的硬件接口和软件编程。 实验任务 1.编写使点阵块全亮和全灭的点阵显示驱动程序段。 2.编写简单的点阵显示程序,在LED点阵板显示汉字。 3.编写在LED点阵显示上显示任意字符的点阵显示程序。,实验原理 LED点阵简介 LED点阵式显示器不仅可以显示数字,也可显示所有 西文字母和符号,与由单个发光二极管连成的显示器相 比,具有焊点少、连线少,所有亮点在同平面、亮度均 匀、外形美观等优点,可以代替数码管、符号管和米字 管。如果将多块组合,可以构成大屏幕显示屏,用于汉 字、图形、图表等等的显示,因此被广泛用于机场、车 站、码头、银行及许多公共场所的指示、说明、广告等 场合。, 88的LED点阵显示器结构,88的LED点阵显示器,是由64个LED组成, 内部电路如图9-1所示。 共阳极的8 8的LED点阵显示器的典型连接方式是:每一行的阳极连 在一起,由行扫描码锁存器和驱动器的一位控制,总共8行阳极连线由 8位分别控制;每一列的8个阴极连在一起,由字形行码锁存器和驱动 器的一位控制,总共8列阴极连线由8位分别控制。, 点阵字符的字型码,在写点阵显示的驱动之前,应知道各显示字符的字形码。上图 是四块8 8的LED点阵拼成的一个16 16点阵(16列16行)作为 1位字符显示的点阵码图。(本实验采用相同的显示方式显示一个字 符)。,点阵字符的驱动 点阵式LED显示器采用逐行扫描式工作。要使点阵显示出一个的字符的编程方法是:首先向字形行扫描码锁存器输入行码,选通第一行;接着,向行码锁存器写入该行的字型码。然后,按相同的方式选通第二行,写第二行的字型码由此类推,直到写完所有行的字型码,完成一个字符的显示。 如果要使多个点阵循环显示多个字符,只要把显示的各个字符按顺序安排在显示缓冲区,然后根据显示的字符去查表,再按一定的时序向各个字形行码锁存器和行扫描器输入相应的字形行码和行扫描码,便可达到目的。,字库原理 led点阵显示的原理和过程都很简单,只是输入每个字符的显示点阵码很繁琐。多字符的显示采用的方法是读字库,查出显示字的点阵码,再显示到显示屏上。 国标对汉字库(区位码字库)的结构作了统一的规定:将汉字库分为若干个区,每个区有94个汉字。每一个汉字在字库中有一个固定的区和位,即每一个汉字有一个区位码。知道了区位码也就相当于知道了汉字在字库中的位置。由于汉字的内码与区位码有一定的关系,所以,只要通过内码就可以得到区位码,从而也就得到了汉字的字模。,由于计算机对西文字符采用一个字节表示,汉字用二个字节(GBK内码)表示。为了保证中西文兼容,因此规定每个字节只用七位,若两个字节的最高位均为1,则该字符为汉字。即计算机中的数字和一些特殊符号按ASC编码方式,汉字和一些符号是GBK内码编码方式来表示。而点阵显示字库是按区位编码方式排列。因此,读字库之前,要完成ASC编码与区位编码的转换和GBK内码编码与区位编码之间的转换。 UCDOS 16点字库文件(HZK16j) 本实验是读 UCDOS 16点字库文件(HZK16j)。字库中的汉字按 共阳极1616点阵模式存储,即每个汉字由1616=256个点组成, 占用162=32个连续的字节单元。字节的每一位(bit)表示一个点 的属性:1表示亮点,0表示暗点。字符点阵是按照汉字区位码排列 的,连续的两个字节表示该汉字字模的一行。, GBK内码与相应区位码的转换 汉字的内码从一些图形字符开始,起始编码为 A1A1H;汉字内码 第一位为区码,每区为 94 个汉字,第二位为位码。汉字点阵数据 在字库中的偏移量为: (区码-A1H)*94 + (位码-A1H)*32L 由此可编辑偏移量的源代码为 inter_code.ed1=charactercount; point_quwei=inter_code.ed; /*寻找字符在汉字库中的位*/ wei=(point_quwei , ASC码与相应区位码的转换 ASC码的所有符号全在区位码的第三区,位码的偏移量为0x21H。 ASC码在字库中的偏移量为: (区码*94 + (位码-21H)*32L 由此可编辑偏移量的源代码为: inter_code.ed0=charactercount; point_quwei=inter_code.ed; /*寻找字符咱汉字库中的位*/ wei= (point_quwei , LED点阵式显示器实验电路,本实验共用到的端口地址(地址跳线选择1Y6): C1H(Y0):输出口,行扫描码锁存器地址 C2H (Y2):输出口,字形行码左锁存器地址 C3H (Y3):输出口,字形行码右锁存器地址,编程与调试 (一)简单的汉字显示 1程序说明 该程序为根据每个字符的点阵码(1616),直接在LED点阵上 显示汉字“电子科大”。 2编程思路,3编程步骤 根据需要选择自定义头文件(同实验一)。 EPP端口初始化(同实验一)。 选择点亮行。 要点亮某行的LED,先要向行地址端口写入行数,例如要点亮第 一行: epp_write_out(ROW_DOT,0x00); 写入每列的点阵码。 要点亮某行的LED,向行地址写入数据后,先向左边列写数据再 向右边列写数据。例如我们要点亮第一行的第一、三、五、七、九、 十一、十三、十五列: epp_write_out(ROW_DOT,0x00); /*选择第几行*/ epp_write_out(L_DOT,0xaa); /*向左边列写入数据*/ epp_write_out(H_DOT,0xaa); /*向右边列写入数据*/,4源程序清单 参考程序见实验指导书附录I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论