Tải bản đầy đủ (.docx) (19 trang)

Bai tap ky thuat so ung dung de 12

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (501.68 KB, 19 trang )

THIẾT KẾ MẠCH CHUYỂN MÃ
MÃ ĐẦU VÀO BCD 7421 – MÃ ĐẦU RA BCD 8421

* Phân tích bài toán và Thực hiên:
Trong các thiết bị điện tử số, để biễu diễn 10 chữ số thập phân từ 0 đến 9,
người ta dùng 4 bit để tổ hợp nên tạo ra được 16 tổ hợp khác nhau.Ta chỉ dùng 10 tổ
hợp trong 16 tổ hợp nên tạo ra đựơc nhiều hệ mã khác nhau trong đó có 6 tổ hợp
thừa. Những hệ mã đó là: mã BCD 8421, BCD 7421, BCD 5421, BCD 2421, Gray, Dư
3.

- Từ bảng mã BCD7421 gốc ta thiết kế mạch chuyển mã sang bảng mã BCD8421
- Mỗi mạch có 4 đầu ra x,y,z,t mỗi đầu ra là một hàm của 4 biến vào a,b,c,d. Lập bảng
K cho mỗi đầu ra.
- Tạo biểu thức tối giản của nguyên hàm đánh vòng các ô làm hàm ra bằng 1, của đảo
hàm đánh vòng các ô làm hàm ra bằng 0.
- Trong bảng K tổ hợp thừa ta đánh X..

1


1.Bảng công tác


thập
phân
0
1
2
3
4
5


6
7
8
9
Tổ
hợp
thừa

Mã BCD7421
a
0
0
0
0
0
0
0
1
1
1
x
x
x
x
x
x

b
0
0

0
0
1
1
1
0
0
0
X
X
X
X
X
X

c
0
0
1
1
0
0
1
0
0
1
x
x
x
x

x
x

Mã BCD8421
d
0
1
0
1
0
1
0
0
1
0
x
x
x
x
x
x

x
0
0
0
0
0
0
0

0
1
1
x
x
x
x
x
x

y
0
0
0
0
1
1
1
1
0
0
x
x
x
x
x
x

z
0

0
1
1
0
0
1
1
0
0
x
x
x
x
x
x

t
0
1
0
1
0
1
0
1
0
1
x
x
x

x
x
x

Mỗi cột x , y , z , t là một hàm của bốn biến a, b, c, d  Lập một bảng K cho mỗi
hàm .

2


2.Tối giản bằng bảng Karnaugh:
Đầu x

cd
ab

00

01

11

10

0

0

0


0

0

0

x

0

x

x

x

x

0

1

x

1

00

01


11

10

0

0

0

0

1

1

x

1

x

x

x

x

1


0

x

0

00
01
11
10

Dựa vào bảng trên ta có : x = ad+ac

x = a + cd

Đầu y
cd
ab
00
01
11
10

Dựa vào bảng trên ta có :

y =b +a cd

y = a b + bd + bc

3



4


Đầu z

cd
ab

00

01

11

10

0

0

1

1

0

0


x

1

x

x

x

x

1

0

x

0

00

01

11

10

0


1

1

0

0

1

x

0

x

x

x

x

1

0

x

1


00
01
11
10

Dựa vào bảng trên ta có :

z = ac + ac d

z = a c + ac + c d

Đầu t

cd
ab
00
01
11
10

Dựa vào bảng trên ta có:

t = a d + ad

t = a d + ad
5


6



3.Tối giản bằng định lý Logic:
Từ bảng công tác ta or các minterm nào làm hàm ra bằng 1.(Mỗi cột là 1 hàm của 4 biến vào a,b,c,d),
ta có biểu thức chuẩn tắc tuyễn của đảo hàm. Ta or tất cả các minterm làm hàm ra có giá trị không
xác định để lập điều kiện ràng buộc.
 x=

∑ (9 + 10)

