數位邏輯與實習:實驗五 編解碼器、多工器與比較器
A. 編碼器
實驗目的:1. 請使用程式語言撰寫十進制轉二進制的編碼器,並將結果顯示在 LED 燈上。
2. 利用八個埠對應 0~7 當輸入,另外利用三個埠作為二進制的輸出結果。
3. 參考真值表與範例程式,以文字註解說明其動作原理。
實作方法:1. 模擬板上 J3 的 PA0~PA3 與 J4 的 PA4~PA7 分別代表十進制之 0~7,將欲選取 編碼之十進制數字所代表的埠以「0」輸入,其他未選取之數字則皆輸入「1」。
2. 將模擬板上的 J3 的 PC0、PC1 與 J4 的 PC2 分別接至 J5 的 L0、L1、L2。
3. PC3、L2 為 MSB;PC0、L0 為 LSB。
4. 若 LED「亮」則代表「0」;反之,若 LED「滅」則代表「1」。
Truth Table (真值表):
Output
Input L2 L1 L0
pa0=0, others=1 0 0 0 pa1=0, others =1 0 0 1 pa2=0, others =1 0 1 0 pa3=0, others =1 0 1 1 pa4=0, others =1 1 0 0 pa5=0, others =1 1 0 1 pa6=0, others =1 1 1 0 pa7=0, others =1 1 1 1 範例程式:
// 編碼器
#include "ht48e50.h"
void main() {
unsigned tab[8]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
unsigned a,i;
_pcc=0x00;
_pac=0xff;
_pa=_pc=0xff;
while(1) {
a=_pa;
班級:
姓名:
學號:
if (a==0xff) _pc=0xff;
else {
for(i=0;i<8;i++) {
if((~a)&(0x01<<i))
break;
}
_pc=tab[i];
} } }
※ 請在範例程式每行程式碼的旁邊加上註解。
B. 解碼器
實驗目的:1. 請利用編碼器的輸入,將選擇到的值顯示在七段顯示器,並以二進制形式顯 示在 LED 上。
2. 利用八個埠對應 0~7 當輸入,再利用七個埠作為七段顯示器的資料、ㄧ個埠 作為七段顯示器的選擇與三個埠作為 LED 的輸出結果。
3. 參考實驗 A 的真值表與下列之範例程式,以文字註解說明其動作原理。
實作方法:1. 模擬板上 J3 的 PA0~PA3 與 J4 的 PA4~PA7 分別代表十進制之 0~7,將欲選取 編碼之十進制數字所代表的埠以「0」輸入,其他未選取之數字則皆輸入「1」。
2. 將模擬板上 J3 的 PC0、PC1 與 J4 的 PC2 分別接至 J5 的 L0、L1、L2。
3. 將模擬板上 J3 的 PB0~PB5 與 J4 的 PB6,依序接至 J6 的 SA~SG。
4. 將模擬板上 J4 的 PC4 接至 JZ 的 COM0 上。
5. PC2、L2 為 MSB;PC0、L0 為 LSB。
6. 若 LED「亮」則代表「0」;反之,若 LED「滅」則代表「1」。
7. 七段顯示器的結果將會因 PA0~PA7 的輸入不同而顯示出 0~7 的結果。
範例程式:
// 解碼器
#include "ht48e50.h"
void main() {
unsigned tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xd8,0x80,0x98};
unsigned tab1[8]={0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7};
unsigned a,i;
_pbc=_pcc=0x00;
_pac=0xff;
_pa=_pb=_pc=0xff;
while(1) {
a=_pa;
if (a==0xff) _pc=0xff;
else {
for(i=0;i<8;i++) {
if((~a)&(0x01<<i)) break;
}
_pb=tab[i];
_pc=tab1[i];
} } }
※ 請在範例程式每行程式碼的旁邊加上註解。
C. 多工器
實驗目的:1. 輸入的資料為兩組二進制 4bit 的編碼,即 pa0~pa3、pa4~pa7 分為兩組輸入,
並將結果分別顯示於兩顆 7 段顯示器上。
2. 參考真值表與範例程式,以文字說明其動作原理。
實作方法:1. 模擬板上 J3 的 PA0~PA3 與 J4 的 PA4~PA7 分別為二組 4bit 的輸入,「0」請接 至 VSS,「1」請接至 VDD。
2. 將模擬板上 J3 的 PB0~ PB5 與 J4 的 PB6,依序接至 J6 的 SA~SG。
3. 將模擬板上 J4 的 PC4、 PC5 分別接至 JZ 的 COM0、COM1 上。
4. PA3 / PA7 分別為各自 4bit 之 MSB;PC0 / PA4 分別為各自 4bit 之 LSB。
5. 若 LED「亮」則代表「0」;反之,若 LED「滅」則代表「1」。
6. 七段顯示器的結果將會以 PA0~PA3、PA4~PA7 的輸入而各自顯示 0~15 的結果。
範例程式:
// 多工器
#include "ht48e50.h"
void Delay(unsigned x) {
unsigned x1,x2;
for(x1=0;x1<x;x1++) for(x2=0;x2<25;x2++);
}
void main() {
unsigned tab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xd8,0x80,0x98, 0xa7,0xb3,0x9d,0x96,0x87,0xff};
unsigned tab1[2]={0xef,0xdf};
unsigned a,i;
unsigned b0=0;
unsigned b1=0;
_pac=0xff;
_pbc=0x00;
_pcc=0x0f;
_pa=_pb=_pc=0xff;
while(1) {
_pb=_pc=0xff;
a=_pa;
if(a!=0xff) {
b0=(_pa&0x0f);
_pb=tab[b0];
_pc=tab1[0];
Delay(20);
b1=(_pa&0xf0);
b1=(b1>>4);
_pb=0xff;
_pb=tab[b1];
_pc=tab1[1];
Delay(20);
} } }
Truth Table (真值表):
Output
Input p7 / p3 p6 / p2 p5 / p1 p4 / p0
0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 10 1 0 1 11 1 0 1 1 12 1 1 0 0 13 1 1 0 1 14 1 1 1 0 15 1 1 1 1
※ 請在範例程式每行程式碼的旁邊加上註解。
D. 比較器
實驗目的:1. 請使用程式語言撰寫 2bit 的比較器,並將結果顯示在 LED 燈上。
2. 利用四個埠當二個 2bit 的輸入,另外利用三個埠作為比較後的輸出結果。
3. 參考真值表與範例程式,以文字說明其動作原理。
實作方法:1. 將模擬板上的 J4 的 PA4~PA6 接至 J5 的 L0、L1、L2。
2. 模擬板 J3 上的 PA0、PA1 為一組 2bit 輸入,PA2、PA3 為另外一組 2bit 輸入。
請依照真值表輸入,「0」請接至 VSS,「1」請接至 VDD。
3. 若 LED「亮」則代表「1」;反之,若 LED「滅」則代表「0」。
Truth Table (真值表):
輸入資料 輸出
pa0 pa1 pa2 pa3 pa4 pa5 pa6
0 0 0 0 0 1 0
0 0 0 1 0 0 1
0 0 1 0 0 0 1
0 0 1 1 0 0 1
0 1 0 0 1 0 0
0 1 0 1 0 1 0
0 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 1 0 0
1 0 0 1 1 0 0
1 0 1 0 0 1 0
1 0 1 1 0 0 1
1 1 0 0 1 0 0
1 1 0 1 1 0 0
1 1 1 0 1 0 0
1 1 1 1 0 1 0
範例程式:
// 比較器
#include "ht48e50.h"
void main () {
unsigned a0,a1,b0,b1,c1,c2,c3;
_pac=0x0f;
_pa=0xff;
while(1) {
a0=_pa0;
a1=_pa1;
b0=_pa2;
b1=_pa3;
c1=(a1&(!b1))|(a0&(!b0)&(!b1))|(a0&a1&(!b0));
c2=((!a0)&(!a1)&(!b0)&(!b1))|((!a0)&a1&(!b0)&b1)|(a0&(!a1)&b0&(!b1))|(a0&a1&b0&b1);
c3=((!a1)&b1)|((!a1)&(!a0)&b0)|((!a0)&b0&b1);
_pa4=!c1;
_pa5=!c2;
_pa6=!c3;
} }
※ 請在範例程式每行程式碼的旁邊加上註解。
E. 設計題
實驗目的:1. 練習以比較器、解編碼器與多工、解多工器來應用於一個綜合的設計題。
2. 請使用程式語言撰寫出以下功能,有兩組二進制 4bit 輸入,判斷兩組數字的 大小後,將輸入的數字與判斷的結果顯示在七段顯示器上。若判斷出來的結果 相等,請將相等的數字顯示於第四個七段顯示器上。
實作方法:1. 模擬板上 J3 的 PA0~PA3 與 J4 的 PA4~PA7 分別為二組 4bit 的輸入,「0」請接 至 VSS,「1」請接至 VDD。
2. 將模擬板上 J3 的 PB0~ PB5 與 J4 的 PB6,依序接至 J6 的 SA~SG。
3. 將模擬板上 J4 的 PC0、 PC1 、PC2、PC3 分別依序接至 JZ 的 COM0、COM1、
COM2、COM3 上。
4. PA3 / PA7 分別為各自 4bit 之 MSB;PC0 / PA4 分別為各自 4bit 之 LSB。
5. 第一個(COM0)與第三個(COM2)的七段顯示器將會各自顯示來自 PA0~PA3、
PA4~PA7 的十進制值 0~15;並於第二個(COM1)七段顯示器以 >、<、= 的 方式顯示出比較後的情形。
6. 若判斷出來的結果相等,請將相等的數字顯示於第四個(COM3)七段顯示器上。
程式提示:
大於、小於、等於的七段顯示器程式碼 unsigned tab2[3]={0xf0,0xc6,0xb7};
實驗心得與討論: