62
GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 -1- CHƢƠNG I : SƠ LƢỢC PHN CNG I. GII THIU VPIC 16F877A 1.GIỚI HIỆ CHNG Ề IC PIC là viết tt của “Programable Intelligent Computer”, có thể tm dịch là “máy tính thông minh khtrình” do hãng General Instrument đặt tên cho vi điều khiển đầu tiên ca họ: PIC1650 được thiết kế để dùng làm các thiết bngoại vi cho vi điều khiển CPU1600. Vi điều khiển này sau đó được nghiên cu phát trin thêm và tđó hình thành nên dòng vi điều khin PIC ngày nay. 11S HỔ IN CỦ I ĐIỀ HIỂN IC Trên thtrường có rt nhiu hvi điều khiển như 8051, Motorola 68HC, AVR, ARM... Tuy nhiên, hiện nay PIC đang được sdng rng rãi Vit Nam vì nhng nguyên nhân sau: - Hvi điều khin này có thtìm mua ddàng ti thtrường Vit Nam. - Giá thành không quá đắt. - Có đầy đủ các tính năng của một vi điều khin khi hoạt động độc lp. - Là sbsung rt tt vkiến thức cũng như về ng dng cho hvi điều khin mang tính truyn thng: hvi điều khin 8051. - Hin nay ti Việt Nam cũng như trên thế giới, PIC được sdng khá rng rãi. Điều này to nhiu thun li trong quá trình tìm hiu và phát trin các ng dng như: slượng tài liu, slượng các ng dng mđã được phát trin thành công, ddàng trao đổi, hc tp, ddàng tìm được schdn khi gặp khó khăn… - Shtrca nhà sn xut vtrình biên dch, các công clp trình, nạp chương trình tđơn giản đến phc tạp… - Các tính năng đa dạng của vi điều khin PIC không ngừng được phát trin.

Quang Bao Giao Tiep May Tinh

Embed Size (px)

Citation preview

Page 1: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-1-

CHƢƠNG I : SƠ LƢỢC PHẦN CỨNG

I. GIỚI THIỆU VỀ PIC 16F877A

1.GIỚI HIỆ CH NG Ề IC

PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy

tính thông minh khả trình” do hãng General Instrument đặt tên cho vi điều khiển đầu

tiên của họ: PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều

khiển CPU1600. Vi điều khiển này sau đó được nghiên cứu phát triển thêm và từ đó

hình thành nên dòng vi điều khiển PIC ngày nay.

1 1S HỔ I N CỦ I ĐIỀ HIỂN IC

Trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC, AVR,

ARM... Tuy nhiên, hiện nay PIC đang được sử dụng rộng rãi ở Việt Nam vì những

nguyên nhân sau:

- Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam.

- Giá thành không quá đắt.

- Có đầy đủ các tính năng của một vi điều khiển khi hoạt động độc lập.

- Là sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho họ vi điều khiển

mang tính truyền thống: họ vi điều khiển 8051.

- Hiện nay tại Việt Nam cũng như trên thế giới, PIC được sử dụng khá rộng rãi.

Điều này tạo nhiều thuận lợi trong quá trình tìm hiểu và phát triển các ứng dụng như:

số lượng tài liệu, số lượng các ứng dụng mở đã được phát triển thành công, dễ dàng

trao đổi, học tập, dễ dàng tìm được sự chỉ dẫn khi gặp khó khăn…

- Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạp chương

trình từ đơn giản đến phức tạp…

- Các tính năng đa dạng của vi điều khiển PIC không ngừng được phát triển.

Page 2: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-2-

1 I N C IC

Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc:

Kiến trúc Von-Neumann và kiến trúc Harvard.

Hình 3.1: Kiến trúc Harvard và kiến trúc Von-Neuman

Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Harvard. Điểm khác biệt

giữa kiến trúc Harvard và kiến trúc Von-Neumann là cấu trúc bộ nhớ dữ liệu và bộ

nhớ chương trình.

Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung

trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương

trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí của CPU

phải rất cao,vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể tương tác

với bộ nhớ dữ liệu hoặc bộ nhớ chương trình. Như vậy có thể nói kiến trúc Von-

Neumann không thích hợp với cấu trúc của một vi điều khiển.

Đối với kiến trúc Harvard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành hai

bộ nhớ riêng biệt. Do đó trong cùng một thời điểm CPU có thể tương tác với cả hai

bộ nhớ, như vậy tốc độ xử lí của vi điều khiển được cải thiện đáng kể. Một điểm cần

chú ý nữa là tập lệnh trong kiến trúc Harvard có thể được tối ưu tùy theo yêu cầu kiến

trúc của vi điều khiển mà không phụ thuộc vào cấu trúc dữ liệu. Ví dụ, đối với vi điều

khiển dòng 16Fxxx, độ dài lệnh luôn là 14 bit (trong khi dữ liệu được tổ chức thành

từng byte), còn đối với kiến trúc Von-Neumann, độ dài lệnh luôn là bội số của 1 byte

(do dữ liệu được tổ chức thành từng byte). Đặc điểm này được minh họa cụ thể trong

hình 3.1.

Page 3: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-3-

1.3 RISC VÀ CISC

Như đã trình bày ở trên, kiến trúc Harvard là khái niệm mới hơn so với kiến

trúc Von-Neumann. Khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của

một vi điều khiển. Qua việc tách rời bộ nhớ chương trình và bộ nhớ dữ liệu,

bus chương trình và bus dữ liệu, CPU có thể cùng một lúc truy xuất cả bộ nhớ

chương trình và bộ nhớ dữ liệu, giúp tăng tốc độ xử lí của vi điều khiển lên gấp đôi.

Đồng thời cấu trúc lệnh không còn phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh

động điều chỉnh tùy theo khả năng và tốc độ của từng vi điều khiển. Và để tiếp tục cải

tiến tốc độ thực thi lệnh, tập lệnh của họ vi điều khiển PIC được thiết kế sao cho

chiều dài mã lệnh luôn cố định (ví dụ đối với họ 16Fxxxx chiều dài mã lệnh luôn là

14 bit) và cho phép thực thi lệnh trong một chu kì của xung clock ( ngoại trừ một số

trường hợp đặc biệt như lệnh nhảy, lệnh gọi chương trình con … cần hai chu kì xung

đồng hồ). Điều này có nghĩa tập lệnh của vi điều khiển thuộc cấu trúc Harvard sẽ ít

lệnh hơn, ngắn hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số

lượng bit nhất định. Vi điều khiển được tổ chức theo kiến trúc Harvard còn được gọi

là vi điều khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập

lệnh rút gọn. Vi điều khiển được thiết kế theo kiến trúc Von-Neuman còn được gọi là

vi điều khiển CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh

phức tạp vì mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit

(1 byte).

1.4 PIPELINING

Đây chính là cơ chế xử lí lệnh của các vi điều khiển PIC. Một chu kì lệnh của vi

điều khiển sẽ bao gồm 4 xung clock. Ví dụ ta sử dụng oscillator có tần số 4 MHZ, thì

xung lệnh sẽ có tần số 1 MHz (chu kì lệnh sẽ là 1 us). Giả sử ta có một đoạn chương

trình như sau:

1. MOVLW 55h

2. MOVWF PORTB

3. CALL SUB_1

4. BSF PORTA,BIT3

5. instruction @ address SUB_1

Page 4: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-4-

Ở đây ta chỉ bàn đến qui trình vi điều khiển xử lí đoạn chương trình trên thông qua

từng chu kì lệnh. Quá trình trên sẽ được thực thi như sau:

TCY0: đọc lệnh

TCY1:thực thi lệnh 1, đọc lệnh 2

TCY2: thực thi lệnh 2, đọc lệnh 3

TCY3: thực thi lệnh 3, đọc lệnh 4.

TCY4: vì lệnh 4 không phải là lệnh sẽ được thực thi theo qui trình thực thi của

chương trình (lệnh tiếp theo được thực thi phải là lệnh đầu tiên tại label SUB_1) nên

chu kì thực thi lệnh này chỉ được dùng để đọc lệnh đầu tiên tại label SUB_1. Như vậy

có thể xem lênh 3 cần 2 chu kì xung clock để thực thi.

TCY5: thực thi lệnh đầu tiên của SUB_1 và đọc lệnh tiếp theo của SUB_1.

Quá trình này được thực hiện tương tự cho các lệnh tiếp theo của chương trình.

Thông thường, để thực thi một lệnh, ta cần một chu kì lệnh để gọi lệnh đó, và một

chu kì xung clock nữa để giải mã và thực thi lệnh. Với cơ chế pipelining được trình

bày ở trên, mỗi lệnh xem như chỉ được thực thi trong một chu kì lệnh. Đối với các

lệnh mà quá trình thực thi nó làm thay đổi giá trị thanh ghi PC (Program Counter) cần

hai chu kì lệnh để thực thi vì phải thực hiện việc gọi lệnh ở địa chỉ thanh ghi PC chỉ

tới. Sau khi đã xác định đúng vị trí lệnh trong thanh ghi PC, mỗi lệnh chỉ cần một chu

kì lệnh để thực thi xong.

Page 5: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-5-

1 CÁC NG IC CÁCH L CH N IC

* Các kí hiệu của vi điều khiển PIC

- PIC12xxxx: độ dài lệnh 12 bit

- PIC16xxxx: độ dài lệnh 14 bit

- PIC18xxxx: độ dài lệnh 16 bit

- C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)

- F: PIC có bộ nhớ flash

- LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp LV: tương tự như LF, đây là kí

hiệu cũ.

Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm

chữ A ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là

flash).Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC. Ở Việt Nam

phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất.

*Cách lựa chọn PIC

Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng. Có

nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi điều khiển chỉ

có 8 chân, ngoài ra còn có các vi điều khiển 28, 40, 44 … chân.

Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được

nhiều lần hơn. Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong vi

điều khiển, các chuẩn giao tiếp bên trong. Sau cùng cần chú ý đến bộ nhớ chương

trình mà vi điều khiển cho phép. Ngoài ra mọi thông tin về cách lựa chọn vi điều

khiển PIC có thể được tìm thấy trong cuốn sách “Select PIC guide” do nhà sản xuất

Microchip cung cấp.

1 NG N NG L NH IC

Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình cấp thấp có MPLAB

(được cung cấp miễn phí bởi nhà sản xuất Microchip), các ngôn ngữ lập trình cấp cao

hơn bao gồm C, Basic, Pascal, … Ngoài ra còn có một số ngôn ngữ lập trình được

phát triển dành riêng cho PIC như PICBasic, MikroBasic…

Page 6: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-6-

2. PIC16F877A

H NH NG SƠ ĐỒ CH N

Hình 3.2: Vi điều khiển PIC16F877A/PIC16F874A và các dạng sơ đồ chân

2.1 I H NG S Ề IC 1

Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14

bit. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Tốc độ hoạt động tối đa

