chương 5. ứng dụng và ví dụ minh họa

41
Giáo trình Vi XChương 5. Ứng dng và ví dminh ha Trang 101 CHƯƠNG 5. ỨNG DNG VÀ VÍ DMINH HA I. KT NI PHN CNG 1. Ngun cung cp . Để cp nguồn cho vi điều khin cn phi có nguồn đơn +5V, tuy nhiên trong một sng dng có thcn nguồn đôi (+12V và -12V). Sơ đồ mạch điện sau gii thiu mt mch nguồn đơn gin, tuy nhiên nếu cn sdng cho các ng dụng đòi hỏi công sut ln, hãy tham kho thêm các mạch điện ngun khác. Hình 5.1: Sơ đồ mch ngun Các tđiện C1, C2, C5, C6, C7 là các t điện giá trln có tác dng lc nhiu tn sthp. Các tđiện C3, C4, C8, C9, C10 là các tđiện giá trnhlc nhiu tn scao. Các vi mch LM7805, LM7812, LM7912 có khnăng chịu dòng ti tối đa 1A vì vy nên chn biến áp 3A cho các ng dụng không đòi hỏi công sut ln. 2. Mch reset. Mch reset bao gm 1 phím nhn cho phép người sdng khởi động lại chương trình vi điều khin. Ngòai chức năng trên còn bao gồm chức năng tự Reset khi cp ngun cho mch. Hình 5.2: Mch Reset Kho sát mạch điện trên ta thấy điện áp ti chân reset se có dng t reset e R R R u . 2 1 2 vi = C(R 1 + R 2 ). Tín hiệu điện e reset sgim khi cấp điện áp ngun và sgn bng không sau thi gian t3 đến 5. Để tín hiệu điện áp tn ti mc logic [1] CuuDuongThanCong.com https://fb.com/tailieudientucntt

Transcript of chương 5. ứng dụng và ví dụ minh họa

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 101

CHƯƠNG 5. ỨNG DỤNG VÀ VÍ DỤ MINH HỌA

I. KẾT NỐI PHẦN CỨNG

1. Nguồn cung cấp.

Để cấp nguồn cho vi điều khiển cần phải có nguồn đơn +5V, tuy nhiên trong một

số ứng dụng có thể cần nguồn đôi (+12V và -12V). Sơ đồ mạch điện sau giới thiệu một

mạch nguồn đơn giản, tuy nhiên nếu cần sử dụng cho các ứng dụng đòi hỏi công suất lớn,

hãy tham khảo thêm các mạch điện nguồn khác.

Hình 5.1: Sơ đồ mạch nguồn

Các tụ điện C1, C2, C5, C6, C7 là các tụ điện giá trị lớn có tác dụng lọc nhiễu tần

số thấp. Các tụ điện C3, C4, C8, C9, C10 là các tụ điện giá trị nhỏ lọc nhiễu tần số cao.

Các vi mạch LM7805, LM7812, LM7912 có khả năng chịu dòng tải tối đa 1A vì

vậy nên chọn biến áp 3A cho các ứng dụng không đòi hỏi công suất lớn.

2. Mạch reset.

Mạch reset bao gồm 1 phím nhấn cho phép người sử dụng khởi động lại chương

trình vi điều khiển. Ngòai chức năng trên còn bao gồm chức năng tự Reset khi cấp nguồn

cho mạch.

Hình 5.2: Mạch Reset

Khảo sát mạch điện trên ta thấy điện áp tại chân reset se có dạng

t

resete

RR

Ru

.

21

2

với = C(R1 + R2). Tín hiệu điện ereset sẽ giảm khi cấp điện áp nguồn

và sẽ gần bằng không sau thời gian từ 3 đến 5. Để tín hiệu điện áp tồn tại ở mức logic [1]

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 102

trong ít nhất 1s ta có giải phương trình sau để tìm ra thời gian: VeRR

R t5,3

.

21

2

sau đó cho điều kiện t = 1s sẽ tìm được các giá trị R1, R2 và C thích hợp

Điện áp tại chân reset với các giá trị R1, R2 và C đã chọn sẽ có dạng như sau khi

cấp điện áp nguồn 5 V

3. Mạch tạo dao động.

Mạch tạo dao động sẽ sử dụng 2 tụ điện giá trị 22pF kết hợp với thạch anh và tín

hiệu được kết nối với 2 ngõ vào dao động của vi điều khiển là XTAL1 và XTAL2.

Hình 5.3: Mạch cấp dao động cho vi điều khiển

Về cơ bản, để một vi điều khiển có thể hoạt động được chỉ cần kết nối phần cứng

với 3 mục đã trình bày ở trên. Tuy nhiên nếu muốn sử dụng vi điều khiển để ứng dụng vào

các yêu cầu điều khiển khác nhau thì sẽ phải kết nối phần cứng thêm nữa và đồng thời

phải xây dựng một chương trình điều khiển cho vi điều khiển. Các phần tiếp theo sẽ giới

thiệu một số ứng dụng cụ thể.

II. ĐIỀU KHIỂN CƠ CẤU CHẤP HÀNH ĐƠN GIẢN

1. Điều khiển động cơ DC

Trong tài liệu này sẽ chỉ giới thiệu nguyên tắc điều khiển động cơ DC công suất

nhỏ, việc điều khiển các động cơ khác công suất lớn cũng sẽ tương tự về phần mềm và chỉ

thêm phần công suất. Đối với điều khiển động cơ, phần công suất chủ yếu sẽ là các

contactor hoặc các thyristor. Những kiến thức trong thực tập điện cơ bản và trong môn

học Thiết bị chuyển đổi điện tử công suất sẽ giúp các bạn trong công việc này.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 103

Một ví dụ đơn giản nhất trong việc điều khiển động cơ là việc sử dụng 2 nút nhất:

Khởi động và dừng để điều khiển. Mạch điện kết nối với vi điều khiển được trình bày như

sau:

Hình 5.4: Mạch kết nối điểu khiển động cơ DC

Theo mạch nguyên lý trên để động cơ hoạt động thì tại ngõ ra P0.7 phải ở mức [1]

và động cơ sẽ ngừng khi ngõ ra này là mức [0]. Các nút nhấn điều khiển On / Off sẽ được

kết nối với các ngõ vào P1.0 và P1.1. Nguyên tắc điều khiển như sau:

- Khi nút nhấn On tác động, động cơ bắt đầu hoạt động.

- Khi nút nhấn Off tác động, động cơ ngừng hoạt động.

- Không nút nào tác động, động cơ không thay đổi trạng thái.

Từ yêu cầu như trên, một lưu đồ điều khiển được xây dựng như sau:

Nhấn On?

Begin

Ngừng động cơ

Chạy động cơ

Ngừng động cơ

Nhấn Off?

Không

Không

Nhấn On?

Ngừng động cơ

Chạy động cơ

Ngừng động cơ

Nhấn Off?

Không

Không

Begin

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 104

Nhận xét 2 lưu đồ trên ta thấy, để áp dụng trên yêu cầu điều khiển này thì cả hai

lưu đồ đều đáp ứng đúng yêu cầu. Ở lưu đồ a, khi chương trình bắt đầu chạy, động cơ sẽ

được ngừng, sau đó nút nhấn ON sẽ được kiểm tra, trong trường hợp nút nhấn này không

được tác động thì chương trình sẽ quay lại kiểm tra nút nhấn này, công việc này được lặp

lại cho đến khi nút nhấn được tác động. Khi nút nhấn được tác động thì vi điều khiển xuất

tín hiệu điều khiển cho động cơ chạy. Tiếp tục đến nút nhấn OFF được kiểm tra. Nếu

không tác động nút nhấn này thì chương trình sẽ lặp lại công việc kiểm tra nút nhấn của

mình. Nếu có tác động thì tín hiệu điều khiển ngừng động cơ sẽ được thực hiện và động

cơ ngừng chạy, chương trình lại lặp lại từ đầu. Với lưu đồ b thì hoạt động của chương

trình có thay đổi. Khi nút ON không tác động, chương trình sẽ không quay trở lại kiểm tra

nút ON lại mà thực hiện việc kiểm tra nút nhấn OFF. Việc thực hiện công việc như vậy sẽ

giúp cho chương trình không bị “kẹt một chỗ” khi không có nút nhấn tác động. Đây là

việc rất quan trọng khi viết một chương trình điều khiển nhiều đối tượng khác nhau, do vi

điều khiển không thực hiện chức năng “multi thread” được (ngoại trừ ngắt) nên trong

chương trình thường cần chú ý tránh thực hiện các vòng lặp có khả năng tạo lặp mãi mãi.

Từ lưu đồ có thể viết chương trình cho vi điều khiển như sau:

Lưu đồ a:

Ngôn ngữ assembler Ngôn ngữ C

Org 0000h

Clr P0.7

Jnb P1.0,$

Setb p0.7

Jnb p1.1,$

Clr P0.7

Sjmp 0000

Void main()

{

P0^7 = 0;

while(1)

{

While (!P1.0)

P0^7 = 1;

While (!P1.1)

P0^7=0;

}

}

