实验一 I/O地址译码
一)实验目的
掌握I/O地址译码电路的工作原理。
二)实验内容
1. 实验电路如图13所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器,请使用插在通用插座DIP20上的74LS138和74LS30,其引脚图如图14,译码输出端Y0~Y7在实验台上。I/O地址输出端引出每个输出端包含8个地址Y0:3C0H~3C7H;Y1: 3C8H~3CFH;⋯⋯;Y7:3F8H~3FFH。当CPU执行I/ O指令且地址在3C0H~3FFH范围内译码器选中必有一根译码线输出负脉冲。
特别提醒:74LS138的第8脚是接地脚,第16脚是接电源脚,千万不能接错,否则一切后果自负。
例如执行下面两条指令
PortWriteByte(0x2A0,data);
或 PortReadByte(0x2A0,&data);
Y4输出一个负脉冲,执行下面两条指令
PortWriteByte(0x2A8,data);
或 PortReadByte(0x2A8,&data);
Y5输出一个负脉冲
利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭⋯⋯),时间间隔通过软件延时实现。
2. 改变A9~A3的接线方法,从而得到Y0;388H~38FH;Y1:398H~39FH; ⋯⋯;Y7:3F8H~3FFH。并修改上一问的程序,以同样获得L7灯闪烁的效果。
三)编程提示
1、实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电
平L7灭。
2、参考程序
/***********************/
/* I/O地址译码 */
/***********************/
#include
#include
#include "ApiEx.h"
#pragma comment(lib," ApiEx.lib")
void main()
{
printf("----------EXP1_I/O-----------\n");
printf("Press any key to begin!\n\n");
getch();
printf("Press any key to exit!\n");
if(!Startup()) /*打开设备*/
{
printf("ERROR:Open Device Error!\n");
return;
}
while(!kbhit()) /*判断是否有键按下*/
{
PortWriteByte(0x3E0,0x10); /*或PortReadByte(0x3E0, &data)*/
Sleep(1000); /*延迟一秒钟*/
PortWriteByte(0x3E8,0x10); /*或PortReadByte(0x3E8, &data)*/
Sleep(1000); /*延迟一秒钟*/
}
Cleanup(); /*关闭设备*/
}
评论
查看更多