cho phép là 20 MHz với một chu kì lệnh là 200ns. Bộ nhớ chương trình 8Kx14 bit,

bộ nhớ dữ liệu 368 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256 byte.

Số PORT I/O là 5 với 33 pin I/O.

Các đặc tính ngoại vi bao gồm các khối chức năng sau:

- Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.

- Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa

vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep.

- Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.

- Hai bộ Capture/so sánh/điều chế độ rông xung.

- Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.

- Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.

- Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD,

WR, CS ở bên ngoài.

Các đặc tính Analog:

Page 7: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-7-

- 8 kênh chuyển đổi ADC 10 bit.

- Hai bộ so sánh.

Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:

- Bộ nhớ flash với khả năng ghi xóa được 100.000 lần.

- Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần.

- Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.

- Khả năng tự nạp chương trình với sự điều khiển của phần mềm.

- Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial

Programming) thông qua 2 chân.

- Watchdog Timer với bộ dao động trong.

- Chức năng bảo mật mã chương trình.

- Chế độ Sleep.

- Có thể hoạt động với nhiều dạng Oscillator khác nhau.

Page 8: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-8-

2.2 SƠ ĐỒ H I CỦ IC1

Hình 3.3: Sơ đồ khối vi điều khiển PIC16F877A.

2.3 Ổ CHỨC NHỚ

Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương trình

(Program memory) và bộ nhớ dữ liệu (Data Memory).

* Bộ nhớ chƣơng trình

Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng

bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang (từ page0 đến page

Page 9: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-9-

3) . Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024 = 8192 lệnh (vì

một lệnh sau khi mã hóa sẽ có dung lượng 1 word (14 bit).

Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset

vector). Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt

vector). Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa

bởi bộ đếm chương trình.

* Bộ nhớ dữ liệu

Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank. Đối với

PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank. Mỗi bank có dung lượng 128

byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special Function Register)

nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose

Register) nằm ở vùng địa chỉ còn lại trong bank. Các thanh ghi SFR thường xuyên

được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ

nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của

chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau:

Page 10: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-10-

Hình 3.4: Sơ đồ nh i u 6 877

Page 11: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-11-

** THANH GHI CHỨC NĂNG ĐẶC BIỆT SFR:

Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều

khiển các khối chức năng được tích hợp bên trong vi điều khiển. Có thể phân thanh

ghi SFR làm hai lọai: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và

thanh ghi SRF dùng để thiết lập và điều khiển các khối chức năng bên ngoài (ví dụ

như ADC, PWM …).

Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chứa kết quả thực hiện phép

toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ

dữ liệu.

Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho

phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số

về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0.

Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho phép đọc và ghi, chứa

các bit điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và

ngắt interrputon- change tại các chân của PORTB.

Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức

năng ngoại vi.

Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này

được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1.

Page 12: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-12-

Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng

CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM.

Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt

này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2.

Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của

vi điều khiển.

** THANH GHI MỤC ĐÍCH CH NG G :

Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh

ghi FSG (File Select Register). Đây là các thanh ghi dữ liệu thông thường, người sử

dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để

chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình.

* Stack

Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng

nhớ đặc biệt không cho phép đọc hay ghi.

Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ

nhánh, giá trị của bộ đếm chương trình PC tự động được vi điều khiển cất vào trong

stack. Khi một trong các lệnh RETURN, RETLW hat RETFIE được thực thi, giá trị

PC sẽ tự động được lấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình

theo đúng qui trình định trước.

Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa

chỉ và hoạt động theo cơ chế xoay vòng. Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ

9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ

10 sẽ ghi đè lên giá trị cất vào Stack lần thứ 2.

Page 13: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-13-

Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết

được khi nào stack tràn. Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không

có lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển

bởi CPU.

2.4 CÁC CỔNG Ấ NH CỦ IC1

Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương

tác với thế giới bên ngoài. Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong

các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông

thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự tác

động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài.

Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB,

PORTC, PORTD và PORTE.

*PORT A:

PORTA (RPA) bao gồm 6 I/O pin. Đây là các chân “hai chiều” (bidirectional pin),

nghĩa là có thể xuất và nhập được. Chức năng I/O này được điều khiển bởi thanh ghi

TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PORTA là input,

ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại,

muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều

khiển tương ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương

tự đối với các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là

TRISA, đối với PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là

TRISD vàđối với PORTE là TRISE). Bên cạnh đó PORTA còn là ngõ ra của bộ

ADC, bộ so sánh, ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ

giao tiếp MSSP (Master Synchronous Serial Port).

Các thanh ghi SFR liên quan đến PORTA bao gồm:

- PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA.

- TRISA (địa chỉ 85h) : điều khiển xuất nhập.

- CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh.

- CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp.

- ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC.

Page 14: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-14-

* PORT B:

PORTB (RPB) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là

TRISB. Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp

chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan

đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện trở kéo

lên được điều khiển bởi chương trình.

Các thanh ghi SFR liên quan đến PORTB bao gồm:

- PORTB (địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB

- TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập

- OPTION_REG (địa chỉ 81h,181h) : điều khiển ngắt ngoại vi và bộ Timer0.

* PORT C:

PORTC (RPC) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là

TRISC. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ

Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART.

Các thanh ghi điều khiển liên quan đến PORTC:

- PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC

- TRISC (địa chỉ 87h) : điều khiển xuất nhập.

* PORT D:

PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là

TRISD. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave

Port).

Các thanh ghi liên quan đến PORTD bao gồm:

- Thanh ghi PORTD : chứa giá trị các pin trong PORTD.

- Thanh ghi TRISD : điều khiển xuất nhập.

* PORT E:

PORTE (RPE) gồm 3 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là

TRISE. Các chân của PORTE có ngõ vào analog. Bên cạnh đó PORTE còn là các

chân điều khiển của chuẩn giao tiếp PSP.

Các thanh ghi liên quan đến PORTE bao gồm:

Page 15: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-15-

- PORTE : chứa giá trị các chân trong PORTE.

- TRISE : điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP.

- ADCON1 : thanh ghi điều khiển khối ADC.

2.5 TIMER 0

Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A.

Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit. Cấu trúc của

Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock.

Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn.

Hình 3.5: Sơ đồ khối c a timer 0

Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC

(OPTION_REG<5>), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung

đồng hồ (tần số vào Timer0 bằng ¼ tần số oscillator). Khi giá trị thanh ghi TMR0 từ

FFh trở về 00h, ngắt Timer0 sẽ xuất hiện. Thanh ghi TMR0 cho phép ghi và xóa

được giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động. Muốn

Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>). Khi đó

xung tác động lên bộ đếm được lấy từ chân RA4/TOCK1. Bit TOSE

Page 16: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-16-

(OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào bột đếm. Cạnh tác động

sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1. Khi

thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ được set. Đây chính là cờ

ngắt của Timer0. Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt

đầu thực hiện lại quá trình đếm. Ngắt Timer0 không thể “đánh thức” vi điều khiển từ

chế độ sleep.

Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của

prescaler.

Khi đối tượng tác động là Timer0, tác động lên giá trị thanh ghi TMR0 sẽ xóa

prescaler nhưng không làm thay đổi đối tượng tác động của prescaler. Khi đối tượng

tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngưng tác

vụ hỗ trợ cho WDT.

Các thanh ghi điều khiển liên quan đến Timer0 bao gồm:

- TMR0 (địa chỉ 01h, 101h) : chứa giá trị đếm của Timer0.

- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và

PEIE).

- OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler.

2.6 TIMER 1

Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi

(TMR1H:TMR1L). Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>). Bit điều khiển

của Timer1 sẽ là TMR1IE (PIE<0>). Tương tự như Timer0, Timer1 cũng có hai chế

độ hoạt động: chế độ định thời (timer) với xung kích là xung clock của oscillator (tần

số của timer bằng ¼ tần số của oscillator) và chế độ đếm (counter) với xung kích là

xung phản ánh các sự kiện cần đếm lấy từ bên ngoài thông qua chân

RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên). Việc lựa chọn xung tác động (tương

ứng với việc lựa chọn chế độ hoạt động là timer hay counter) được điều khiển bởi bit

TMR1CS (T1CON<1>). Sau đây là sơ đồ khối của Timer1:

Page 17: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-17-

Hình 3.6: Sơ đồ hối i r

Các thanh ghi liên quan đến Timer1 bao gồm:

- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và

PEIE).

- PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF).

- PIE1( địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE).

- TMR1L (địa chỉ 0Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1.

- TMR1H (địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1.

- T1CON (địa chỉ 10h): xác lập các thông số cho Timer1.

2.7 TIMER 2

Timer2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần số prescaler và

postscaler. Thanh ghi chứa giá trị đếm của Timer2 là TMR2. Bit cho phép ngắt

Timer2 tác động là TMR2ON (T2CON<2>). Cờ ngắt của Timer2 là bit TMR2IF

(PIR1<1>). Xung ngõ vào (tần số bằng ¼ tần số oscillator) được đưa qua bộ chia tần

số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và được điều khiển

bởi các bit T2CKPS1:T2CKPS0 (T2CON<1:0>)).

Page 18: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-18-

Hình 3.7: Sơ đồ khối c a Timer 2

Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 còn đóng

vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP.

Các thanh ghi liên quan đến Timer2 bao gồm:

- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE và

PEIE).

- PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer2 (TMR2IF).

- PIE1 (địa chị 8Ch): chứa bit điều khiển Timer2 (TMR2IE).

- TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2.

- T2CON (địa chỉ 12h): xác lập các thông số cho Timer2.

- PR2 (địa chỉ 92h): thanh ghi hỗ trợ cho Timer2.

Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là

bộ đếm 16 bit (giá trị đếm tối đa là FFFFh). Timer0, Timer1 và Timer2 đều có hai

chế độ hoạt động là timer và counter. Xung clock có tần số bằng ¼ tần số của

oscillator. Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết

lập ở nhiều chế độ khác nhau (tần số tác động, cạnh tác động) trong khi các thông số

của xung tác động lên Timer1 là cố định. Timer2 được hỗ trợ bởi hai bộ chia tần số

prescaler và postcaler độc lập, tuy nhiên cạnh tác động vẫn được cố định là cạnh lên.

Timer1 có quan hệ với khối CCP, trong khi Timer2 được kết nối với khối SSP.

2.8 ADC

ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương

tự và số. PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế

Page 19: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-19-

chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thể chuẩn được xác

lập trên hai chân RA2 và RA3. Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu

số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL.

Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:

- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bit GIE,

PEIE).

- PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF).

- PIE1 (địa chỉ 8Ch): chứa bit điều khiển AD (ADIE).

- ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả

chuyển đổi AD.

- ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): xác lập các thông số cho bộ

chuyển đổi AD.

- PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): liên quan đến các ngõ vào analog

ở PORTA.

- PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): liên quan đến các ngõ vào analog

ở PORTE.

2.9 GI I N I I