Lưu đồ b:

Ngôn ngữ assembler Ngôn ngữ C

Org 0000h

Clr P0.7

KT_ON: Jnb P1.0, KT_OFF

Setb p0.7

KT_OFF: Jnb p1.1, KT_ON

Void main()

{

P0^7 = 0;

while(1)

{

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 105

Clr P0.7

Sjmp KT_ON

if (P1.0)

P0^7 = 1;

if (P1.1)

P0^7=0;

}

}

Lưu ý khi viết chương trình, việc để những địa chỉ là các thanh ghi sẽ gây khó

khăn cho người đọc chương trình nên các địa chỉ này thường được khai báo thành các

biến có tên có ý nghĩa. Việc đặt tên biến trong ngôn ngữ assembly được thực hiện thông

qua việc thực hiện khai báo:

Tên_biến equ địa_chỉ_biến.

Ví dụ với chương trình trên ta có thể viết lại như sau

On_Key equ P1.0

Off_Key equ P1.1

DC_Motor equ P0.7

Org 0000h

Clr DC_Motor

KT_ON: Jnb On_Key, KT_OFF

Setb DC_Motor

KT_OFF: Jnb Off_Key, KT_ON

Clr DC_Motor

Sjmp KT_ON

Lúc này chương trình sẽ trở nên rõ rang hơn và thuận tiện hơn khi chúng ta sử

dụng các địa chỉ khác cho các nút nhấn hoặc ngõ ra điều khiển động cơ. Sẽ không còn

phải dò theo chương trình để chỉnh sửa nữa mà việc thay đổi địa chỉ khai báo sẽ giúp cho

chương trình hoạt động đúng.

Trong ngôn ngữ C, việc khai báo một biến dạng bit như sau:

sbit Tên_biến = địa_chỉ_biến;

Và chương trình được viết lại:

void main()

{

sbit DC_Motor = P0^7;

sbit On_Key = P1^0;

sbit Off_Key = P1^1;

bit Motor_On = 1;

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 106

DC_Motor = !Motor_On;

while(1)

{

if (On_Key)

DC_Motor = Motor_On;

if (Off_Key)

DC_Motor = !Motor_On;

}

}

Bài tập cho phần này, các bạn có thể ứng dụng vi điều khiển để điều khiển động cơ

DC quay thuận nghịch thông qua việc điều khiển bằng các nút nhấn hoặc điiều khiển động

cơ AC 3 pha quay thuận nghịch, khởi động sao – tam giác hoặc khởi động nhiều cấp tốc

độ.

2. Điều khiển động cơ bước

Động cơ bước có chức năng điều khiển các thiết bị di chuyển với khoảng cách ngắn

ví dụ như điều khiển di chuyển đầu đọc đĩa. Tuỳ thuộc vào công suất của động cơ mà sử

dụng các mạch giao tiếp cho phù hợp. Thường thì các động cơ bước luôn đi kèm với mạch

điều khiển và chỉ nhận lệnh từ vi xử lý hay vi điều khiển.

Hình 5.5. Hình động cơ bước loại nhỏ.

Hình 5.6 : các cuộn dây bên trong của động cơ

Để thực hiện điều khiển động cơ bước, phải thực hiện theo một trong 3 cách sau

đây:

+ Cách 1: điều khiển một bước kích 1 cuộn dây. Trong phương pháp này, tại mỗi

thời điểm chỉ có 1 cuộn dây được tác động và phải theo thứ tự liên tiếp nhau. Muốn đảo

chiều quay của động cơ thì phải đảo thứ tự tác động đến các cuộn dây.

Bước Cuộn 1 Cuộn 2 Cuộn 3 Cuộn 4 Tác động

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 107

1 On Off Off Off

2 Off On Off Off

3 Off Off On Off

4 Off Off Off On

Cách 2: Điều khiển 1 bước kích 2 cuộn dây. Trong phương pháp này, tại mỗi thời

điểm có 2 cuộn dây cạnh nhau được tác động và phải theo thứ tự liên tiếp nhau. Muốn đảo

chiều quay của động cơ thì phải đảo thứ tự tác động đến các cuộn dây.

Bước Cuộn 1 Cuộn 2 Cuộn 3 Cuộn 4 Tác động

1 On On Off Off

2 Off On On Off

3 Off Off On On

4 On Off Off On

Cách 3: Điều khiển nửa bước. Trong cách này sẽ kết hợp 2 cách trên lại với nhau.

Ban đầu 1 cuộn dây được tác động, sau đó cuộn dây được tác động vẫn giữ nguyên trạng

thái và tác động cuộn dây bên cạnh nó, như vậy tại thời điểm này có 2 cuộn dây được tác

động, động cơ chỉ quy nửa bước. Tiếp theo cuộn dây đầu tiên mất tác động, chỉ có cuộn

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 108

dây thứ 2 tác động, động cơ quay thêm nửa bước nữa. Việc điều khiển động cơ được lặp

lại theo cách như trên.

Bước Cuộn 1 Cuộn 2 Cuộn 3 Cuộn 4 Tác động

1 On Off Off Off

2 On On Off Off

3 Off On Off Off

4 Off On On Off

5 Off Off On Off

6 Off Off On On

7 Off Off Off On

8 On Off Off On

Sơ đồ mạch điện kết nối vi điều khiển để điều khiển một động cơ bước 12V như

sau:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 109

Hình 5.7: Sơ đồ kết nối vi điều khiển với động cơ bước

Đoạn chương trình đơn giản đề điều khiển động cơ bước quay như sau:

org 0000h

main: mov P2,#10001000b

lcall delay

mov P2,#01000100b

lcall delay

mov P2,#00100010b

lcall delay

mov P2,#00010001b

lcall delay

sjmp main

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

;chuong trinh con delay

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

delay: mov r6,#0

del: mov r7,#0

djnz r7,$

djnz r6,del

ret

end

III. HIỂN THỊ

Để hiện thị các trạng thái của một hệ thống, người ta thường sử dụng những đèn

riêng biệt, đèn Led 7 đoạn để hiện thị số từ 0 đến 9, Led ma trận để hiện thị các thông báo

lớn và màn hình LCD cho những thông báo gắn trực tiếp trên thiết bị.

1. Led đơn.

Led đơn là thiết bị hiển thị đơn giản nhất, nhưng nếu kết hợp tốt phần điện tử công

suất để điều khiển những đèn công suất lớn (hoặc nhiều đèn đồng thời) thì chế độ hiển thị

này có thể ứng dụng để thiết kế các mạch đèn quảng cáo.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 110

Có thể điều khiển led đơn theo 2 kiểu khác nhau: điều khiển đèn sáng bằng mức

Logic [1] hoặc điều khiển đèn sáng bằng mức Logic [0], chế độ điều khiển phụ thuộc vào

người thiết kế phần cứng. Ở điều khiển mức [0] đèn led có thể kết nối trực tiếp với vi điều

khiển, tuy nhiên ở việc kết nối điều khiển mức [1] thì phải thông qua các vi mạch đệm để

đảm bảo dòng điện đi qua Led đủ lớn.

Hình 5.8: Điều khiển mức [1] qua cổng đệm

Hình 5.9: Điều khiển led đơn bằng mức [0]

Việc tính tóan các giá trị điện trở hạn dòng cho led rất quan trọng vì nó ảnh hưởng

đến độ sáng của đèn. Muốn tính tóan thì phải nắm được giá trị điện áp của đèn led khi

sáng như bảng sau:

Ở đây chỉ xin trình bày cách viết chương trình điều khiển led sang theo mức logic

[1], với điều khiển bằng mức logic [0] người học có thể áp dụng các lưu đồ điều khiển

nhưng chương trình sẽ phải thay đổi cho phù hợp.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 111

Đầu tiên xin giới thiệu đọan chương trình nhấp nháy cả 8 đèn led. Với yêu cầu này

chúng ta thấy rằng các ngõ ra tại cổng P0 sẽ phải thay đổi trạng thái từ FFH thành 00H và

ngược lại. Có thể xây dựng lưu đồ như sau:

Tuy nhiên nếu không chú ý ở đây và viết chương trình đúng theo lưu đồ, khi thực

hiện chạy chương trình chúng ta sẽ không thấy đèn sáng. Lý do đơn giản là do thời gian

thực hiện lệnh của vi điều khiển. Với thạch anh 12MHz, việc thực hiện các lệnh sáng và

tắt đèn led sẽ chỉ tốn thời gian 1s và với thời gian như vậy không đủ đáp ứng cho đèn led

sáng và đồng thời cũng không đủ để mắt người có thể nhận biết những trạng thái khác

nhau của đèn. Chính vì vậy lưu đồ chương trình đúng sẽ phải là:

Trong đó chương trình Delay1s là đoạn chương trình “không thực hiện” một công

việc có ý nghĩa nào mà chỉ đơn thuần là sẽ thực hiện trong thời gian 1s. Những chương

trình này thường được viết thành những chương trình con và cất trong các thư viện để có