và điều kiện ràng buộc

∑ (7 + 11 + 12 + 13 + 14 + 15) = 0

abcd + abc d

=
= ad+ac

∑ ( 4 + 5 + 6 + 7)

 y=

y=

và điều kiện ràng buộc

∑ (7 + 11 + 12 + 13 + 14 + 15) = 0

abc d + abc d + abc d + abc d


y =b +a cd

 z=

∑ (2 + 3 + 6 + 7)

z=

và điều kiện ràng buộc

∑ (7 + 11 + 12 + 13 + 14 + 15) = 0

abc d + abcd + abc d + abc d

z = ac + ac d

 t=

∑ (1 + 3 + 5 + 7 + 10)

t=

và điều kiện ràng buộc

∑ (7 + 11 + 12 + 13 + 14 + 15) = 0

abcd + abcd + abc d + abc d + abc d

t = a d + ad


4.Thiết kế mạch Logic:
a) thiết kế mạch logic dạng OR-AND

từ bảng k, ta đánh vòng các ô toàn 1 và x tìm được biểu thức của nguyên hàm như
sau
7


x = ad + ac,

y = b + acd z = ac + ac d t = a d + ad
,

,

a b c d

8


b) Thiết kế mạch logic dạng AND -OR
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 0 và “x”, tìm được biểu thức đảo hàm, sau đó ta phủ
định một lần và triển khai đến cấp biến để tìm biểu thức nguyên hàm như sau:

x = x = a + c d = a (c + d ) y = y = ab + bd + bc = ( a + b)(b + d )(b + c)
,

,

z = z = a c + ac + cd = ( a + c )( a + c)( c + d ) t = t = a d + ad = (a + d )( a + d )

,

a b

9


c) Thiết kế mạch logic dạng NOR-AND
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 0 và “x”, tìm được biểu thức đảo hàm, sau đó ta
phủ định một lần và tìm biểu thức nguyên hàm như sau:

x = x = a + cd

,

y = y = ab + bd + bc z = z = ac + ac + cd t = t = a d + ad
,

,

10


d) Thiết kế mạch logic dạng NOR-NOR
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 0 và “x”, tìm được biểu thức đảo hàm, sau đó ta
phủ định một lần và sau đó triển khai tiếp để tìm biểu thức nguyên hàm như sau:. Tiếp tục
phủ định 2 lần nữa để tìm biểu thức nguyên hàm

x = x = a + c d = a (c + d ) = a + (c + d )


,

y = y = ab + bd + bc = ( a + b)(b + d )(b + c) = (a + b) + (b + d ) + (b + c)
z = z = ac + ac + cd = (a + c)( a + c)( c + d ) = (a + c) + (a + c) + (c + d )

,

,

t = t = a d + ad = (a + d )(a + d ) = (a + d ) + (a + d )

11


12


e) Thiết kế mạch logic dạng NAND-NAND
Từ bảng Kaunaugh, ta đánh vòng các ô toàn 1 và “x”, tìm được biểu thức nguyên hàm sau
đó, phủ định 2 lần, quá trình biến đổi như sau

Biểu thức:
x =ad+ac 
y = b + acd



z = ac + ac d
t = a d + ad


x = ad + ac = ad ac




.

y = b + acd = bacd

.

z = ac + a c d = ac ac d
t = a d + ad = a d ad

.

.

13


5. Chương trình mô phỏng
//BAI TAP LON - KI THUAT SO UNG DUNG - DE SO 12: BCD 7421 - BCD 8421
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void BCD7421(int n, char *a, char *b, char *c, char *d)
{
14



if (n<0 || n > 9) n = 0;
short ma7421[4] = {7,4,2,1};
short binaryResult[4];
int i;
for (i = 0; i < 4; i++){
if (n >= ma7421[i]) {
n-=ma7421[i];
binaryResult[i] = 1;
} else {
binaryResult[i] = 0;
}
}
*a = binaryResult[0];
*b = binaryResult[1];
*c = binaryResult[2];
*d = binaryResult[3];
}