USART (Universal Synchronous Asynchronous Receiver Transmitter) là một

trong hai chuẩn giao tiếp nối tiếp.USART còn được gọi là giao diện giao tiếp nối tiếp

SCI (Serial Communication Interface). Có thể sử dụng giao diện này cho các giao

tiếp với các thiết bị ngoại vi, với các vi điều khiển khác hay với máy tính. Các dạng

của giao diện USART ngoại vi bao gồm:

- Bất động bộ (Asynchronous).

- Đồng bộ_ Master mode.

- Đồng bộ_ Slave mode.

PIC16F877A được tích hợp sẵn bộ tạo tốc độ baud BRG (Baud Rate Genetator) 8

bit dùng cho giao diện USART. BRG thực chất là một bộ đếm có thể được sử dụng

cho cả hai dạng đồng bộ và bất đồng bộ và được điều khiển bởi thanh ghi PSBRG. Ở

dạng bất đồng bộ, BRG còn được điều khiển bởi bit BRGH ( TXSTA<2>). Ở dạng

Page 20: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-20-

đồng bộ tác động của bit BRGH được bỏ qua. Tốc độ baud do BRG tạo ra được tính

theo công thức sau:

Trong đó X là giá trị của thanh ghi RSBRG ( X là số nguyên và 0<X<255).

Các thanh ghi liên quan đến BRG bao gồm:

- TXSTA (địa chỉ 98h): chọn chế độ đòng bộ hay bất đồng bộ ( bit SYNC) và

chọn mức

tốc độ baud (bit BRGH).

- RCSTA (địa chỉ 18h): cho phép hoạt động cổng nối tiếp (bit SPEN).

- RSBRG (địa chỉ 99h): quyết định tốc độ baud.

* USART bất đồng bộ: Ở chế độ truyền này USART hoạt động theo chuẩn NRZ

(None-Return-to-Zero), nghĩa là các bit truyền đi sẽ bao gồm 1 bit Start, 8 hay 9 bit

dữ liệu (thông thường là 8 bit) và 1 bit Stop. Bit LSB sẽ được truyền đi trước. Các

khối truyền và nhận data độc lập với nhau sẽ dùng chung tần số tương ứng với tốc độ

baud cho quá trình dịch dữ liệu (tốc độ baud gấp 16 hay 64 lần tốc độ dịch dữ liệu tùy

theo giá trị của bit BRGH), và để đảm bảo tính hiệu quả của dữ liệu thì hai khối

truyền và nhận phải dùng chung một định dạng dữ liệu.

Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diện USART bất

đồng bộ:

- Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép tất cả các ngắt.

- Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF.

- Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE.

- Thanh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin

RC6/TX/CK và RC7/RX/DT).

- Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền.

- Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện.

- Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud.

Page 21: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-21-

* S đồng bộ: Giao diện USART đồng bộ được kích hoạt bằng cách set bit

SYNC. Cổng giao tiếp nối tiếp vẫn là hai chân RC7/RX/DT, RC6/TX/CK và được

cho phép bằng cách set bit SPEN. USART cho phép hai chế độ truyền nhận dữ liệu là

Master mode và Slave mode. Master mode được kích hoạt bằng cách set bit CSRC

(TXSTA<7>), Slave mode được kích hoạt bằng cách clear bit CSRC. Điểm khác biệt

duy nhất giữa hai chế độ này là Master mode sẽ lấy xung clock đồng bộ từ bộ tao

xung baud BRG còn Slave mode lấy xung clock đồng bộ từ bên ngoài qua chân

RC6/TX/CK. Điều này cho phép Slave mode hoạt động ngay cả khi vi điều khiển

đang ở chế độ sleep.

Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diện USART đồng

bộ Master mode:

- Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép tất cả các ngắt.

- Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF.

- Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE.

- Thanh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin

RC6/TX/CK và RC7/RX/DT).

- Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền.

- Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện.

- Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud.

2.10 CỔNG GI I S NG S NG S LL L SL

Ngoài các cổng nối tiếp và các giao điện nối tiếp được trình bày ở phần trên, vi

điều khiển pic16F877A còn được hỗ trợ một cổng giao tiếp song song và chuẩn giao

tiếp song song thông qua portd và porte. do cổng song song chỉ hoạt động ở chế độ

slave mode nên vi điều khiển khi giao tiếp qua giao diện này sẽ chịu sự điều khiển

của thiết bị bên ngoài thông qua các pin của porte, trong khi dữ liệu sẽ được đọc hoặc

ghi theo dạng bất đồng bộ thông qua 8 pin của portd.

Các thanh ghi liên quan đến psp bao gồm:

- Thanh ghi portd (địa chỉ 08h): chứa dữ liệu cần đọc hoặc ghi.

- Thanh ghi porte (địa chỉ 09h): chứa giá trị các pin porte.

- Thanh ghi trise (địa chỉ 89h): chứa các bit điều khiển porte và psp.

Page 22: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-22-

- Thanh ghi pir1 (địa chỉ 0ch): chứa cờ ngắt pspif.

- Thanh ghi pie1 (địa chỉ 8ch): chứa bit cho phép ngắt psp.

- Thanh ghi adcon1 (địa chỉ 9fh): điều khiển khối adc tại porte.

2.11 CÁC ĐẶC ÍNH CỦ SCILL

Pic16F877A có khả năng sử dụng một trong 4 loại oscillator, đó là:

- LP: (low power crystal).

- XT: thạch anh bình thường.

- HS: (high-speed crystal).

- RC: (resistor/capacitor) dao động do mạch rc tạo ra. đối với các loại oscillator lp,

hs, xt, Oscillator được gắn vào vi điều khiển thông qua các pin osc1/clki và

Osc2/Clko. Đối với các ứng dụng không cần các loại oscillator tốc độ cao, ta có thể

sử dụng mạch dao động rc làm nguồn cung cấp xung hoạt động cho vi vi điều khiển.

tần số tạo ra phụ thuộc vào các giá trị điện áp, giá trị điện trở và tụ điện, bên cạnh đó

là sự ảnh hưởng của các yếu tố như nhiệt độ, chất lượng của các linh kiện. Các linh

kiện sử dụng cho mạch rc oscillator phải bảo đảm các giá trị sau:

3 k < rext < 100 k

cext >20 pf

2.12 CÁC CH Đ S

Có nhiều chế độ reset vi điều khiển, bao gồm:

- Power-on Reset POR (Reset khi cấp nguồn hoạt động cho vi điều khiển).

- Reset trong quá trình hoạt động.

- Từ chế độ sleep.

- WDT reset (reset do khối WDT tạo ra trong quá trình hoạt động).

- WDT wake up từ chế độ sleep.

- Brown-out reset (BOR).

- Power-on reset (POR): Đây là xung reset do vi điều khiển tạo ra khi phát hiện

nguồn cung cấp VDD. Khi hoạt động ở chế độ bình thường, vi điều khiển cần được

đảm bảo các thông số về dòng điện, điện áp để hoạt động bình thường. Nhưng nếu

Page 23: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-23-

các tham số này không được đảm bảo, xung reset do POR tạo ra sẽ đưa vi điều khiển

về trạng thái reset và chỉ tiếp tục hoạt động khi nào các tham số trên được đảm bảo.

- Power-up Timer (PWRT): đây là bộ định thời hoạt động dựa vào mạch RC bên

trong

vi điều khiển. Khi PWRT được kích hoạt, vi điều khiển sẽ được đưa về trạng thái

reset.

PWRT sẽ tạo ra một khoảng thời gian delay (khoảng 72 ms) để VDD tăng đến giá trị

thích

hợp.

- Oscillator Start-up Timer (OST): OST cung cấp một khoảng thời gian delay bằng

1024 chu kì xung của oscillator sau khi PWRT ngưng tác động (vi điều khiển đã đủ

điều kiện hoạt động) để đảm bảo sự ổn định của xung do oscillator phát ra. Tác động

của OST còn xảy ra đối với POR reset và khi vi điều khiển được đánh thức từ chế đợ

sleep. OST chỉ tác động đối với các lọai oscillator là XT, HS và LP.

- Brown-out reset (BOR): Nếu VDD hạ xuống thấp hơn giá trị VBOR (khoảng

4V) và kéo dài trong khoảng thời gian lớn hơn TBOR (khoảng 100 us), BOR được

kích hoạt và vi điều khiển được đưa về trạng thái BOR reset. Nếu điện áp cung cấp

cho vi điều khiển hạ xuống thấp hơn VBOR trong khoảng thời gian ngắn hơn TBOR,

vi điều khiển sẽ không được reset. Khi điện áp cung cấp đủ cho vi điều khiển hoạt

động, PWRT được kích hoạt để tạo ra một khoảng thời gian delay (khoảng 72ms).

Nếu trong khoảng thời gian này điện áp cung cấp cho vi điều khiển lại tiếp tục hạ

xuống dưới mức điện áp VBOR, BOR reset sẽ lại được kích hoạt khi vi điều khiển đủ

điện áp hoạt động. Một điểm cần chú ý là khi BOR reset được cho phép, PWRT cũng

sẽ hoạt động bất chấp trạng thái của bit PWRT.

Tóm lại để vi điều khiển hoạt động được từ khi cấp nguồn cần trải qua các bước

sau: - POR tác động.

- PWRT (nếu được cho phép hoạt động) tạo ra khoảng thời gian delay TPWRT để

ổn định nguồn cung cấp.

- OST (nếu được cho phép) tạo ra khoảng thời gian delay bằng 1024 chu kì xung

của oscillator để ổn định tần số của oscillator.

Page 24: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-24-

Đến thời điểm này vi điều khiển mới bắt đầu hoạt động bình thường. Thanh ghi

điều khiển và chỉ thị trạng thái nguồn cung cấp cho vi điều khiển là thanh ghi PCON

Hình 3.8: Sơ đồ hế đ r s t 6 877

2.13 NG

PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi

INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng.

Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp

trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIE và các bit

điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi

INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều khiển

các ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các ngắt nằm trong thanh

ghi PIR1 và PIR2.

Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình

ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE

tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ

nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được

dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit

Page 25: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-25-

GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được

dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi

cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp

theo mà ngắt xảy ra.

Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái

các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần

3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.

Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình

được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và

có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên

được xử lí bằng chương trình để tránh hiện tượng trên xảy ra.

Hình 3.9: Sơ đồ logic c a tất cả các ngắt trong vi điều khiển PIC16F877A.

Page 26: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-26-

II. LED MA TR N

1.Giới thiệu led ma trận

Hình 1.7: Hình dạng thực tế của led ma trận.

Led ma trận bao gồm các led phát quang được bố trí thành hàng và cột trong một

vỏ. Các tín hiệu điều khiển cột được nối với Anode của tất cả các led trên cùng

một cột. Các tín hiệu điều khiển hàng cũng được nối với Cathode của tất cả các

led trên cùng một hàng như hình vẽ sau:

single color type

Page 27: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-27-

Dual color type

Hình 1.8: Kết cấu bên trong của led ma trận

Khi có một tín hiệu điều khiển ở cột và hàng, các chân Anode của các led

trên cột tương ứng được cấp điện áp cao, đồng thời các chân Cathode của các led

trên hàng tương ứng được cấp điện áp thấp. Tuy nhiên, lúc đó chỉ có một led

sáng, vì nó có đồng thời điện thế cao trên Anode và điện thế thấp trên Cathode.

Như vậy, khi có một tín hiệu điều khiển hàng và cột thì tại một thời điểm chỉ có

duy nhất một led tại chỗ gặp nhau của hàng và cột là sáng. Các bảng quang báo

với số lượng led lớn hơn cũng được kết nối theo cấu trúc như vậy.

Trong trường hợp ta muốn cho sáng đồng thời một số led rời rạc trên ma

trận để hiển thị một kí tự nào đó, nếu trong hiển thị tĩnh ta phải cấp áp cao cho

Anode và áp thấp cho Cathode cho các led tương ứng mà ta muốn sáng. Nhưng

trong khi đó một số led ta không mong muốn cũng sẽ sáng, miễn là nó nằm tại vị

trí gặp nhau của các cột và hàng mà ta cấp nguồn. Vì vậy trong điều khiển led

ma trận ta không thể sử dụng phương pháp hiển thị tĩnh mà phải sử dụng phương

pháp quét (hiển thị động), có nghĩa là ta phải tiến hành cấp tín hiệu điều khiển

theo dạng xung quét trên các hàng và cột có led cần hiển thị. Để đảm bảo cho

mắt nhìn thấy các led không bị nháy, thì tần số quét nhỏ nhất cho mỗi chu kì là

khoảng 20Hz(50ms). Trong lập trình điều khiển led ma trận bằng vi xử lý ta

cũng phải sử dụng phương pháp quét như vậy.

Ma trận led có thể là loại hiển thị được một màu hoặc hiển thị được 2 màu

trên một điểm, khi đó led có số chân ra tương ứng: đối với ma trận led 8x8 hiển

thị một màu thì số chân ra là 16, trong đó 8 chân dùng để điều khiển hàng và 8

chân còn lại dùng để điều khiển cột. Đối với loại 8x8 có 2 màu thì số chân ra của

led là 24 chân, trong đó có 8 chân dùng để điều khiển cột (hoặc hàng) chung cho

cả 2 màu, 16 chân còn lại thì 8 chân dùng để điều khiển hàng (hoặc cột) màu thứ

nhất, 8 chân còn lại điều khiển màu thứ 2.

2 .CÁC HƢƠNG HÁ HIỂN THỊ CHO BẢNG QUANG BÁO

2.1 HƢƠNG HÁ CH T

Page 28: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-28-

Hiển thị led ma trận bằng phương pháp chốt giúp cho người lập trình thay đổi cách

thức quét và hiển thị một cách linh hoạt và nhanh chóng.

matrix_3mau

12

9 6 3 13

16

19

22

11

85214

17

20

23

10

74115

18

21

24

c1

c2

c3

c4

c5

c6

c7

c8

hx

1hx

2hx

3hx

4hx

5hx

6hx

7hx

8

hd

1h

d2

hd

3h

d4

hd

5h

d6

hd

7h

d8

DM74LS573

2 3 4 5 6 7 8 9 11

1

19

18

17

16

15

14

13

12

D0

D1

D2

D3

D4

D5

D6

D7

LE

OE

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

DM74LS573

23456789

111

1918171615141312

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

U7

DM74LS573

2345678911

1

19

18

17

16

15

14

13

12

D0

D1

D2

D3

D4

D5

D6

D7

LE

OE

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

Hình 4.1: Giao tiếp led ma trận dùng phương pháp chốt.

A. CH T HÀNG

Chốt hàng là phương pháp trong một khoảng thời gian xác định chỉ có một cột

được tích cực, dữ liệu được đưa ra 8 hàng rồi chốt lại, dữ liệu được hiển thị trên màn

hình led ma trận.

Sau đó dữ liệu kế tiếp được đưa ra 8 hàng và được chốt lại bởi một IC chốt khác, trong

khi đó dữ liệu trước đó vẫn hiện diện tại ngõ ra của IC chốt. Như vậy dữ liệu của hàng

nào được đưa ra đúng địa chỉ của hàng đó trong khi các dữ liệu của các hàng khác vẫn

hiện diện trên hàng mà không bị mất đi. Việc thực hiện chốt hàng được thể hiện ở lưu

đồ như sau:

Page 29: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-29-

Hình 4.2: Qui trình hiển thị chốt hàng.

B. CH T C T

Chốt cột là phương pháp trong một khoảng thời gian xác định chỉ có một hàng

được tích cực, dữ liệu được đưa ra 8 cột rồi chốt lại, dữ liệu được hiển thị trên màn

hình led ma trận. Sau đó dữ liệu được đưa ra 8 cột kế tiếp và được chốt lại bởi một IC

chốt khác, trong khi đó dữ liệu trước đó vẫn hiện diện tại ngõ ra của IC chốt (dữ liệu

vẫn hiện diện tại các cột). Như vậy dữ liệu của cột nào được đưa ra đúng địa chỉ của

cột đó trong khi các dữ liệu của các cột khác vẫn hiện diện trên cột mà không bị mất

đi. Việc thực hiện chốt cột được thể hiện ở lưu đồ như sau:

Page 30: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-30-

Hình 4.3: Qui trình hiển thị chốt c t.

C Ƣ NHƢỢC ĐIỂ CỦ HƢƠNG HÁ NG IC CH

* Ƣu điểm:

- Mở rộng số hàng, số cột của bảng quang báo.

- Dữ liệu được truyền đi nhanh.

- Chuyển đổi cách quét hàng, cột một cách linh hoạt.

* Nhƣợc điểm:

- Tạo bảng mã khó khăn.

- Khó khăn trong việc lập trình xuất dữ liệu ra.

2.2 HƢƠNG HÁ HIỂN THỊ SỬ DỤNG THANH GHI DỊCH

A. QUÉT C T

- Giới thiệu chung về phƣơng pháp quét cột.

Phương pháp quét cột là phương pháp mà trong một khoảng thời gian xác định chỉ

cho một cột được tích cực hiển thị trong khi các cột khác đều tắt, các cột được quét

(tích cực) tuần tự ở các khoảng thời gian kế tiếp nhau được lặp lại nhiều lần với tốc độ

> 24 hình/1s sẽ cho ta một hình ảnh liên tục cần hiển thị lên trên màn hình led ma trận.

- Quá trình thực hiện quét cột.

Page 31: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-31-

Dữ liệu của cột thứ nhất được đưa ra hàng sau đó tích cực cột thứ nhất như vậy dữ

liệu của cột thứ nhất được hiển thị trên màn hình led ma trận, tiếp tục dữ liệu của cột

thứ hai được đưa ra hàng sau đó tích cực cột thứ hai lúc này dữ liệu của hàng thứ hai

được hiển thị trên man hình led ma trận, cứ như vậy cho đến dữ liệu của cột cuối cùng

được đưa ra hàng sau đó tích cực cột cuối cùng. Cứ như thế quá trình trên được lặp đi

lặp lại > 24lần/1s, đến đây chúng ta quan sát được một hình ảnh liên tục hiển thị trên

màn hình led ma trận.

Ví dụ

Hiển thị chữ A lên màn hình Led ma trận (hàng được tích cực ở mức 1, cột được

tích cực ở mức 0).

Hình 4.4: Hiển thị ch A trên led ma trận ùng phương ph p quét t

Quá trình đưa dữ liệu ra hàng và cột được tiến hành đồng thời với các giá trị theo

bảng dưới đây:

Dữ liệu đưa vào các hàng

H8H7H6H5H4H3H2H1

Cột được chọn

tích cực

(mức 0)

Dữ liệu thứ

nhất

11111000 C1

Dữ liệu thứ 2 00100100 C2

Dữ liệu thứ 3 00100010 C3

Page 32: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-32-

Dữ liệu thứ 4 00100100 C4

Dữ liệu thứ 5 11111000 C5

Dữ liệu thứ 6 00000000 C6

Dữ liệu thứ 7 00000000 C7

Dữ liệu thứ 8 00000000 C8

ảng 4.

Như vậy toàn bộ dữ liệu của chữ A đã được đưa ra hiển thị trên màn hình Led ma

trận. Quá trình trên được diễn ra rất nhanh > 24lần/s nên chúng ta có cảm giác nó diễn

ra một cách đồng thời, nhờ đó chúng ta quan sát được trên màn hình Led ma trậnlà

một chữ A liên tục.

Phương pháp quét cột thích hợp cho các bảng quang báo sử dụng Led ma trậncó số

lượng cột ít hơn số lượng hàng, vì thời gian sáng của LED khi quét cột lớn hơn thời

gian sáng của LED khi quét hàng. Như vậy điện áp nguồn cung cấp được sử dụng

trong quét cột nhỏ hơn điện áp nguồn cung cấp sử dụng trong quét hàng. Trong

phương pháp quét cột việc đưa dữ liệu ra hàng và tạo bảng mã là khá dễ dàng cho

người lập trình.

B. QUÉT HÀNG

- Giới thiệu chung về phƣơng pháp quét hàng

Quét hàng là phương pháp mà trong một khoảng thời gian xác định chỉ cho một

hàng được tích cực hiển thị trong khi các hàng khác đều tắt, các hàng được quét (tích

cực) tuần tự ở các khoảng thời gian kế tiếp nhau được lặp lại nhiều lần với tốc độ >

24hình /1s sẽ cho ta một hình ảnh liên tục cần hiển thị lên trên màn hình led ma trận. -

- Quá trình thực hiện quét hàng:

Page 33: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-33-

Hình 4.5: Qui trình đư li u ra 8 c t cho led ma trận.

Quét hàng sử dụng thanh ghi dịch là tương đối phức tạp cho người lập trình trong

việc đưa dữ liệu ra cột. Dữ liệu lần lượt được đưa vào chân Datain của thanh ghi dịch

sau đó tác động xung clock dữ liệu đươc dịch đi. Việc thực hiện quét hàng được thực

hiện theo lưu đồ giải thuật ở hình 4.5.

Dữ liệu của hàng thứ nhất được đưa ra cột sau đó tích cực hàng thứ nhất, như vậy

dữ liệu của hàng thứ nhất được hiển thị trên màn hình led ma trận, tiếp tục dữ liệu của

hàng thứ hai được đưa ra cột sau đó tích cực hàng thứ hai lúc này dữ liệu của hàng thứ

hai được hiển thị trên màn hình led ma trận, cứ như vậy cho đến dữ liệu của hàng cuối

cùng được đưa ra cột sau đó tích cực hàng cuối cùng. Cứ như thế quá trình trên được

lặp đi lặp lại > 24lần/1s, đến đây chúng ta quan sát được một hình ảnh liên tục hiển thị

trên màn hình led ma trận.

Ví dụ

Hiển thị chữ A lên màn hình Led ma trận (hàng được tích cực ở mức 1, cột được tích

cực ở mức 0).

Page 34: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-34-

Hình 4.6: Hiển thị ch A trên led ma trận ùng phương ph p quét hàng

Quá trình đưa dữ liệu ra hàng và cột được tiến hành đồng thời với các giá trị theo

bảng dưới đây:

ảng 4.2

Như vậy toàn bộ dữ liệu của chữ A đã được đưa ra hiển thị trên màn hình Led ma

trận. Quá trình trên được diễn ra rất nhanh > 24lần/s nên chúng ta có cảm giác nó diễn

Dữ liệu đưa vào các cột

C8C7C6C5C4C3C2C1

Hàng được chọn tích

cực

(mức 1)

Dữ liệu thứ nhất 11111111 H1

Dữ liệu thứ 2 11111011 H2

Dữ liệu thứ 3 11110101 H3

Dữ liệu thứ 4 11101110 H4

Dữ liệu thứ 5 11101110 H5

Dữ liệu thứ 6 11100000 H6

Dữ liệu thứ 7 11101110 H7

Dữ liệu thứ 8 11101110 H8

Page 35: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-35-

ra một cách đồng thời, nhờ đó mà chúng ta quan sát được trên màn hình Led ma trận

là một chữ A liên tục.

Phương pháp quét hàng thích hợp cho các bảng quang báo sử dụng Led ma trận có

số lượng hàng nhỏ hơn số lượng cột, vì thời gian sáng của Led khi quét hàng lâu hơn

thời gian sáng của Led khi quét cột. Như vậy điện áp nguồn cung cấp được sử dụng

trong quét hàng nhỏ hơn điện áp nguồn cung cấp sử dụng trong quét cột. Tuy nhiên

trong phương pháp quét hàng thì việc đưa dữ liệu ra cột và tạo bảng mã là khó khăn

hơn trong phương pháp quét cột.

C. Ƣ NHƢỢC ĐIỂ CỦ HƢƠNG HÁ HIỂN HỊ SỬ ỤNG H NH

GHI ỊCH

* Ƣu điểm:

- Tiết kiệm đường truyền, hiệu quả kinh tế.

- Tiết kiệm chân PORT.

- Truyền dữ liệu đi xa hơn.

- Mở rộng bảng ma trận lên một cách dễ dàng.

- Lập trình dễ dàng trong phương pháp quét cột.

* Nhƣợc điểm:

- Tốn thời gian để thực hiện việc truyền dữ liệu đến các cột.

- Chuyển đổi không linh hoạt bằng sử dụng phương pháp chốt.

- Lập trình khó khăn hơn khi sử dụng phương pháp quét hàng.

2.3 M CH QUANG BÁO SỬ DỤNG NG ĐỒ ÁN

Do mạch quang báo trong đồ án được thiết kế với độ phân giải 8x48 (8 hàng, 48

cột) nên chọn phương pháp quét hàng để đảm bảo cho hình ảnh hiển thị được liên tục

và sắc nét.

Page 36: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-36-

III .IC GHI DỊCH 6B595

IC 6B595 là loại IC tích hợp gồm nhiều thanh ghi dịch được mắc nối tiếp, dữ

liệu được đưa vào nối tiếp và được lấy ra song song qua hai tầng xung CK,chốt dữ liệu

8 bit, biến đổi dữ liệu dạng nối tiếp thành dạng dữ liệu song song.

IC 6B595 có dòng ra lớn có thể đạt được 500mA.

Dòng điện tiêu thụ 80uA, dòng điện ngõ vào 1uA.

Dải áp hoạt động từ 2-6v

Tần số quét 30Mhz

1. Sơ đồ chân

Hình sơ đồ chân 6B595

- Chân 1: NC

- Chân 2: nguồn

- Chân 3: ngõ vào dữ liệu

- Chân 4: ngõ ra 0

- Chân 5: ngõ ra 1

- Chân 6: ngõ ra 2

- Chân 7: ngõ ra 3

- Chân 8: xóa dữ liệu

Page 37: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-37-

- Chân 9: ngõ vào cho phép

- Chân 10: nối mass

- Chân 11: nối mass

- Chân 12: chốt dữ liệu ra

- Chân 13: ngõ vào xung clock

- Chân 14: ngõ ra 4

- Chân 15: ngõ ra 5

- Chân 16: ngõ ra 6

- Chân 17: ngõ ra 7

- Chân 18: ngõ ra dữ liệu

- Chân 19: nối mass

- Chân 20: NC

2. Nguyên tắc hoạt động của 6B595

Đầu tiên đưa bit cần dịch vào chân số 3 là ngõ vào nối tiếp.

Tiếp theo cho dịch bit đó bằng cách đưa xung từ thấp lên cao ở chân số 4 là chân

xung dịch.

Khi dịch đủ 8 bit thì chốt dữ liệu đó lại bằng xung từ thấp lên cao tại chân số 12

là chân chốt dữ liệu.

Nếu tiếp tục cho dịch dữ liệu thì bit vào trước sẽ bị tràn sang chân số 18.

Page 38: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-38-

3. Hoạt động của IC 6B595 thông qua dạng sóng.

Page 39: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-39-

4. Các thông số của IC6B595:

Điện áp cung cấp 4.5 – 5.5 V

Điện áp tối đa cho một ngõ ra (DRAIN) khi sử dụng điện trở treo 50 V

Dòng điện ra tối đa chỉ cho 1 ngõ ra 500 mA

Dòng điện xung có thể cung câp 1A

Dòng điện ra tối đa cho tất các ngõ ra 150 mA

Thời gian đáp ứng của các xung ck với ngõ vào 20ns

Thời gian đáp ứng của G\ 150ns

Điện áp ngõ ra của SER – OUT 4 – 4.2 V

Giới hạn nhiệt độ của IC -40 – 1250 C

IV. Khảo sát transistor A1015:

Transistor A1015 là loại transistor PNP có dòng điện bão hòa cao.

1. Sơ đồ chân:

2. Trạng thái hoạt động :

Page 40: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-40-

3. Thông số của Transistor

A1015

V. Khảo sát IC ULN2803

Trong đó :

Chân 9,10 là các chân cấp nguồn.

Chân 1, 2, 3, 4, 5, 6, 7, 8 là các ngõ ra.

Chân 11, 12, 13, 14, 15, 16, 17, 18 là các ngõ ra đảo.

2. Thông số của IC ULN2803.

Ta có thể tăng điện áp ngõ ra bằng cách thêm các điện trở treo ở ngõ ra với điện áp

kéo lên cao

Page 41: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-41-

VI. GI I S-232

1.GIỚI HIỆ SƠ LƢỢC

Chuẩn RS-232 lần đầu tiên được giới thiệu vào năm 1962 do hiệp hội kỹ thuật điện

tử EIA (Electronics Industries Association – Hiệp hội công nghiệp điện tử) như là

chuẩn giao tiếp truyền thông giữa máy tính và một thiết bị ngoại vi (Modem, máy vẽ,

mouse, máy tính khác, PLC…). RS-232A (năm 1963), RS-232B (năm 1965), RS-

232C (năm 1969) là các chuẩn RS-232 có sửa đổi.

Cổng giao tiếp RS-232 là giao diện phổ biến rộng rãi nhất, giống như cổng máy in,

cổng nối tiếp được sử dụng rổng rãi cho mục đích đo lường và điều khiển.

2 .ĐẶC ĐIỂ CỦ CH ẨN S-232

Việc truyền dữ liệu RS-232 được tiến hành theo cách nối tiếp, nghĩa là các bit dữ

liệu được gởi đi nối tiếp nhau trên một đường truyền dẫn.

Đầu nối Chức năng Tên Hướng

DB-25 DB-9 BERG

1 B2 Đất GND

2 3 A4 ru ền dữ iệu TXD uất

3 2 A8 Nhận dữ iệu RXD Nhập

4 7 A3 u cầu g i RTS uất

5 8 A7 á việc g i CTS Nhập

6 6 A6 ữ iệu s n sàng DSR Nhập

7 5 B1 Nối đất v á GND

Page 42: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-42-

8 1 A5 s ng ang DCD

20 4 A2 er ina s n sàng DTR uất

22 9 ộ ch th v ng RI Nhập

ỀN LIỆ CH ẨN S-232

Mức tín hiệu chân ra RXD tùy thuộc vào đường dẫn TXD và thông thường nằm

trong khoảng –12V đến +12V.Các bit dữ liệu được gởi đảo ngược lại. Mức điện áp

đối với mức cao nằm giữa –12V đến –3V và mức thấp nằm giữa +3V đến +12V.

4. GIỚI HIỆ I CH GI I

Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện

nối tiếp với máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức

+10V hoặc –10V ở phía truyền và các mức +3…+15V hoặc -15…-3V thành mức TTL

ở phía nhận.

Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào

CTS, điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9

của vi mạch MAX 232. Còn chân RST (chân 10 của vi mạch MAX) nối với đường

dẫn bắt tay để điều khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối

với cổng nối tiếp qua các cầu nối, để khi không dùng đến nữa có thể hở mạch các cầu

này. Cách truyền dữ liệu đơn giản nhất là chỉ dùng ba đường dẫn TxD, RxD và GND

(mass).

Page 43: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-43-

Sơ đồ t nối:

C5

10uF

1

4

6

7

8

9

COM on PC

5

3

2

C4

10uF

C2

10uF

PIC16F877A

1

10

14

31

32

12

8

15 3334353637383940

11

13

23456

9

16171823242526

1920212227282930

7MCLR

RE2/CS/AN7

OSC2/CLKOUT

VS

S

VD

DV

SS

RE0/RD/AN5

RC0/T1OSO/T1CKI RB0/INTRB1RB2

RB3/PGMRB4RB5

RB6/PGCRB7/PGD

VD

D

OSC1/CLKIN

RA0/AN0RA1/AN1

RA2/AN2/VREF-/CVREFRA3/AN3/VREF+

RA4/T0CKI/C1OUT

RE1/WR/AN6

RC1/T1OSI/CCP2RC2/CCP1RC3/SCK/SCLRC4/SDI/SDARC5/SDORC6/TX/CKRC7/RX/DT

RD0/PSP0RD1/PSP1RD2/PSP2RD3/PSP3RD4/PSP4RD5/PSP5RD6/PSP6RD7/PSP7

RA5/AN4/C2OUT

MAX232

1

3

4

5

16

15

2

6

12

9

11

10

13

8

14

7

C1+

C1-

C2+

C2-

VCC

GND

V+

V-

R1OUT

R2OUT

T1IN

T2IN

R1IN

R2IN

T1OUT

T2OUT

VCC

C1

10uF

C3

10uF

Nếu giao tiếp theo cách này thì khoảng cách từ máy tính đến thiết bị ngoại

vi có thể đạt khoảng 15m.

Ưu điểm là có khả năng thiết lập tốc độ baud. Khi dữ liệu từ máy tính được

gửi đến VĐK qua cổng COM thì dữ liệu này sẽ được đưa vào từng bit vào thanh ghi

SBUF (thanh ghi đệm), đến khi thanh ghi đệm đầy thì cờ RI trong thanh ghi điều

khiển sẽ tự động SET lên 1 và lúc này CPU sẽ gọi chương trình con phục vụ ngắt và

dữ liệu sẽ được đưa vào để xử lý.

Nhưng phương pháp này cũng có nhược điểm là khả năng liên kết trong hệ

thống ngắn, để khắc phục nhược điểm này người ta thường dùng tín hiệu quang (sử

dụng RS485) để truyền, phương pháp này có thể truyền được 2000m.

Điện áp ra của max232 trong (-10v, +10v), còn ở cổng PC thì điện áp ra

trong khoảng (+3v, +15v). Nếu tín hiệu truyền từ cổng com tới PC thì máy tính

nhận được 1 cách thuận lợi, còn trong trường hợp ngược lại thì sẽ có những lúc

bị gián đoạn đường truyền, để khắc phục trường hợp này ta mắc thêm các điện

trở kéo lên.

Page 44: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-44-

CHƢƠNG II: GIỚI HIỆ NG N NG L NH

1. Tổng quan về C HI-TECH

1.1 Vì sao ta s dung C HI-TECH ?

Sự ra đời của một loại vi điều khiển đi kèm với việc phát triển phần mềm ứng

dụng cho việc lập trình cho con vi điều khiển đó. Vi điều khiển chỉ hiểu và làm việc

với hai con số 0 và 1. Ban đầu để việc lập trình cho VĐK là làm việc với dãy các con

số 0 và 1. Sau này khi kiến trúc của Vi điều khiển ngày càng phức tạp, số luợng thanh

ghi lệnh nhiều lên, việc lập trình với dãy các số 0 và 1 không còn phù hợp nữa, đòi

hỏi ra đời một ngôn ngữ mới thay thế. Và ngôn ngữ lập trình Assembly. Ở đây ta

không nói nhiều đến Assmebly. Sau này khi ngôn ngữ C ra đời, nhu cầu dùng ngôn

ngữ C đề thay cho ASM trong việc mô tả các lệnh lập trình cho Vi điều khiển một

cách ngắn gọn và dễ hiểu hơn đã dẫn đến sự ra đời của nhiều chương trình soạn

thảo và biên dịch C cho Vi điều khiển : Keil C, HT‐PIC, MikroC, CCS… Tôi chọn

C HI-TECH cho bài giới thiệu này vì C HI-TECH là một công cụ lập trình C mạnh

cho Vi điều khiển PIC. Những ưu và nhược điểm của C HI-TECH sẽ được đề cập

đến trong các phần dưới đây.

1.2. Giới thiệu về C HI-TECH ?

C HI-TECH là trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC của

hãng Microchip. Chương trình là sự tích hợp của 3 trình biên dich riêng biết cho 3

dòng PIC khác nhau đó là:

‐ PCB cho dòng PIC 12‐bit opcodes

‐ PCM cho dòng PIC 14‐bit opcodes

‐ PCH cho dòng PIC 16 và 18‐bit

Tất cả 3 trình biên dich này đuợc tích hợp lại vào trong một chương trình bao gồm cả

trình soạn thảo và biên dịch là C HI-TECH, phiên bản mới nhất là PCWH Compiler

Ver 3.227 Giống như nhiều trình biên dich C khác cho PIC, C HI-TECH giúp cho

người sử dụng nắm bắt nhanh được vi điều khiển PIC và sử dụng PIC trong các

Page 45: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-45-

dự án. Các chương trình điều khiển sẽ được thực hiện nhanh chóng và đạt hiệu quả

cao thông qua việc sử dụng ngônngữ lạp trình cấp cao – Ngôn ngữ C

Tài liệu hướng dẫn sử dụng có rất nhiều, nhưng chi tiết nhất chính là bản Help đi

kèm theo phần mềm (tài liệu Tiếng Anh). Trong bản trợ giúp nhà sản xuất đã mô tả rất

nhiều vềhằng, biến, chỉ thị tiền xủa lý, cấu trúc các câu lệnh trong chương trình, các

hàm tạo sẵn cho người sử dụng… Ngoài ra về Tiếng Việt cũng có bản dịch của tác

giả Trần Xuân rƣờng, SV K2001 DH BK HCM. Tài liệu này dịch trên cơ sở bản

Help của C HI-TECH, tuy rằng chưa đầy đủ nhưng đây là một tài liệu hay, nếu bạn

tìm hiểu về PIC và C HI-TECH thì nên tìm tài liệu này về đọc. Địa chỉ Download tài

liệu: www.picvietnam.com ‐> Mục nói về C HI-TECH.

2.Mô tả nội dung chƣơng trình.

‐ #include 16f877a.h : Đi kèm chương trình dịch, chứa khai báo về các

thanh ghi trong mỗi con PIC, dùng cho việc cấu hình cho PIC.

‐ #include def_877a.h: Files do người lập trình tạo ra, chứa khai báo về

các thanh ghi

trong PIC giúp cho viêc lập trình được dễ dang hơn ví dụ ta co thể gán

PORTB =

‐ __CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT &

BORDIS & LVPDIS): Khai báo về cấu hình cho PIC

‐ #define_XTAL_FREQ 4000000 Tần số thạch anh sử dụng

‐ #inc ude “uart h”: Khai báo cho giao tiếp nối tiếp RS232

‐ Void tên_chƣơng_trình t n_bi n) {}: Chương trình chính hay chương

trình con

Chƣơng trình ẫu cho PIC16F877A

//=================================================

// Ten chuong trinh : Mach test den LED_1

// Phien ban : 1.0

// Mo ta phan cung : Dung PIC16F877A ‐ thach anh 20MHz

Page 46: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-46-

// : LED giao tiep voi PORTB

// : Cuc am cua LED noi voi GND

// : RB0 ‐ RB7 la cac chan output

//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

#include <16f877a.h>

#include “uart h”

_config(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS &

LVPDIS)

#define_XTAL_FREQ 4000000

xxx_isr() {

// Code here

}

void Ten_chuong_trinh_con(Ten_Bien) {

// Code here

}

void main() {

// Enter code here!

}

CHƢƠNG III: HI T K HỆ TH NG

I HI HẦN CỨNG:

1 ạch du e IC

- 1 1 Linh iện s dụng:

- 4 tụ không phân cực 104p.

- 2 tụ không phân cực 22p.

- 1 tụ điện phân cực 1000uF

- 1 tụ điện phân cực470uF

- 1 thạch anh 4 Mhz.

- 1 PIC 16f877a.

- 1 nút nhấn.

Page 47: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-47-

- 1 điện trở 221/1W

- 1 điện trở 221

- 1 điện trở 101

- 1 điện trở 103

- 1 led đơn (báo nguồn).

- 1 cầu diod

1 Sơ đồ ngu n ý:

Hình 3.1: Sơ đồ nguyên lý mạch module PIC

ạch rs

1 Linh iện s dụng:

- 1 cổng com.

- 1 IC Max232.

- 5 tụ phân cực 10u.

- 1 tụ không phân cực 104p.

Page 48: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-48-

- 1 led đơn (báo nguồn).

- 1 điện trở 1k

Sơ đồ ngu n í ạch rs

Sơ đồ nguyên lí mạch RS 232

ạch ed a trận:

1 Linh iện s dụng:

- 6 IC 6B595.

- 1 led đơn (báo nguồn).

- 6 led matrix

- 1 điện trở 1k.

Page 49: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-49-

Sơ đồ ngu n ý:

Hình 3.2: Sơ đồ nguyên lý mạch led ma trận.

0

CR

26

VC

C

RD

4

CR

11

C4104

CR

29

RD1RD0

CR

5

CR

42

RD7

CR

14

C5104

CR

42

RD3

CR

27

0 CR

35

RD

3

R16

10

CR

12

CR

2

RD2

RD0

VC

C

CR

43

RD6

J5

POWER

12345678

CR

39

RD4

CR

28

0CR

43

RD

2

CR

13

CR

28

RD1

CR

24

CR

44

RD5

VC

C

RD5

CR

29

RD3

R7

330

CR

34

RD

1

0

CR

45

RD2

Q7

A1015

CR

41

CR

45

RD4

CR

8

R6

330

RD6

CR

30

RD5

CR

4

RD

0

0

Q5

A1015

CR

7

RD3

R3

330

CR

21

CR

2

CR

46

RD3

R15

10

RD7

CR

31

RD4

Q6

A1015

CR

38

VCC

CR

16

0

CR

3

RD4

R13

10

+12V

CR

1

CR

47

RD2

RD0

CR

32

RD6

CR

33

VCC

U15 6B595

3 4 5 6 7 14

11

13

1 20

10

12

8 9

15

16

17

18

2 19

SE

R IN

OU

T0

OU

T1

OU

T2

OU

T3

OU

T4

GN

D

CLK

NC

NC

GN

D

ST

RO

BE

CLR

OE

OU

T5

OU

T6

OU

T7

SE

R O

UT

VD

DG

ND

U18 6B595

3 4 5 6 7 14

11

13

1 20

10

12

8 9

15

16

17

18

2 19

SE

R IN

OU

T0

OU

T1

OU

T2

OU

T3

OU

T4

GN

D

CLK

NC

NC

GN

D

ST

RO

BE

CLR

OE

OU

T5

OU

T6

OU

T7

SE

R O

UT

VD

DG

ND

CR

17

0

CR

17

RD5

CR

19

CR

0

Q1

A1015

RD0RD1

VC

C

DATA

CR

33

RD7

CR

32

+12V

CR

19

NC

CR

6

RD6

R1

330

0

CR

27

CR

3

RD1RD0

Q2

A1015

CR

46

CLOCK

CR

34

RD7

CR

1

+12V

R8

330

CR

18

+5V

CR

23

RD7

0

CR

36

CR

4

RD2

RD7

R9

10

CR

37

STROBE

CR

35

RD6

U5

MATRIXLED 8x8

242322214321

6 7 8 9 10

11

12

520

19

18

17

16

15

14

13

R0R1R2R3R4R5R6R7

C1G

C2G

C3G

C4G

C5G

C6G

C7G

C0G

C0R

C1R

C2R

C3R

C4R

C5R

C6R

C7R

CR

47

VCC

Q3

A1015

CR

20

R4

330

C6104

-12V

CR

31

VCC

CR

0

CR

5

0

RD3

RD5

CR

15

C1104

CR

18

CLEAR

0

CR

36

RD5

CR

22

GND

R12

10

J6

RED CTRL IN

12345

0

CR

21

R14

10

NC

CR

9

VCC

CR

6

R10

10 0

RD4

RD6

CR

16

Q4

A1015

J1

ROW

87654321

OE

0

CR

37

RD4

CR

44

VCC

0

CR

22

U13

ULN2803

109

12345678

1817161514131211

COMGND

IN1IN2IN3IN4IN5IN6IN7IN8

OUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8

+12V

CR

26

VCC

CR

7

RD5RD4

U20 6B595

3 4 5 6 7 14

11

13

1 20

10

12

8 9

15

16

17

18

2 19

SE

R IN

OU

T0

OU

T1

OU

T2

OU

T3

OU

T4

GN

D

CLK

NC

NC

GN

D

ST

RO

BE

CLR

OE

OU

T5

OU

T6

OU

T7

SE

R O

UT

VD

DG

ND

VC

C

Q8

A1015

NC

CR

38

RD3

0

CR

20

+12V

U2

MATRIXLED 8x8

242322214321

6 7 8 9 10

11

12

520

19

18

17

16

15

14

13

R0R1R2R3R4R5R6R7

C1G

C2G

C3G

C4G

C5G

C6G

C7G

C0G

C0R

C1R

C2R

C3R

C4R

C5R

C6R

C7R

CR

23

R5

330

NC

0

CR

25

RD

7

R11

10

CR

8

RD6

RD3

CR

15

R2

330

U16 6B595

3 4 5 6 7 14

11

13

1 20

10

12

8 9

15

16

17

18

2 19

SE

R IN

OU

T0

OU

T1

OU

T2

OU

T3

OU

T4

GN

D

CLK

NC

NC

GN

D

ST

RO

BE

CLR

OE

OU

T5

OU

T6

OU

T7

SE

R O

UT

VD

DG

ND

CR

40

RD2

0CR

30

GND

U17 6B595

3 4 5 6 7 14

11

13

1 20

10

12

8 9

15

16

17

18

2 19

SE

R IN

OU

T0

OU

T1

OU

T2

OU

T3

OU

T4

GN

D

CLK

NC

NC

GN

D

ST

RO

BE

CLR

OE

OU

T5

OU

T6

OU

T7

SE

R O

UT

VD

DG

ND

CR

25

U3

MATRIXLED 8x8

242322214321

6 7 8 9 10

11

12

520

19

18

17

16

15

14

13

R0R1R2R3R4R5R6R7

C1G

C2G

C3G

C4G

C5G

C6G

C7G

C0G

C0R

C1R

C2R

C3R

C4R

C5R

C6R

C7R

-5V

0C

R14

RD

5

U1MATRIXLED 8x8

242322214321

6 7 8 9 10

11

12

520

19

18

17

16

15

14

13

R0R1R2R3R4R5R6R7

C1G

C2G

C3G

C4G

C5G

C6G

C7G

C0G

C0R

C1R

C2R

C3R

C4R

C5R

C6R

C7R

CR

9

C2104

RD7

RD2

U19 6B595

3 4 5 6 7 14

11

13

1 20

10

12

8 9

15

16

17

18

2 19

SE

R IN

OU

T0

OU

T1

OU

T2

OU

T3

OU

T4

GN

D

CLK

NC

NC

GN

D

ST

RO

BE

CLR

OE

OU

T5

OU

T6

OU

T7

SE

R O

UT

VD

DG

ND

CR

11

CR

39

RD1

C3104

CR

40

RD1

0

CR

24

CR

10

RD

6

U6

MATRIXLED 8x8

242322214321

6 7 8 9 10

11

12

520

19

18

17

16

15

14

13

R0R1R2R3R4R5R6R7

C1G

C2G

C3G

C4G

C5G

C6G

C7G

C0G

C0R

C1R

C2R

C3R

C4R

C5R

C6R

C7R

0

CR

10

CR

12

RD0RD1

VC

C

C0104

CR

41

RD0

U4

MATRIXLED 8x8

242322214321

6 7 8 9 10

11

12

520

19

18

17

16

15

14

13

R0R1R2R3R4R5R6R7

C1G

C2G

C3G

C4G

C5G

C6G

C7G

C0G

C0R

C1R

C2R

C3R

C4R

C5R

C6R

C7R

CR

13

RD2

Page 50: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-50-

II. HI HẦN Ề

1.Lưu đồ giải thuật C HI-TECH

Chương trình chính:

S

Đ

BẮT ĐẦU

Khai báo các tiền xử lí,các biến,kiểu dữ liệu

Thiết lập ban đầu cho quá trình truyền nhận data

#define SDA RC0

#define SCL RC1

#define STROBE RC2

#define CLEAR RC3

#define OE RC4

Khai báo bảng chữ cái để nhập

Thiết kế các port B ,port C xuất dữ liệu

Ngắt truyền dữ

liệu từ PC

Hiển thị chuỗi kí tự đã mặc

định

XIN NHAP CHU

Kiểm tra cờ ngắt UART (RCIE & RCIF)

Thiết lập tạo tín hiệu quét cột

Thực hiện quét cột và hiển thị

kí tự nhập từ bàn phím

Hiển thị ra led ma trận

KẾT THÚC

Page 51: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-51-

Chương trình con: NHẬP CHỮ

>80

<=80

Ngắt truyền nhận và má hóa dữ liệu

S

Đ

BẮT ĐẦU

BẮT ĐẦU

Nhận dữ liệu từ PC và

chuyển vào biến data

Kiểm tra chuỗi kí

tự với kích thước

mảng

Chuyển phần dư sang mảng 2

Chứa hết vào mảng 1

Kiểm tra data

nhận được

Data ==0x1B

Xóa dữ liệu đã nhận và chờ nhập mới

So sánh với bảng chữ cái và

xác định vị trí trong bảng

chữ cái

KẾT THÚC

KẾT THÚC

Hiện thị ra led ma trận

Page 52: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-52-

QUÉT LED :

<64

>=64

BẮT ĐẦU

Định nghĩa các hàm:

Tạo tin hieu quét cột, SDA = 0.

Tạo xung dịch tín hiệu quét cột, SCL = 0.

Tạo xung chốt tín hiệu quét cột, STROBE = 0

Khởi động OE = 1.

Cho phép xuất tín hiệu quét cột, OE = 0

Khởi động SDA = 1

Xuất mã hiển thị ra 8 hàng

Tạo xung dịch dữ liệu quét cột

KẾT THÚC

Tạo xung trễ 0.3ms

Chống lem hiển thị

Kiểm tra data

nhận được

Page 53: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-53-

2.Chương trình vi xử lí:

//============================================================

//

// TRUONG DAI HOC CONG NGHIEP TP HO CHI MINH

// KHOA DIEN TU

// DO AN 1 - MACH QUANG BAO GIAO TIEP PC

// GVHD: NGUYEN MINH NGOC

// SVTH: - LE THANH XUAN - 09212861

// - NGUYEN THE VINH - 09087251

//

//============================================================

#include <htc.h>

#include <stdio.h>

#include <math.h>

#include "uart.h"

__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);

#define _XTAL_FREQ 4000000

// Dinh nghia cac thong so.

#define SDA RC0 // Ngo ra du lieu (Tin hieu quet cot).

#define SCL RC1 // Ngo ra xung clock (Tin hieu quet cot -

Kich muc = 0/1).

#define STROBE RC2 // Ngo ra dieu khien bo quet cot (Chot tin

hieu quet - Kich muc = 0/1).

#define CLEAR RC3 // Ngo ra dieu khien bo quet cot (Xoa tin

hieu quet - Kich muc = 0).

#define OE RC4 // Ngo ra dieu khien bo quet cot (Xuat tin

hieu quet - Kich muc = 0).

//============================================================

// BANG DU LIEU CHUA MA KI TU HIEN THI

//============================================================

// MA KI TU

const unsigned char code[]=

{

0X00,0X00,0X00,0X00,0X00,0X00 //Khoang trang

,0x0F8,0X14,0X12,0X14,0X0F8,0X00 //Chu A

,0x0FE,0X92,0X92,0X92,0X6C,0X00 //Chu B

,0x7C,0X82,0X82,0X82,0X44,0X000 //Chu C

,0x0FE,0X82,0X82,0X82,0X7C,0X000 //Chu D

,0x0FE,0X92,0X92,0X92,0X92,0X000 //Chu E

,0x0FE,0X12,0X12,0X12,0X02,0X000 //Chu F

,0x7C,0X82,0X92,0X92,0X74,0X000 //Chu G

,0x0FE,0X10,0X10,0X10,0X0FE,0X000 //Chu H

,0x82,0X82,0X0FE,0X82,0X82,0X000 //Chu I

,0x82,0X82,0X7E,0X02,0X02,0X000 //Chu J

Page 54: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-54-

,0x0FE,0X18,0X24,0X42,0X80,0X000 //Chu K

,0x0FE,0X80,0X80,0X80,0X80,0X000 //Chu L

,0x0FE,0X04,0X08,0X04,0X0FE,0X000 //Chu M

,0x0FE,0X04,0X08,0X10,0X0FE,0X000 //Chu N

,0x7C,0X82,0X82,0X82,0X7C,0X000 //Chu O

,0x0FE,0X12,0X12,0X12,0X0C,0X000 //Chu P

,0x7C,0X82,0X82,0X0A2,0X7C,0X800 //Chu Q

,0x0FE,0X12,0X32,0X52,0X8C,0X000 //Chu R

,0x4C,0X92,0X92,0X92,0X64,0X000 //Chu S

,0x02,0X02,0X0FE,0X02,0X02,0X000 //Chu T

,0x7E,0X80,0X80,0X80,0X7E,0X000 //Chu U

,0x3E,0X40,0X80,0X40,0X3E,0X000 //Chu V

,0x82,0X44,0X38,0X44,0X82,0X000 //Chu X

,0x02,0X04,0X0F8,0X04,0X02,0X000 //Chu Y

,0x0C2,0X0A2,0X92,0X8A,0X86,0X000 //Chu Z

,0x7E,0X80,0X7C,0X80,0X7E,0X000 //Chu W

,0x7C,0X86,0X0BA,0X0C2,0X7C,0X000 //So 0

,0x88,0X84,0X0FE,0X80,0X80,0X000 //So 1

,0x0C4,0X0A2,0X0A2,0X0A2,0X9C,0X000 //So 2

,0x44,0X92,0X92,0X92,0X6C,0X000 //So 3

,0x38,0X24,0X22,0X20,0X0FE,0X000 //So 4

,0x4E,0X8A,0X8A,0X8A,0X72,0X000 //So 5

,0x7C,0X92,0X92,0X92,0X64,0X000 //So 6

,0x02,0X0E2,0X12,0X0A,0X06,0X000 //So 7

,0x6C,0X92,0X92,0X92,0X6C,0X000 //So 8

,0x4C,0X92,0X92,0X92,0X7C,0X000 //So 9

,0x70,0X88,0X88,0X48,0X0F8,0X000 //Chu a

,0x0FE,0X90,0X90,0X90,0X60,0X000 //Chu b

,0x70,0X88,0X88,0X88,0X40,0X000 //Chu c

,0x70,0X88,0X88,0X88,0X0FE,0X000 //Chu d

,0x70,0X0A8,0X0A8,0X0A8,0X90,0X000 //Chu e

,0x0FC,0X12,0X12,0X12,0X02,0X000 //Chu f

,0x98,0X0A4,0X0A4,0X0A4,0X7C,0X000 //Chu g

,0x0FE,0X08,0X08,0X08,0X0F0,0X000 //Chu h

,0x00,0x7A,0X80,0X80,0X00,0x000 //Chu i

,0x00,0x80,0X80,0X7A,0X00,0x000 //Chu j

,0x00,0x0FE,0X30,0X48,0X84,0X000 //Chu k

,0x00,0x7E,0X80,0X80,0X80,0X000 //Chu l

,0x0F8,0X08,0X0F0,0X08,0X0F0,0X000 //Chu m

,0x00,0x0F8,0X08,0X08,0X0F0,0X000 //Chu n

,0x70,0X88,0X88,0X88,0X70,0X000 //Chu o

,0x0F8,0X24,0X24,0X24,0X18,0X000 //Chu p

,0x18,0X24,0X24,0X24,0X0F8,0X000 //Chu q

,0x00,0x0F8,0X10,0X08,0X08,0X000 //Chu r

,0x00,0x90,0X0A8,0X0A8,0X48,0X000 //Chu s

,0x00,0x08,0X7E,0X88,0X88,0X000 //Chu t

Page 55: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-55-

,0x78,0X80,0X80,0X80,0X78,0X000 //Chu u

,0x38,0X40,0X80,0X40,0X38,0X000 //Chu v

,0x88,0X50,0X20,0X50,0X88,0X000 //Chu x

,0x98,0X0A0,0X0A0,0X0A0,0X78,0X000 //Chu y

,0x88,0X0C8,0X0A8,0X98,0X88,0X000 //Chu z

,0x78,0X80,0X0E0,0X80,0X78,0X000 //Chu w

};