thể gọi sử dụng một cách nhanh nhất.

2. Led 7 đoạn

Để giao tiếp giữa vi điều khiển và led 7 đoạn thông thường người ta sử dụng một

trong hai cách sau:

- Giao tiếp trực tiếp: kiểu này sẽ dùng 1 port loại Anode chung và sử dụng 8 đường

IO.

Begin

Sáng đèn

Tắt đèn

Begin

Sáng đèn

Delay 1s

Delay 1s

Tắt đèn

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 112

Hình 5.10: Giao tiếp trực tiếp điều khiển led 7 đoạn

- Giao tiếp gián tiếp: kiểu này chỉ dùng 4 đường kết nối với IC giải mã led 7 đoạn

Hình 5.11: Giao tiếp gián tiếp điều khiển led 7 đoạn

Trong 2 cách giao tiếp này, cách thứ 2 có ưu điểm hơn về số đường kết nối với vi

điều khiển nhưng lại có khuyết điểm là chỉ hiện thị được các số từ 0 – 9 và các mã đã

được lập trình sẵn của vi mạch giải mã. Cách thứ nhất tuy cần nhiều đường kết nối hơn

nhưng lại có thể hiển thị được linh động hơn.

Các ứng dụng thông thường không sử dụng 1 led 7 đoạn để hiển thị mà cần nhiều

led hơn, kết nối dưới đây cho phép hệ thống sử dụng 8 đèn led 7 đoạn để hiển thị:

Hình 5.12: Giao tiếp trực tiếp điều khiển nhiều led 7 đoạn

Cách kết nối này tương tự với cách kết nối trực tiếp đã giới thiệu ở trên. Để hiển

thị các chữ số trên hệ thống đèn led 7 đọan này người ta phải thiết lập một bảng mã như

sau:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 113

Số hex dp g f e d c b a Mã số hex

0 1 1 0 0 0 0 0 0 C0

1 1 1 1 1 1 0 0 1 F9

2 1 0 1 0 0 1 0 0 A4

3 1 0 1 1 0 0 0 0 B0

4 1 0 0 1 1 0 0 1 99

5 1 0 0 1 0 0 1 0 92

6 1 0 0 0 0 0 1 0 82

7 1 1 1 1 1 0 0 0 F1

8 1 0 0 0 0 0 0 0 80

9 1 0 0 1 0 0 0 0 90

A 1 0 0 0 1 0 0 0 88

B 1 0 0 0 0 0 1 1 83

C 1 1 0 0 0 0 1 0 C2

D 1 0 1 0 0 0 0 1 A1

E 1 0 0 0 0 1 1 0 86

F 1 0 0 0 1 1 1 0 8E

Tắt 1 1 1 1 1 1 1 1 FF

Do các đường dữ liệu của led 7 đoạn được nối chung với nhau nên khi cho phép

hiển thị nhiều led cùng 1 lúc thì tất cả các led này đều sáng cùng 1 chữ số, chính vì vậy để

hiển thị 8 led 7 đoạn với các chữ số khác nhau thì phải sử dụng phương pháp quét.

Phương pháp quét ở đây sử dụng đặc điểm của mắt người là có khả năng lưu ảnh. Mỗi

chữ số trên 1 led sẽ sáng lên trong khi 7 led còn lại đều tắt, sau đó đến led kế tiếp, quá

trình cứ như vậy cho đến khi led cuối cùng sáng chữ số cuối cùng, và quá trình quét phải

được lặp lại liên tục với tốc độ nhanh đảm bảo mắt vẫn còn lưu ảnh và như vậy con người

sẽ thấy dường như 8 led đều sáng cùng một lúc.

Cách kết nối vi điều khiển với led 7 đọan tối ưu nhất về số đường kết nối là sử

dụng phương pháp giao tiếp gián tiếp kết hợp với một vi mạch giải mã như trong hình vẽ.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 114

Hình 5.13: Giao tiếp gián tiếp điều khiển nhiều led 7 đoạn

Để hiển thị một số nào đó trên led, chỉ cần thực hiện lệnh

Mov P1, #XYh

Trong đó Y chính là chữ số muốn hiển thị lên đèn và X điều khiển vị trí led. Đoạn

chương trình sau là một ví dụ để hiển thị mã số sinh viên : 06118093 lên 8 đèn led:

Org 0000h

Mov P1,#00h ; hiển thị số 0 lên led đầu tiên bên phải

lcall Delay

Mov P1,#16h ; hiển thị số 6 lên led thứ nhì

lcall Delay

Mov P1,#21h ; hiển thị số 1 lên led thứ ba

lcall Delay

Mov P1,#31h ; hiển thị số 1 lên led thứ tư

lcall Delay

Mov P1,#48h ; hiển thị số 8 lên led thứ năm

lcall Delay

Mov P1,#50h ; hiển thị số 0 lên led thứ sáu

lcall Delay

Mov P1,#69h ; hiển thị số 9 lên led thứ bảy

lcall Delay

Mov P1,#73h ; hiển thị số 3 lên led thứ tám

lcall Delay

Sjmp 0000h

Đọan chương trình trên chỉ là 1 ví dụ để bạn hiển thị một số bất kỳ nào đó lên 8 led

7 đoạn, trong thực tế thường thì những chữ số trong quá trình hiển thị phải thay đổi được

nên thường người ta xây dựng chương trình hiển thị số với các chữ số được lưu trong 1

vùng bộ nhớ RAM nào đó. Lưu đồ chương trình như sau:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 115

3. Led ma trận

Cấu tạo led ma trận như sau:

Hình 5.14: Cấu tạo bên trong 1 led ma trận

Thông thường trong thực tế các led ma trận có kích thước 8x8 hoặc 5x7. ở ví dụ về

cấu tạo của 1 led ma trận trên chỉ là một led ma trận 4x4. Để điều khiển 1 led trong ma

trận led này sáng thì ta phải đưa dữ liệu ra hàng và cột. Dữ liệu tại cột = [1] và dữ liệu tại

hàng = [0] sẽ làm led ở vị trí tương ứng sáng. Ta nhận thấy do các led trên cùng 1 hàng

được nối chung với nhau chân Cathode và các led trên cùng 1 cột được nối chung chân

Anode nên ta không thể thực hiện việc sáng nhiều đèn led trong led ma trận một cách bất

kỳ được. nếu có nhiều hàng hoặc nhiều cột led sáng đồng tời thì các hàng và cột này sẽ

sáng giống nhau. Chính vì vậy, ta lại phải áp dụng phương pháp quét led để thực hiện việc

sáng 1 cách bất kỳ. ở ví dụ sau ta sẽ áp dụng quét theo cột, có nghĩa là trong 1 thời điểm,

các led trên 1 cột sẽ được điều khiển sáng theo yêu cầu và sau đó đến cột tiếp theo. Ví dụ

một ma trận led 8x8 sáng chữ A. Ký tự được thể hiện trong led ma trận thường có kích

thước 7x5, kích thước này sẽ đảm bảo tính mỹ thuật của 1 ký tự. ký tự A trong led ma trận

sẽ có dữ liệu như sau:

C1 C2 C3 C4

H1

H2

H3

H4

Bắt đầu

Đọc dữ liệu từ bộ nhớ

Gởi dữ liệu ra led

Delay Ô nhớ và led tiếp theo

Led cuối ?

Đ

S

Ret

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 116

Ở đây các cột sẽ kết nối với port P0, các hàng kết nối với P2 thông qua một các vi

mạch đệm, vi mạch đệm có thể sử dụng là ULN2803. Ta nhận thấy nếu chọn việc quét cột

thì dữ liệu của từ cột là như sau:

Cột Dữ liệu

1

2

3

4

5

6

7

8

FF

FF

E0

D7

B7

D7

E0

FF

Đọan chương trình hiển thị chữ A sẽ có lưu đồ như sau:

Chương trình có thể áp dụng phương pháp quét tương tự đã giới thiệu ở phần hiển

thị bằng led 7 đọan. Thông thường dữ liệu được cất trong một vùng ô nhớ nào đó và

chương trình hiển thị sẽ thực hiện công việc quét những dữ liệu đã có lên từng cột đèn led

và khi đó led ma trận sẽ sáng theo chế độ mong muốn.

Bắt đầu

Gởi dữ liệu ra hàng

Gởi dữ liệu ra cột

Delay Cột tiếp theo

Cột cuối ?

Quay về cột đầu tiên

Đ S

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 117

Trường hợp thiết kế một dòng chữ hiển thị bằng led ma trận lúc này ta thấy số

hàng sẽ thường là 8 hoặc 16, nhưng số cột lên đến hàng trăm, khi đó ta không thể kết nối

tất cả các chân hàng và cột của bảng led trực tiếp với vi điều khiển được. Nếu số cột quá

nhiều, việc quét theo cột sẽ không đảm bảo cho màn hình chữ của chúng ta sáng đều nên

người ta chuyển sang quét hàng. Dữ liệu cột sẽ được giao tiếp thông qua các vi mạch dịch

74HC595.

4. Hiển thị bằng LCD

LCD có rất nhiều dạng phân biệt theo kích thước từ vài kí tự đến hàng chục kí tự, từ 1

hàng đến vài chục hàng. Ví dụ LCD 16×2 có nghĩa là có 2 hàng, mỗi hàng có 16 kí tự. LCD

20×4 có nghĩa là có 4 hàng, mỗi hàng có 20 kí tự.

LCD có nhiều loại và số chân của chúng cũng khác nhau, với LCD 16x2 có 2 loại phổ

biến là loại 14 chân và loại 16 chân, sự khác nhau là các chân nguồn cung cấp, còn các chân

điều khiển thì không thay đổi, khi sử dụng loại LCD nào thì phải tra datasheet của chúng để

biết rõ các chân. Sơ đồ chân của LCD như bảng sau:

Bảng 5.1: Sơ đồ chân của LCD 16x2 Hantronix

Trong 14 chân của LCD được chia ra làm 3 dạng tín hiệu như sau:

Các chân cấp nguồn: Chân số 1 là chân nối mass (0V), chân thứ 2 là Vdd nối với

nguồn +5V. Chân thứ 3 dùng để chỉnh contrast thường nối với biến trở.

Các chân điều khiển: Chân số 4 là chân RS dùng để điều khiển lựa chọn thanh ghi.

Chân R/W dùng để điều khiển quá trình đọc và ghi. Chân E là chân cho phép dạng xung chốt.

Các chân dữ liệu D7÷D0: Chân số 7 đến chân số 14 là 8 chân dùng để trao đổi dữ liệu

giữa thiết bị điều khiển và LCD.

Để điều khiển LCD thì có các IC chuyên dùng được tích hợp bên dưới LCD có mã số

447801 đến các IC 447809. Trong IC này có bộ nhớ RAM dùng để lưu trữ dữ liệu cần hiển thị

và thực hiện việc điều khiển LCD hiển thị.

Các lệnh điều khiển bao gồm các lệnh được liệt kê ở bảng sau:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 118

Bảng 5.2: Các lệnh điều khiển LCD

Lệnh xoá màn hình “Clear Display”: khi thực hiện lệnh này thì LCD sẽ bị xoá và bộ

đếm địa chỉ được xoá về 0.

Lệnh di chuyển con trỏ về đầu màn hình “Cursor Home”: khi thực hiện lệnh này thì bộ

đếm địa chỉ được xoá về 0, phần hiển thị trở về vị trí gốc đã bị dịch trước đó. Nội dung bộ

nhớ RAM hiển thị DDRAM không bị thay đổi.

Lệnh thiết lập lối vào “Entry mode set”: lệnh này dùng để thiết lập lối vào cho các kí tự

hiển thị, bit ID = 1 thì con trỏ tự động tăng lên 1 mỗi khi có 1 byte dữ liệu ghi vào bộ hiển thị,

khi ID = 0 thì con trỏ sẽ không tăng: dữ liệu mới sẽ ghi đè lên dữ liệu cũ. Bit S = 1 thì cho

phép dịch chuyển dữ liệu mỗi khi nhận 1 byte hiển thị.

Lệnh điều khiển con trỏ hiển thị “Display Control”: lệnh này dùng để điều khiển con

trỏ (cho hiển thị thì bit D = 1, tắt hiển thị thì bit D = 0), tắt mở con trỏ (mở con trỏ thì bit C =

1, tắt con trỏ thì bit C = 0), và nhấp nháy con trỏ (cho nhấp nháy thì bit B = 1, tắt thì bit B =

0).

Lệnh di chuyển con trỏ “Cursor /Display Shift”: lệnh này dùng để điều khiển di chuyển

con trỏ hiển thị dịch chuyển (SC = 1 cho phép dịch chuyển, SC = 0 thì không cho phép),

hướng dịch chuyển (RL = 1 thì dịch phải, RL = 0 thì dịch trái). Nội dung bộ nhớ DDRAM

vẫn không đổi.

Lệnh thiết lập địa chỉ cho bộ nhớ RAM phát kí tự “Set CGRAM Addr”: lệnh này dùng

để thiết lập địa chỉ cho bộ nhớ RAM phát kí tự.

Lệnh thiết lập địa chỉ cho bộ nhớ RAM hiển thị “Set DDRAM Addr”: lệnh này dùng để

thiết lập địa chỉ cho bộ nhớ RAM lưu trữ các dữ liệu hiển thị.

Hai lệnh cuối cùng là lệnh đọc và lệnh ghi dữ liệu LCD.

Dạng sóng các tín hiệu khi thực hiện ghi dữ liệu vào LCD.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 119

Hình 5.15 : Dạng sóng tín hiệu ghi dữ liệu vào LCD

Nhìn vào dạng sóng ta có thể thấy được trình tự điều khiển như sau:

- Điều khiển tín hiệu RS.

- Điều khiển tín hiệu R/W xuống mức thấp.

- Điều khiển tín hiệu E lên mức cao để cho phép.

- Xuất dữ liệu D7÷D0.

- Điều khiển tín hiệu E về mức thấp.

- Điều khiển tín hiệu R/W lên mức cao trở lại.

Việc xây dựng lưu đồ chương trình và viết chương trình hiển thị lên LCD dựa hoàn

tòan vào dạng sóng trên và các yêu cầu hiển thị trên màn hình của bạn. Khi lập trình cho LCD

bằng ngôn ngữ C, các thư viện LCD.h thường được xây dựng sẵn và bạn chỉ việc sử dụng

chúng.

IV. MA TRẬN PHÍM

Việc nhập dữ liệu bên ngòai tác động vào vi điều khiển trong quá trình đang xử lý

một chương trình thông thường được thông qua các phím nhấn. Các phím nhấn đơn đã

được mô tả trong các ví dụ minh họa về điều khiển động cơ, trong phần này sẽ trình bày

ứng dụng sử dụng ma trận phím. Ma trận phím được sử dụng để “tiết kiệm” các đường

giao tiếp IO của vi điều khiển. với 16 phím nhấn đơn, ta cần dùng 16 đường giao tiếp

nhưng qua sử dụng ma trận phím, số đường sử dụng chỉ còn lại 8. Sẽ càng tiết kiệm được

nhiều nếu ta sử dụng nhiều phím nhấn hơn.

Hình 5.16: Sơ đồ kết nối Ma trận phím

Một số nhận xét về ma trận phím như sau:

C1 C2 C3 C4

H1

H2

H3

H4

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 120

Nếu ta coi dữ liệu ở các hàng là dữ liệu ngõ ra và dữ liệu các cột là dữ liệu ngõ vào,

ta có:

- Tất cả dữ liệu ngõ vào luôn bằng mức [1] khi không có phím nào bị nhấn

- Nếu cho dữ liệu ngõ ra bằng [0] thì dữ liệu ngõ vào ở cột tương ứng với

phím bị nhấn sẽ bằng [0], các dữ liệu ngõ vào còn lại sẽ bằng [1]. Tuy nhiên sẽ

không phân biệt được trường hợp các phím cùng 1 cột nhưng khác hàng được

nhấn vì ngõ vào tương ứng luôn bằng [0].

- Nếu cho duy nhất một hàng bằng [0], các hàng còn lại bằng [1]. Ngõ vào

cột sẽ bằng [0] khi và chỉ khi phím nằm ở vị trí hàng và cột tương ứng bị nhấn, vì

vậy ta nhận biết chính xác được phím nào đang bị nhấn.

Từ đó ta xây dựng nên quy tắc quét bàn phím như sau:

+ Xuất dữ liệu quét cột 1

+ Kiểm tra dữ liệu các hàng, nếu có hàng nào tác động, lưu lại giá trị mã

phím

+ Kiểm tra lần lượt các cột tiếp theo

+ Đánh dấu giá trị của mã phím khi không có phím bị nhấn.

Và lưu đồ được trình bày dưới đây:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 121

Hình 5.17: Lưu đồ quét bàn phím ma trận

Lưu ý trong quá trình đọc phím đơn hay bàn phím, cần xử lý một số vấn đề khác

như sau:

- Kiểm tra buông phím: khi phím đã bị nhấn, cần kiểm tra đến khi nào phím không

tác động nữa, việc này giúp cho tránh được việc lặp phím nhấn dù phím chỉ được

tác động 1 lần. Việc kiểm tra này được thực hiện bằng cách kiểm tra giá trị của

phím nhấn khi có tác động, nếu vẫn còn tác động thì lặp lại chính lệnh kiểm tra cho

đến khi phím hết tác động.

- Chống dội: chống hiện tượng những xung điện khi phím vừa được tác động hoặc

tại thời điểm phím được nhả ra, việc này sẽ giúp cho tránh hiện tượng 1 phím chỉ

bị nhấn 1 lần nhưng lại tác động nhiều lần. Việc kiểm tra chống dội được thực hiện

bằng cách kiểm tra giá trị phím nhấn nhiều lần liên tiếp, nếu giống nhau có nghĩa

là 1 tác động thực, còn nếu khác nhau có nghĩa chỉ là 1 xung nhiễu.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 122

V. ADC VÀ DAC

1. Chuyển đổi ADC.

Chuyển đổi ADC cho phép vi điều khiển đo được những tín hiệu tương tự, từ đó sử

dụng kết quả đo này cho các ứng dụng điều khiển như điều khiển khống chế nhiệt độ, cân

và hiển thị điện tử, đo tốc độ động cơ sử dụng máy phát tốc v.v… Các vi mạch chuyển đổi

ADC được phân thành 2 lọai: truyền dữ liệu nối tiếp và truyền dữ liệu song song. Sử dụng

truyền dữ liệu song song có ưu điểm là tốc độ truyền nhanh nhưng lại cần phải sử dụng

nhiều đường giao tiếp, truyền dữ liệu nối tiếp tuy chậm nhưng lại sử dụng ít đường giao

tiếp, như vậy tùy theo từng ứng dụng cu thể mà nên chọn kiểu giao tiếp cho phù hợp.

Trong phần này chỉ giới thiệu một vi mạch chuyển đổi ADC thông dụng trên thị

trường hiện nay là ADC 0809, ưu điểm của vi mạch này là dễ sử dụng và có khả năng đo

được 8 kênh ngõ vào, khuyết điểm lại là tốc độ chậm, độ phân giải thấp (độ chính xác

không cao).

Vi mạch ADC 0809 là một thiết bị CMOS tích hợp với một bộ chuyển đổi từ

tương tự sang số 8 bit, bộ chọn 8 kênh và một bô logic điều khiển tương thích. Bộ chuyển

đổi AD 8 bit này dùng phương pháp chuyển đổi xấp xỉ liên tục. Bộ chọn kênh có thể truy

xuất bất kỳ kênh nào trong các ngõ vào tương tự một cánh độc lập.

Thiết bị này loại trừ khả năng cần thiết điều chỉnh điểm 0 bên ngoài và khả năng

điều chỉnh tỷ số làm tròn ADC 0809 dễ dàng giao tiếp với các bộ vi xử lý.

Sơ đồ chân ADC 0809:

Hình 5.18: Sơ đồ chân ADC0809

* Ý nghĩa các chân:

- IN0 đến IN7 : 8 ngõ vào tương tự.

- A, B, C : giải mã chọn một trong 8 ngõ vào

- D0 đến D7 : ngõ ra song song 8 bit

- ALE : cho phép chốt địa chỉ

- START : xung bắt đầu chuyển đổi

- CLK : xung đồng hồ

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 123

- REF (+) : điện thế tham chiếu (+)

- REF (-) : điện thế tham chiếu (-)

- VCC : nguồn cung cấp

* Các đặc điểm củaADC 0809:

- Độ phân giải 8 bit

- Tổng sai số chưa chỉnh định ± ½ LSB; ± 1 LSB

- Thời gian chuyển đổi: 100us ở tần số 640 kHz

- Nguồn cung cấp + 5V

- Điện áp ngõ vào 0 – 5V

- Tần số xung clock 10kHz – 1280 kHz

- Nhiệt độ hoạt động - 40oC đến 85oC

- Dễ dàng giao tiếp với vi xử lý hoặc dùng riêng

- Không cần điều chỉnh zero hoặc đầy thang

* Nguyên lý hoạt động:

ADC 0809 có 8 ngõ vào tương tự, 8 ngõ ra 8 bit có thể chọn 1 trong 8 ngõ vào

tương tự để chuyển đổi sang số 8 bit.

Các ngõ vào được chọn bằng cách giải mã. Chọn 1 trong 8 ngõ vào tương tự được

thực hiện nhờ 3 chân ADDA, ADDB, ADDC như bảng trạng thái sau:

Bảng 5.3 : Bảng trạng thái ADC 0809

auk hi kích xung start thì bộ chuyển đổi bắt đầu hoạt động ở cạnh xuống của

xung start, ngõ ra EOC sẽ xuống mức thấp sau khoảng 8 xung clock (tính từ cạnh xuống

của xung start). Lúc này bit cơ trọng số lớn nhất (MSB) được đặt lên mức 1, tất cả các bit

còn lại ở mức 0, đồng thời tạo ra điện thế có giá trị Vref/2, điện thế này được so sánh với

điện thế vào in.

+ Nếu Vin > Vref/2 thì bit MSB vẫn ở mức 1.

+ Nếu Vin < Vref/2 thì bit MSB vẫn ở mức 0.

Tương tự như vậy bit kế tiếp MSB được đặt lên 1 và tạo ra điện thế có giá trị

Vref/4 và cũng so sánh với điện áp ngõ vào Vin. Quá trình cứ tiếp tục như vậy cho đến

khi xác định được bit cuối cùng. Khi đó chân EOC lên mức 1 báo cho biết đã kết thúc

chuyển đổi.

A2 A1 A0 Ngõ vào tương tự

0 0 0 IN0

0 0 1 IN1

0 1 0 IN2

0 1 1 IN3

1 0 0 IN4

1 0 1 IN5

1 1 0 IN6

1 1 1 IN7

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 124

Trong suốt quá trình chuyển đổi chân OE được đặt ở mức 1, muốn đọc dữ liệu ra

chân OE xuống mức 0.

Trong suốt quá trình chuyển đổi nếu có 1 xung start tác động thì ADC sẽ ngưng

chuyển đổi.

Mã ra N cho một ngõ vào tùy ý là một số nguyên.

Trong đó Vin : điện áp ngõ vào hệ so sánh.

Vref(+): điện áp tại chân REF(+).

Vref(-): điện áp tại chân REF(-).

- Giá trị bước nhỏ nhất

1 LSB = 8

2

5 = 0,0196 V/byte

Vậy với 256 bước Vin = 5V.

Áp vào lớn nhất của ADC 0809 là 5V.

• Biểu đồ thời gian của ADC 0809.

Hình 5.19: Lưu đồ thời gian quá trình chuyển đổi ADC

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 125

Giaûi thuaät ñoïc ADC 0809

Kết nối giữa vi điều khiển và vi mạch ADC 0809 được trình bày trong ví dụ sau:

Hình 5.20: Sơ đồ kết nối ADC 0809 với vi điều khiển

Baét ñaàu

Xuaát tín hieäu choïn keânh

Xuaát tín hieäu ALE

Xuaát tín hieäu Start

EOC = 1?

Xuaát tín hieäu OE

Ñoïc döõ lieäu soá

Keát thuùc

s

Ñ

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 126

Trong đó Port 0 được kết nối với các chân dữ liệu D0 – D7 và Port 2 kết nối với

các chân điều khiển của ADC0809. Đọan chương trình đọc dữ liệu từ ngõ vào IN0 của

ADC và cất vào thanh ghi A như sau:

Read_ADC:

Anl P2,#0f8h

Setb P2.3

Setb P2.4

Nop

Nop

Clr P2.3

Clr P2.4

Jnb P2.5,$

Setb P2.6

Mov A,P0

ret

Maïch dao ñoäng schmitt cho ADC 0809.

Hình 5.21: Mạch tạo dao động

Chaân caáp xung ñöôïc laáy töø maïch dao ñoäng beân ngoaøi ñeå ñöa vaøo chaân clk (chaân

soá 10) cuûa ADC 0809. Maïch dao ñoäng naøy duøng coång schmitt. Coâng thöùc tính taàn soá

cuûa maïch (theo saùch maïch soá cuûa Nguyeãn Höõu Chöông) nhö sau:

Baûng tính taàn soá maïch Trigger Schmitt.

IC Taàn soá

7414 0,8/R.C (R≤ 500 )

74LS14 0,8/R.C (R≤ 2 k )

74HC14 0,8/R.C (R≤10M )

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 127

Taàn soá toái ña cuûa xung clock caáp cho ADC laø 640Khz. Ngöôøi thöïc hieän chæ

duøng ôû taàn soá 500Khz vaø duøng IC 74LS14. Giaù trò linh kieän ñöôïc xaùc ñònh nhö

sau:

CRf

8,0

Vôùi taàn soá 500Khz vaø choïn giaù trò ñieän trôû laø 1K thì ta coù :

33

10.5,110.500

8,0

C =

910.06,1

(F) 1060 (pF)

Choïn tuï C = 102 (pF).

Tuy nhiên đây chỉ là một đọan chương trình con giới thiệu cách sử dụng ADC

0809, bạn hãy viết lại chương trình con một cách đầy đủ hơn bằng cách cho phép đọc bất

kỳ kênh ngõ vào tương tự nào.

2. Chuyển đổi DAC.

Sô ñoà chaân:

Hình 5.22: Sơ đồ chân DAC0808

Chöùc naêng caùc chaân:

Chaân soá Kyù hieäu Chöùc naêng

1 NC (NOTE2) Ñeå troáng

2 GND Noái max

3 VEE Noái nguoàn (-12V)

4 I0 Ngoõ ra töông töï

5,6,7,8,9,10,11,12 A1÷A12 Ngoõ vaøo tín hieäu soá.

13 Vcc Noái voái nguoàn 5V

14 VREF+ Ñieän aùp tham chieáu döông(+12V)

15 VREF- Ñieän aùp tham chieáu aâm(-12V)

16 COMP Ngoõ ra .

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 128

Ñieän aùp ngoõ ra seõ ñöôïc xaùc ñònh theo coâng thöùc:

refrefref

in

raVVV

DU

256

Hình 5.23: Sơ đồ kết nối vi điều khiển với DAC0808

VI. KẾT NỐI BỘ NHỚ NGÒAI

Bộ nhớ bên trong của vi điều khiển AT89S8252 bao gồm 8 Kbytes Flash Rom,

256 Bytes Ram và 2 Kbytes EEpRom, các cổng kết nối chỉ gồm 4 cổng và khi sử dụng

cho các chương trình lớn có độ lớn hơn 8Kbytes thì không thể sử dụng được. Chính vì vậy

mà vi điều khiển lúc này được sử dụng như một vi xử lý thông thường bằng việc kết nối

thêm bộ nhớ ROM, RAM bên ngòai, kết nối thêm thiết bị ngọai vi và hoạt động như một

hệ thống vi xử lý. Lúc này Port 0 và Port 2 được sử dụng như các đường địa chỉ và dữ liệu

để truy xuất bộ nhớ ngòai. Vi mạch bộ nhớ ROM thường được dùng là họ vi mạch 27xx

còn vi mạch bộ nhớ RAM là họ vi mạch 64xx. Giao tiếp ngoại vi có thể dùng vi mạch

8255, 8279 … Thông thường bước đầu tiên khi thiết kế hệ thống vi xử lý là phải lựa chọn

dung lượng bộ nhớ cần thiết, các thành phần giao tiếp ngoại vi v.v… Thông thường trong

hệ thống cần nhiều nhất là bộ nhớ ROM, còn bộ nhớ RAM thường chỉ cần khoảng

8Kbytes là đủ đáp ứng cho hệ thống. Tuy nhiên nếu thiết kế bộ nhớ ROM nhiều quá dẫn

đến không còn địa chỉ để sử dụng cho các thiết bị khác. Vì vậy có thể lựa chọn bộ nhớ

ROM là 32 Kbytes.

Để giải mã đa hợp địa chỉ dữ liệu của Port 0 thường sử dụng vi mạch chốt

74LS535. Sơ đồ chân vi mạch chốt như sau:

Bảng sự thật :

C OC Dn Qn

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 129

H L H H

H L L L

L L X Q0

X H X Z

Để giải mã địa chỉ cho bộ nhớ và các thiết bị ngoại vi thường sử dụng vi mạch giải

mã 74LS138

bảng sự thật:

INPUT OUTPUTS

G2A G2B G1 A B C O0 O1 O2 O3 O4 O5 O6 O7

H X X X X X H H H H H H H H

X H X X X X H H H H H H H H

X X L X X X H H H H H H H H

L L H L L L L H H H H H H H

L L H H L L H L H H H H H H

L L H L H L H H L H H H H H

L L H H H L H H H L H H H H

L L H L L H H H H H L H H H

L L H H L H H H H H H L H H

L L H L H H H H H H H H L H

L L H H H H H H H H H H H L

Bộ nhớ 32 Kbyte ROM sử dụng vi mạch 27256 và vi mạch Ram 8 Kbytes : 6264

Hình 5.24: Sơ đồ chân của EPROM 27256 (a) và RAM 6264(b)

1. Bộ nhớ ngoài (external memory)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 130

Bộ nhớ ngoài của vi điều khiển rất quan trọng để mở rộng tầm hoạt động lớn hơn

Resources trên Chip để tránh sự thiếu hụt của thiết bị được nhà sản xuất quy định. Họ

MSC-51 cho phép mở rộng vùng nhớ mã ngoài 64K và vùng nhớ dữ liệu ngoài 64K.

Những ngoại vi cũng được thêm vào để mở rộng thêm khả năng xuất nhập I/O và chúng

trở thành vùng nhớ dữ liệu ngoài sử dụng như bản đồ nhớ I/O. Khi dùng bộ nhớ ngoài thì

Port 0 trở thành địa chỉ đa kênh (A0A7) và bus dữ liệu (D0D7) mà tín hiệu ALE sẽ

chốt byte của địa chỉ ở sự bắt đầu của mỗi chu kỳ nhớ ngoài. Port 2 thường được dùng

làm byte cao của bus địa chỉ. Port 0 được ghép chung để tiết kiệm chân ra.

Phương pháp chungđược sắp đặt để làm việc là : Trong suốt nữa đầu của chu kỳ

nhớ, byte thấp của địa chỉ được cung cấp bởi Port 0 và được chốt bởi việc dùng tín hiệu

ALE. Một con chốt 74HC373 (hoặc con khác tương đương) sẽ giữ byte thấp của địa chỉ

chỉ chốt lại trong khoảng thời gian của chu kỳ nhớ. Trong nữa chu kỳ nhớ thứ hai, Port 0

được sử dụng như bus dữ liệu và dữ liệu được đọc hoặc ghi tùy thuộc hoạt động đọc hay

ghi.

Vieäc phaân keânh bus ñòa chæ vaø bus döõ lieäu ñöôïc veõ nhö sau :

Memory cycle

A0 - A15 Address

D0 - D7 Data

(a) Nonmultiplexed (24 pins)

Memory cycle

A8 - A15 Address

AD0 - AD7 Address Data

(b) Multiplexed (16 pins)

+ Truy xuất bộ nhớ mã ngoài (Acessing External Code Memory) :

Bộ nhớ mã ngoài chỉ được đọc bộ nhớ khi được cho phép của tín hiệu PSEN. Khi

EPROM ngoài được sử dụng, cả 2 Port 0 và Port 2 không được sử dụng như các Port xuất

nhập đa năng nữa. Sự kết nối phần cứng của bộ nhớ EPROM như sau

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 131

Hình 5.25: Accessing External Code Memory (Truy xuất bộ nhớ mã ngoài)

Một chu kỳ máy của 8051 có 12 chu kỳ dao động. Nếu dao động trên Chip được

lái bởi bộ thạch anh 12 MHz thì chu kỳ máy này có thời gian là 1s.

Trong một chu kỳ máy tiêu biểu, tín hiệu ALE tích 2 lần. Lần thứ nhất cho phép

74HC373 mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thì byte thấp và byte cao của

bộ đếm chương trình đều có nhưng EPROM chưa xuất vì PSEN chưa tích cực, khi tín

hiệu lên một trở lại thì Port 0 đã có dữ liệu là Opcode. ALE tích cực lần thứ hai được giải

thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu lệnh đang hiện hành là

lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ đi. Biểu đồ thời gian của hoạt

động của này được hiểu như là 1 Opcode phát ra và được biểu diễn như sau:

One machine cycle

S1 S2 S3 S4 S5 S6 S1

+ Truy xuất bộ nhớ dữ liệu ngoài (Accessing External Data Memory) :

Bộ nhớ dữ liệu ngoài được đọc hoặc ghi khi được cho phép của tín hiệu RD và WR.

Hai tín hiệu này nằm ở chân P3.7 (RD) và P3.6 (WR). Lệnh MOVX được dùng để truy

xuất bộ nhớ dữ liệu ngoài và dùng một bộ đệm dữ liệu 16 bit (DPTR), R0 hoặc R1 như là

một thanh ghi địa chỉ.

Các RAM có thể giao tiếp với 8051 tương tự cách thức như EPROM ngoại trừ

chân RD của 8051 nối với chân OE (Output Enable) của chân RAM và chân WR của

Port 0

EA

ALE

Port 2

PSEN

8051

D0 D7

A0 A7

A8 A15

OE

74HC373

O D

G EPROM

P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2

OSC

ALE

PSEN/

PORT 2

PORT 0 PCL Opcode PCL Byte 2

PCH PCH (Program counter high byte)

Hình 5.26: Read timing for external code

memory

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 132

8051 nối với chânWE của RAM. Sự nối các bus địa chỉ và dữ liệu tương tự như cách nối

của EPROM. Biểu đồ thời gian của hoạt động đọc bộ nhớ dữ liệu ngoài bởi MOVX A, @

DPTR như sau :

One machine cycle One machine cycle

Hình 5.27: Timing for MOVX instruction

Trong biểu đồ thời gian của bộ đọc dữ liệu ngoài, cứ hai chu kỳ máy thì ALE tích

cực 3 lần. ALE tích cực lần thứ nhất để chốt byte thấp bộ đếm chương trình vào IC chốt

373để khi PSEN tích cực lái Opcode vào Port 0. ALE tích cực lần thứ hai để chốt địa chỉ

của byte thấp bộ đếm dữ liệu vào IC chốt 373 và chờ khi RD tích cực để lấy dữ liệu ngoài,

tín hiệu được WR đưa lên cao trong suốt thời gian thực hiện lệnh đọc.