void or_and(int n)
{
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf(

"|%7d

|

%d%d%d%d


| %d%d%d%d |\n",

n, a,b,c,d,
((a&&d)||(a&&c)), (b||(a&&(!c&&!d))), ((!a&&c)||(a&&(!c&&!d))), ((!
a&&d)||(a&&!d)));
}

void and_or(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf(

"|%7d

|

%d%d%d%d

| %d%d%d%d |\n",

n, a,b,c,d,
15


(a&&(c||d)), ((a||b)&&(b||!d)&&(b||!c)), ((a||c)&&(!a||!c)&&(c||!d)), ((a||
d)&&(!a||!d))
);
}


void nor_and(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf(

"|%7d

|

%d%d%d%d

| %d%d%d%d |\n",

n, a,b,c,d,
!(!a||(!c&&!d)), !((!a&&!b)||(!b&&d)||(!b&&c)), !((!a&&!c)||(a&&c)||(!
c&&d)), !((!a&&!d)||(a&&d))
);
}

void nor_nor(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf(

"|%7d

|

%d%d%d%d


| %d%d%d%d |\n",

n, a,b,c,d,
!(!a||!(c||d)), !(!(a||b)||!(b||!d)||!(b||!c)), !(!(a||c)||!(!a||!c)||!(c||!d)), !(!(a||d)||!
(!a||!d))

);
}

void nand_nand(int n){
char a,b,c,d;
BCD7421(n, &a, &b, &c, &d);
printf(

"|%7d

|

%d%d%d%d

| %d%d%d%d |\n",

n, a,b,c,d,
!(!(a&&d)&&!(a&&c)), !(!b&&!(a&&(!c&&!d))), !(!(!a&&c)&&!(a&&(!c&&!d))), !(!
(a&&d)&&!(!a&&!d))

16


);

}

int main(){
short t = 1;
while (t){
printf("|======================================|\n");
printf("|======= MO PHONG MACH CHUYEN MA ======|\n");
printf("|======= BCD7421 -> BCD 8421 ======|\n");
printf("|======================================|\n");
printf("| 1. In mach AND-OR

|\n");

printf("| 2. In mach OR-AND

|\n");

printf("| 3. In mach NOR-AND

|\n");

printf("| 4. In mach NOR-NOR

|\n");

printf("| 5. In mach NAND-NAND
printf("|------

0 to Exit


|\n");

-----------|\n");

printf("Chon N Tu 1 Den 5 Tuong Ung: N = "); scanf("%d", &t);
switch(t){
case 1:
printf("\tIn mach AND-OR\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
printf("|So thap phan | BCD7421 | BCD 8421 |\n");
printf("|

N

|

abcd |

xywt |\n");

printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
and_or(i);
}
break;
case 2:
printf("\tIn mach OR-AND\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");

17


printf("|So thap phan | BCD7421 | BCD 8421 |\n");
printf("|

N

|

abcd |

xywt |\n");

printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
or_and(i);
}
break;
case 3:
printf("\tIn mach NOR-AND\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
printf("|So thap phan | BCD7421 | BCD 8421 |\n");
printf("|

N

|


abcd |

xywt |\n");

printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
nor_and(i);
}
break;
case 4:
printf("\tIn mach NOR-NOR\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");
printf("|So thap phan | BCD7421 | BCD 8421 |\n");
printf("|

N

|

abcd |

xywt |\n");

printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
nor_nor(i);
}
break;
case 5:

printf("\tIn mach NAND-NAND\n");
printf("|
oooooooooooooooooooooooooooooooooooooo|\n");

18


printf("|So thap phan | BCD7421 | BCD 8421 |\n");
printf("|

N

|

abcd |

xywt |\n");

printf("|**************************************|\n");
for (int i = 0 ; i<10; i++){
nand_nand(i);
}
}

}
}

19




×