//============================================================

// Khai bao bien.

//============================================================

// <> BO DEM

unsigned char a[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

x00

};

//********************************************************************

// MANG DEM CHUA KI TU HIEN THI

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

unsigned char

chuoi[]={0,10,0,0,0,0,0,0,14,44,37,52,0,13,37,0,8,45,41,50,0,20,44,45,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

const char bangtra[]="

ABCDEFGHIJKLMNOPQRSTUVXYZW0123456789abcdefghijklmnopqrstuvxyzw"

;

unsigned char dem,demx,demy,khoa;

// KHAI BAO KHOI TAO PORT

//------------------------------------------------------------------------------------------------------

void init_PORTC(void)

{

PORTC = 0X00; // Khoi tao Port C.

TRISC = 0b10000000; // Cau hinh PORTD la ngo ra.

}

//------------------------------------------------------------------------------------------------------

void init_PORTB(void)

{

PORTB = 0X00; // Khoi tao Port B.

TRISB = 0X00; // Cau hinh PORTB la ngo ra.

Page 56: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-56-

}

//------------------------------------------------------------------------------------------------------

// HAM QUET LED HIEN THI

void quetled_righttoleft()

{

unsigned int i;

SCL = 0; // Khoi dong SCL = 0.

SDA = 0; // Khoi dong SDA = 0.

STROBE = 0; // Khoi dong STROBE = 0.

CLEAR = 1; // Khoi dong CLEAR = 1.

OE = 1; // Khoi dong OE = 1.

__delay_us(1);

OE = 0; // Cho phep xuat tin hieu quet cot, OE = 0.

// ********************************************************

// Bat dau tien hanh hoat dong quet cot.

//*********************************************************

CLEAR = 0; // Tao xung xoa toan bo bang quang bao, CLEAR = 0.

__delay_us(1);

CLEAR = 1; // CLEAR = 1.

__delay_us(1);

SDA = 1; // Tao tin hieu quet cot, SDA = 1.

SCL = 0; // Tao xung dich tin hieu quet cot, SCL = 0.

__delay_us(1);

SCL = 1; // SCL = 1

STROBE = 0; // Tao xung chot tin hieu quet cot, STROBE = 0.

__delay_us(1);

STROBE = 1; // STROBE = 1.

SDA = 0; // SDA = 0.

//============================================================

for (i=0;i<=47;i++) // Thuc hien quet 48 cot.

{

PORTB = a[i]; // Xuat ma hien thi ra bang quang bao.

__delay_us(100); // tao tre 0.3 ms

__delay_us(100);

__delay_us(100);

PORTB = 0x00; // Chong lem hien thi.

SCL = 0; // Tao xung dich tin hieu quet cot, SCL = 0.

__delay_us(1);

SCL = 1; // SCL = 1

STROBE = 0; // Tao xung chot tin hieu quet cot, STROBE = 0.

__delay_us(1);

STROBE = 1; // STROBE = 1.

}

}

//============================================================

Page 57: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-57-

void taoma_rtl()

{

unsigned char y,x,n,i;

unsigned int m;

demx=0;

demy=2;

while (khoa==0)

{

y=demy;

x=demx;

for(i=0;i<=47;i++)

{

m=chuoi[y]*6+x;

a[i]=code[m];

x++;

if(x==6) { x=0; y++; }

}

for(n=0;n<=chuoi[1];n++)

{

quetled_righttoleft();

}

demx++;

if(demx==6) {demx=0; demy++;}

if(demy>=dem) {khoa=1;}

}

}

//============================================================

// Chuong trinh chinh.

//============================================================

void main (void)

{

init_PORTB(); // Cau hinh Port B.

init_PORTC();

uart_init(); // Khoi dong UART.

// INTCON = | GIE | PEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |

GIE = 1; // Cho phep ngat toan cuc.

PEIE = 1; // Cho phep ngat ngoai vi (UART).

dem=24;

khoa=0;

while(1)

{

taoma_rtl();

}

}

//============================================================

void interrupt isr()

Page 58: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-58-

{

unsigned char i,c;

if(RCIE && RCIF) // Kiem tra cho phep ngat thu cua UART.

{

c = uart_getc(); // Doc du lieu thu duoc tu UART.

if (c==46)

{

for(i=0;i<=dem;i++)

{

chuoi[i]=0;

}

dem=0;

demx=0;

demy=2;

}

else

{

if(c==8 & dem>=1)

{

chuoi[dem-2]=0;

dem--;

}

else

{

if(c==1) {khoa=0;}

else

khoa=1;

{

for(i=0;i<=63;i++)

{

if(bangtra[i]==c)

{

chuoi[dem]=i;

}

}

dem++;

demx=0;

demy=2;

}

}

}

}

}

Page 59: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-59-

III ĐÁNH GIÁ HÍ NGHIỆM

- Quá trình thi công mạch đúng theo thiết kế.

- Yêu cầu của đồ án được hoàn thành đầy đủ.

- Mạch chạy tốt trong cả thực nghiệm lẫn thực tế

Trong thực nghiệm:

+ Trước khi giao tiếp máy tính:

+ Khi giao tiếp với máy tính:

Page 60: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-60-

Thực tế

+ Trước khi giao tiếp máy tính

+ Khi giao tiếp máy tính

Page 61: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-61-

CHƢƠNG I : T LU N

I Ả Đ ĐƢỢC:

Sau thời gian tìm hiểu và thực hiện đề tài, em đã thu được nhiều kiến thức bổ

ích

và kinh nghiệm từ tài liệu tham khảo, thầy cô, bạn bè...

- Tìm hiểu họ vi xử lí PIC 16f8XX và biết cách lập trình cho nó bằng ngôn ngữ

CCS.

- Biết cách lập trình tạo giao diện trên máy tính bằng ngôn ngữ VB (Visual

Basic).

- Hiểu cách truyền nhận dữ liệu từ máy tính xuống vi xử lí và ngược lại thông qua

cổng RS232.

- Thiết kế và thi công mạch hoàn chỉnh theo yêu cầu của đề tài.

- Sử dụng thành thạo phần mềm vẽ mạch ORCAD 9.2.

Bên cạnh những kết quả khả quan đó do việc phân bổ thời gian chưa tốt nên

phần

chương trình assemler và chương trình VB chưa được tối ưu.

II HƢỚNG PHÁT TRIỂN ĐỀ TÀI:

Trong đời thường, chuẩn RS232 được ứng dụng nhiều trong các ứng dụng vừa

và nhỏ nhưng trong công nghiệp ngày nay chuẩn RS232 không thể đáp ứng được nhu

cầu truyền thông nữa vì đường truyền không cân bằng (các tín hiệu đều lấy điểm

chuẩn là đường mass chung, bị ảnh hưởng của nhiễu tác động) do đó tốc độ truyền và

khoảng cách truyền bị giới hạn (khoảng cách truyền thông tối đa 100m). Vì vậy để

đáp ứng nhu cầu truyền thông công nghiệp, người ta sử dụng chuẩn truyền thông

RS485 khi cần tăng khoảng cách và tốc độ truyền thông (khoảng cách truyền thông tối

đa 1200m và vận tốc truyền lên đến 10 Mbits/s). Nguyên nhân mà RS 485 có thể tăng

tốc độ và khoảng cách truyền thông là do RS 485 sử dụng phương pháp truyền 2 dây

Page 62: Quang Bao Giao Tiep May Tinh

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1

-62-

vi sai (vì 2 dây có đặc tính giống nhau, tín hiệu truyền đi là hiệu số điện áp giữa 2 dây

do đó loại trừ được nhiễu chung).

Mặt khác do chuẩn truyền thông RS 232 không cho phép có hơn 2 thiết bị truyền nhận

tin trên đường dây trong khi đó với chuẩn RS 485 ta có thể nối 32 thiết bị thu phát trên

2 dây.

Do đó, hướng phát triển của đề tài này là thay thế chuẩn truyền RS232 bằng

chuẩn RS485.

III.TÀI LIỆU THAM KHẢO:

-Giáo trình lý thuyết Vi Xử Lý, trường ĐH Công Nghiệp TPHCM (BS: Phạm

Quang Trí – Phạm Hữu Lộc).

-Giáo trình thực hành Vi Xử Lý, trường ĐH Công Nghiệp TPHCM (BS: Phạm

Quang Trí – Phạm Hữu Lộc).

-Tài liệu lập trình giao tiếp máy tính bằng Visual Basic (BS: Hồ Thanh Tâm – Lê

Văn Bạn).

-RS232 - Communication (nguồn Internet).

-Serial Communication (nguồn Internet).

-Trang Web: www.dientuvietnam.com

www.ant7.com

www.alldatasheet.com