Hình 5.28: Accessing External Data Memory (Truy xuaát boä nhôù döõ lieäu

ngoaøi)

Port 0

EA

ALE

Port 2

RD

WR

8051

D0 D7

A0 A7

A8 A15

OE

WE

74HC373

O D

G

RAM

S1 S2 S3 S4 S5 S6 S3 S4 S1 S2 S5 S6

ALE

PORT 2

PORT 0 DPL Opcode PCL

PCH DPH (Data pointer high byte)

PSEN

RD

External

data in

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 133

CS

CS

D0 - D7

OE

EPROM

A0 A12

8K Bytes

CS

C

B

A

G1

G2

G3

0

1

2

3

4

5

6

7

CS

CS

OE D0 - D7

W

RAM

A0 A12

8K Bytes

CS

6264 2764

PSEN RD

WR

Address Bus (A0 A15)

Data Bus (D0 D7)

Select other

EPROM/RAM

Biểu đồ thời gian ghi lên bộ nhớ của dữ liệu ngoài bởi lệnh MOVX @ DPTR, A

cũng giống như hoạt động đọc, ngoại trừ chân WR hạ thấp thay vào chổ của RD (RD

được đưa lên cao) và dữ liệu được xuất trên Port 0.

+ Sự giải mã địa chỉ (Address Decoding) :

Sự giải mã địa chỉ là một yêu cầu tất yếu để chọn EPROM, RAM, ADCO809, . . .

Sự giải mã địa chỉ đối với 8051 để chọn các vùng nhớ ngoài như các vi xử lý. Nếu các con

EPROM hoặc RAM 8K được dùng thì các bus địa chỉ phải được giải mã để chọn các IC

nhớ nằm trong phạm vi giới hạn 8K : 0000H1FFFH, 2000H3FFFH, . . .

Một cách cụ thể, IC giải mã 74HC138 được dùng với những đầu của nó được nối

với những đầu vào chọn Chip CS (Chip Select) trên những IC nhớ EPROM, RAM, . . .

Hình sau đây cho phép kết nối nhiều EPROM và RAM.

74HC138

Hình 5.29: Address Decoding (Giaûi maõ ñòa chæ)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 134

+ Söï ñeø leân nhau cuûa caùc vuøng nhôù döõ lieäu ngoaøi :

Moät nhöôïc ñieåm chung cuûa 8051 laø caùc vuøng nhôù döõ lieäu ngoaøi naèm ñeø leân

nhau, vì tín hieäu PSEN ñöôïc duøng ñeå ñoïc boä nhôù maõ ngoaøi vaø tín hieäu RD ñöôïc duøng

ñeå ñoïc boä nhôù döõ lieäu, neân moät con RAM coù theå chieám giöõ vuøng nhôù döõ lieäu baèng

caùch noái ñöôøng OE cuûa noù ñeán coång AND logic (phuû ñònh ñaàu vaøo cuûa NOR) cuûa

PSEN vaø RD.

W

RD

PSEN

Hình 5.30: Overlapping the External code and data space

Hình naøy cho pheùp IC RAM ñöôïc ghi nhö boä nhôù döõ lieäu, ñöôïc ñoïc nhö boä nhôù

döõ lieäu hay boä nhôù maõ. Vì vaây moät chöông trình coù theå ñöôïc LOAD vaøo trong RAM

(baèng vieäc ghi leân RAM nhö boä nhôù Data) vaø ñöôïc truy xuaát (baèng vieäc truy xuaát noù

nhö boä nhôù maõ).

2. Thiết bị ngọai vi

IC giao tiếp ngọai vi thường được sử dụng để mở rộng khả năng giao tiếp là IC

8255A. Vi mạch 8255A thường được gọi là mạch giao tiếp ngoại vi lập trình được

(Programmable Peripheral Interface – PPI). Do khả năng đa năng trong các ứng dụng thực tế

nên 8255A là vi mạch giao tiếp được dùng rất phổ biến cho các hệ vi xử lý 8 bit – 16 bit.

IC 8255A có 40 chân như hình 5.31 và sơ đồ cấu trúc bên trong như hình 5.32:

Hình 5.31: Sơ đồ chân 8255A

RAM

W

OE

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 135

Hình 5.32: Cấu trúc bên trong 8255A

Chức năng các chân của vi mạch 8255A

D7 - D0 Data bus (Bi-Direction)

RESET Reset input (nối với tín hiệu Reset toàn bộ hệ)

CS\ Chip Select

WR\ Write input

RD\ Read input

A0, A1 Port Address

PA7 – PA0 Port A

PB7 – PB0 Port B

PC7 – PC0 Port C

8255A giao tiếp với vi xử lý thông qua 3 bus: bus dữ liệu 8 bit D7-D0, bus địa chỉ, bus

điều khiển RD\; WR\; CS\; Reset.

Mã lệnh, thông qua trạng thái và và dữ liệu đều được truyền trên 8 đường dữ liệu

D7-D0. Vi xử lý gởi dữ liệu đến 8255A hoặc vi xử lý đọc dữ liệu từ 8255A tùy thuộc vào lệnh

điều khiển. Các đường tín hiệu RD\, WR\ của 8255A được kết nối với các đường RD\, WR\

của vi xử lý.

Tín hiệu Reset dùng để khởi động 8255A khi cấp địện, khi bị Reset các thanh ghi

các thanh ghi bên trong 8255A đều bị xóa và 8255A ở trạng thái sẵn sàng làm việc. Khi giao

tiếp với vi xử lý ngỏ vào tín hiệu Reset này được kết nối với tín hiệu Reset Out của vi xử lý.

Tín hiệu Chip Select (CS\) dùng để lựa chọn 8255A khi vi xử lý giao tiếp với nhiều

8255A.

8255A có 3 port xuất nhập (I/O) có tên port A, port B, port C, mỗi port 8 bit. Port A

gồm các bit PA0-PA7, port B gồm các bit PB0-PB7 và port C gồm PC0-PC7. Các port này có

thể là các port input hoặc output tùy thuộc vào lệnh điều khiển, lệnh điều khiển do vi xử lý

gởi tới chứa trong thanh ghi (còn gọi là thanh ghi điều khiển) để điều khiển 8255A.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 136

Các địa chỉ A1-A0 của 8255A dùng để lựa chọn các port và thanh ghi, A1A0=002 dùng

để chọn Port A, A1A0 = 012 dùng để chọn Port B, A1A0 = 102 dùng để chọn Port C, A1A0 =

112 dùng để chọn thanh ghi điều khiển. Trong sơ đồ khối 8255A, các port I/O chia làm hai

nhóm: nhóm A gồm port A và 4 bit cao của port C, nhóm B gồm port B và 4 bit thấp của port

C. Để sử dụng các port của 8255A người lập trình phải gởi từ điều khiển ra thanh ghi điều

khiển để 8255A định cấu hình cho các port đúng theo yêu cầu mà người lập trình mong muốn.

Cấu trúc từ điều khiển của 8255A:

Hình 5.33: Cấu trúc từ điều khiển của 8255A

* Cấu trúc phần mềm của 8255A:

Do các port của 8255A được chia làm hai nhóm nhóm A và nhóm B tách rời nên từ

điều khiển của 8255A cũng được chia làm hai nhóm.

Các bit D2D1D0 dùng để định cấu hình cho nhóm B:

Bit D0 dùng để thiết lập 4 bit thấp của port C, D0 = 0 port C thấp là port xuất dữ liệu

(output), D0 = 1 port C thấp là port nhập dữ liệu (input).

Bit D1 dùng thiết lập port B, D1 = 0 port B là port xuất dữ liệu (output), D1 = 1 port B

là port nhập dữ liệu (input).

Bit D2 dùng thiết lập Mode điều khiển của nhóm B:

D2 = 0: nhóm B hoạt động ở Mode 0.

D2 =1: nhóm B hoạt động ở Mode 1.

D7 D6 D5 D4 D3 D2 D1 D0

PORT C

(LOWER)

1 = INPUT

0 = OUTPUT

PORT B

1 = INPUT

0 = OUTPUT

MODE

SELECTION

0 = MODE 0

1 = MODE 1

GROUP B

PORT C (UPPER)

1 = INPUT

0 = OUTPUT

PORT A

1 = INPUT

0 = OUTPUT

MODE

SELECTION

00 = MODE 0

01 = MODE 1

1X = MODE 2

GROUP A

MODE SET

FLAG

1 = ACTIVE

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 137

Các bit D6, D5, D4, D3 dùng để định cấu hình cho nhóm A:

Bit D3 dùng để thiết lập 4 bit cao của port C, D3 = 0 port C là port xuất dữ liệu (output),

D3 = 1 port C là port nhập dữ liệu (input).

Bit D4 dùng để thiết lập port A, D4 = 0 port A là port xuất dữ liệu (output), D4 = 1 port

A là port nhập dữ liệu (input).

Bit D6D5 dùng thiết lập Mode điều khiển của nhóm A:

D6D5 = 00: nhóm A hoạt động ở Mode 0.

