實驗一 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(); /*關閉設備*/
}
評論
查看更多