• 沒有找到結果。

數位邏輯與實習:實驗五 編解碼器、多工器與比較器

N/A
N/A
Protected

Academic year: 2022

Share "數位邏輯與實習:實驗五 編解碼器、多工器與比較器"

Copied!
8
0
0

加載中.... (立即查看全文)

全文

(1)

數位邏輯與實習:實驗五 編解碼器、多工器與比較器

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;

班級:

姓名:

學號:

(2)

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 的結果。

(3)

範例程式:

// 解碼器

#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. 參考真值表與範例程式,以文字說明其動作原理。

(4)

實作方法: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);

(5)

_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

※ 請在範例程式每行程式碼的旁邊加上註解。

(6)

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;

(7)

_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。

(8)

5. 第一個(COM0)與第三個(COM2)的七段顯示器將會各自顯示來自 PA0~PA3、

PA4~PA7 的十進制值 0~15;並於第二個(COM1)七段顯示器以 >、<、= 的 方式顯示出比較後的情形。

6. 若判斷出來的結果相等,請將相等的數字顯示於第四個(COM3)七段顯示器上。

程式提示:

大於、小於、等於的七段顯示器程式碼 unsigned tab2[3]={0xf0,0xc6,0xb7};

實驗心得與討論:

參考文獻

相關文件

阿吉老師將簡介 micro:bit 開發程式環境,並分享 micro:bit 內建感測器程式編寫、數位/類比信號讀取及寫入,並了解 如何用 micro:bit 連接電子模組編寫程式進行機電整合。.

專案導向應用程式開發 階梯程式編輯畫面 狀態的監視與控制 階梯程式助憶碼輔助顯示 階梯程式註解功能

2.藉由實習過程,以了解利用運算放大器隨設計之非反相放大器的閉

2.1.1 簡單的 簡單的 簡單的 簡單的SIC組譯器 組譯器 組譯器

[r]

SHIFTER:移位器 ALU:算術邏輯單元 ADDRGEN:位址編碼器

心得:讓我了解到開迴路比較器做出電位偵判器

[r]