D6D5 = 01: nhóm A hoạt động ở Mode 1.

D6D5 = 1X: nhóm A hoạt động ở Mode 2.

Các nhóm A, B được cấu hình ở Mode 0:

Từ điều khiển nhóm A & B hoạt động ở Mode 0:

1 0 0 D4 D3 0 D1 D0

Ở Mode 0 các port A, port B, port C thấp và port C cao là các port xuất hoặc nhập dữ

liệu độc lập. Do có 4 bit để lựa chọn nên có 16 từ điều khiển khác nhau cho 16 trạng thái xuất

nhập của 4 port.

Các nhóm A & B được cấu thình ở Mode 1:

Từ điều khiển nhóm A B hoạt động ở Mode 1:

1 0 1 D4 D3 1 D1 D0

Ở Mode 1 các port A & B làm việc xuất nhập có chốt (Strobe I/O). Ở Mode này hai

port A & B hoạt động độc lập với nhau và mỗi port có 1 port 4 bit điều khiển/dữ liệu. Các

port 4 bit điều khiển/dữ liệu được hình thành từ 4 bit thấp và 4 bit cao của port C.

Khi 8255A được cấu hình ở Mode 1, thiết bị giao tiếo muốn 8255A nhận dữ liệu, thiết

bị đó phải tạo ra tín hiệu yêu cầu 8255A nhận dữ liệu, ngược lại 8255A muốn gởi tín hiệu đến

thiết bị khác, 8255A phải tạo ra tín hiệu yêu cầu thiết bị đó nhận dữ liệu, tín hiệu yêu cầu đó

gọi là tín hiệu Strobe.

Nhóm A làm việc ở cấu hình Mode 1:

Port A được cấu hình là port nhập dữ liệu.

Chức năng của các đường tín hiệu được trình bày ở hình vẽ sau đây:

Từ điều khiển :

1 0 1 1 D3 X X X

Hình 5.34: Mode 1 Port A

INT

E

A

PA7-

PA0

STBA

IBFA

PC4

PC5

PC3

PC6,7

RD

INTR

A

I/O

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 138

Các đường tín hiệu của port C trở thành các đường điều khiển/dữ liệu của port A.

Bit PC4 trở thành bit STBA (Strobe Input, tác động mức thấp), được dùng để chốt dữ

liệu ở các ngỏ vào PA7 – PA0 vào mạch chốt bên trong 8255A.

Bit PC5 trở thành bit IBTA (Input Bufer Full, tác động mức cao), dùng để báo cho

thiết bị bên ngoài biết dữ liệu đã được chốt bên trong.

Bit PC3 trở thành bit INTRA (Interrupt Request, tác động ở mức cao), bit này có mức

Logic 1 khi hai bit STBa = 1, IBF = 1 và bit INTEa (Interrupt Enable) ở bên trong 8255A

bằng 1. Bit INTEa được thiết lập mức Logic 1 hay 0 dưới sự điều khiển của phần mềm dùng

cấu trúc Set/Reset của 8255A. Ở hình vẽ trên, bit INTEa = 1 dùng để cho phép tín hiệu IBF

xuất hiện tại ngõ ra INTRA của cổng AND. Tín hiệu INTA tác động đến ngõ vào của ngắt vi

xử lý để bao cho vi xử lý biết: dữ liệu mới đã xuất hiện ở port A chương trình phục vụ ngắt sẽ

đọc dữ liệu vào xóa yêu cầu ngắt.

Các bit còn lại của port C: PC6, PC7 là các bit xuất/nhập bình thường tùy thuộc vào

bit D3 trong từ điều khiển hình trên. Các bit XXX được dùng để thiết lập cho nhóm B.

Port A được cấu hình là port xuất dữ liệu:

Chức năng của đường tín hiệu được trình bày ở hình sau:

Từ điều khiển:

1 0 1 0 D3 X X X

Hình 5.35 : Port A Xuất

Bit PC7 trở thành bit OBFa (Output Buffer Full, tác động mức thấp), khi có dữ liệu từ

vi xử lý gởi ra port A, tín hiệu OBFa sẽ yêu cầu thiết bị bên ngoài nhận dữ liệu.

Bit PC6 trở thành bit ACKa (Acknowledge Input, tác động mức thấp) thiết bị nhận dữ

liệu dùng tín hiệu này để báo cho 8255A biết tín hiệu đã được nhận và sẳn sàng nhận dữ liệu

tiếp theo.

Bit PC3 trở thành bit INTRa (Interrupt Request, tác động mức cao), bit này có mức

Logic khi hai bit OBF a = 1, ACKa = 1 và bit INTEa (Interrupt Enable) ở bên trong 8255A ở

mức 1. Tín hiệu INTRa tác động đến ngõ vào ngắt của vi xử lý đễ báo cho vi xử lý biết: thiết

bị bên ngoài đã nhận dữ liệu ở port A.

Các bit còn lại của port C: PC4, PC5 là các bit xuất/nhập bình thường tùy thuộc vào bit

D3 trong từ điều khiển hình trên. Các bit XXX dùng đễ thiết lập cho nhóm B.

INT

E

A

PA7-

PA0

OBFA

ACKA

PC7

PC6

PC3

PC4,5

W

R

INTR

A

I/O

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 139

Nhóm B làm việc ở Mode 1:

Port B được cấu hình là port nhập dữ liệu :

Chức năng của các đường tín hiệu được trình bày ở hình sau:

Từ điều khiển:

1 X X X X 1 1 X

Hình 5.38: Port B Nhập

Chức năng của các bit điều khiển giống như nhóm A hoạt động ở Mode 1.

Port B được cấu hình là port xuất dữ liệu:

Chức năng của các đường tín hiệu được trình bày ở hình sau:

Từ điều khiển :

1 X X X X 1 0 X

Hình 5.39: port B xuất

Chức năng của các bit điều khiển giống như nhóm A hoạt động ở Mode 1.

INT

E

B

PB7-

PB0

STBB

IBFB

PC2

PC1

PC0

RD

INTRB

INT

E

B

PB7-

PB0

OBFB

ACKB

PC1

PC2

PC0

W

R

INTR

B

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 140

Các bit XXX được dùng thiết lập cho nhóm A, bit D0 không có tác dụng trong trường

hợp cả hai nhóm cùng làm việc ở Mode 1.

. Nhóm A của 8255A làm việc ở Mode 2:

Mode 2 là kiểu hoạt động Strobe Bi-directional IO, sự khác biệt với Mode 1 là port có

hai chức năng xuất – nhập dữ liệu.

Từ điều khiển khi hai nhóm A và B hoạt động ở Mode 2:

1 1 X X X X X X

Chức năng của các đường tín hiệu được trình bày ở hình sau:

Từ điều khiển

Hình 5.40: port A và B ở mode 2

Các đường tín hiệu của port C trở thành các đường điều khiển/dữ liệu của port A.

Bit PC7 trở thành bit OBFa, PC6 trở thành bit ACKa, PC4 trở thành bit STBa, PC5 trở

thành IBFa và bit PC3 trở thành bit INTRa. Chức năng của các đường tín hiệu giống như

Mode 1, chỉ khác là tín hiệu ngỏ ra INTRa =1, INTE1 = 1 hoặc IBFa = 1, INTE2 = 1.

Các bit PC 2,1,0 còn lại có thể là các bit I/O tùy thuộc vào bit điều khiển c3 nhóm B.

Chú ý khi nhóm A làm việc ở Mode 2, nhóm B chỉ được phép hoạt động ở Mode 0.

Cấu hình của từ điều khiển Set/Reset bit INTE khi 8255A hoạt động ở Mode 1 hoặc

Mode 2 được trình bày ở hình sau:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Giáo trình Vi Xử Lý Chương 5. Ứng dụng và ví dụ minh họa

Trang 141

Hình 5.41. Cấu hình từ điều khiển Reset

Cấu hình này còn cho phép Set/Reset từng bit của port C. Từ điều khiển này khác với

từ điều khiển cấu hình là bit D7 = 0.

Bit D0 dùng đễ Set/Reset bit INTE, khi D0 = 1 thì INTE = 1 (cho phép ngắt), khi D0 =

0 thì INTE = 0 (không cho phép ngắt). Ba bit D1, D2, D3 dùng để chọn một bit của port C, gán

mức Logic của bit D0 cho bit của port đã chọn.

Trong thực tế port A và port B thường được cấu hình với nhiều Mode khác nhau. Ví

dụ nhóm A hoạt động ở Mode 2 nhóm B làm việc ở Mode 0.

0 1 2 3 4 5 6 7

0 1 0 1 0 1 0 1 B0

0 0 1 1 0 0 1 1 B1

0 0 0 0 1 1 1 1 B2

BIT SELECT

BIT SET / RESET

1 = SET

0 = RESET

BIT SET / RESET FLAG

0 = ACTIVE

D7 D6 D5 D4 D3 D2 D1 D0

X X X

Don’t care

Đọc dữ liệu

từ bộ nhớ

CuuDuongThanCong.com https://fb.com/tailieudientucntt