You are on page 1of 62

GVHD: NGUYỄN MINH NGỌC

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

ĐỒ ÁN 1

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.

-1-

GVHD: NGUYỄN MINH NGỌC
1 I N C IC

ĐỒ ÁN 1

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 VonNeumann 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.
-2-

GVHD: NGUYỄN MINH NGỌC
1.3 RISC VÀ CISC

ĐỒ ÁN 1

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
-3-

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. đọc lệnh 2 TCY2: thực thi lệnh 2. mỗi lệnh xem như chỉ được thực thi trong một chu kì lệnh. đọc lệnh 4. Đố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. Quá trình trên sẽ được thực thi như sau: TCY0: đọc lệnh TCY1:thực thi lệnh 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. ta cần một chu kì lệnh để gọi lệnh đó. -4- . Như vậy có thể xem lênh 3 cần 2 chu kì xung clock để thực thi. Sau khi đã xác định đúng vị trí lệnh trong thanh ghi PC. và một chu kì xung clock nữa để giải mã và thực thi lệnh.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Ở đâ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. để thực thi một lệnh. TCY5: thực thi lệnh đầu tiên của SUB_1 và đọc lệnh tiếp theo của SUB_1. Với cơ chế pipelining được trình bày ở trên. đọc lệnh 3 TCY3: thực thi lệnh 3. Thông thường. mỗi lệnh chỉ cần một chu kì lệnh để thực thi xong.

PIC18xxxx: độ dài lệnh 16 bit . các ngôn ngữ lập trình cấp cao hơn bao gồm C. ngoài ra còn có các vi điều khiển 28. MikroBasic… -5- . Có nhiều vi điều khiển PIC với số lượng chân khác nhau. 1 NG N NG L NH IC Ngôn ngữ lập trình cho PIC rất đa dạng. 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. … 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.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 1 CÁC NG IC CÁCH L CH N IC * Các kí hiệu của vi điều khiển PIC . còn PIC16F877A là flash). Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM. đây là kí hiệu cũ. Basic. Pascal. 40. Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép.PIC16xxxx: độ dài lệnh 14 bit .F: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM) PIC có bộ nhớ flash . thậm chí có vi điều khiển chỉ có 8 chân.LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp LV: tương tự như LF. các chuẩn giao tiếp bên trong. 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.Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC. 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. 44 … chân. 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á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.PIC12xxxx: độ dài lệnh 12 bit . nếu có thêm chữ A ở cuối là flash (ví dụ PIC16F877 là EEPROM. Ở 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: .

PIC16F877A H NH NG SƠ ĐỒ CH N ĐỒ ÁN 1 Hình 3.Timer2: bộ đếm 8 bit với bộ chia tần số.Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ. . 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. . Các đặc tính ngoại vi bao gồm các khối chức năng sau: . Các đặc tính Analog: -6- . .Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port). . SPI và I2C. WR.2: Vi điều khiển PIC16F877A/PIC16F874A và các dạng sơ đồ chân 2. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Số PORT I/O là 5 với 33 pin I/O. bộ nhớ dữ liệu 368 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256 byte. Tốc độ hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns.Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD. bộ postcaler.Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit. Bộ nhớ chương trình 8Kx14 bit. CS ở bên ngoài. .Hai bộ Capture/so sánh/điều chế độ rông xung.Timer1: bộ đếm 16 bit với bộ chia tần số.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.GVHD: NGUYỄN MINH NGỌC 2. .

000. . -7- . . . . . .Watchdog Timer với bộ dao động trong.Chức năng bảo mật mã chương trình.Chế độ Sleep. Bên cạnh đó là một vài đặc tính khác của vi điều khiển như: .Có thể hoạt động với nhiều dạng Oscillator khác nhau.Bộ nhớ EEPROM với khả năng ghi xóa được 1.000 lần.Khả năng tự nạp chương trình với sự điều khiển của phần mềm.Hai bộ so sánh. .000 lần.GVHD: NGUYỄN MINH NGỌC .8 kênh chuyển đổi ADC 10 bit.Bộ nhớ flash với khả năng ghi xóa được 100.Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 nă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. . ĐỒ ÁN 1 .

2.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 2. dung lượng bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang (từ page0 đến page -8- . * Bộ nhớ chƣơng trình Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash.3: Sơ đồ khối vi điều khiển PIC16F877A.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).2 SƠ ĐỒ H I CỦ IC1 Hình 3.

Mỗi bank có dung lượng 128 byte. * 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. 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. Khi vi điều khiển được reset. 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. Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau: -9- . bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector). Khi có ngắt xảy ra. 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). bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector). Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 3) . 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.

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 3.4: Sơ đồ nh i u 6 877 -10- .

10Bh. 83h. ngắt ngoại vi RB0/INT và ngắt interrputon. 183h):thanh ghi chứa kết quả thực hiện phép toán của khối ALU. -11- . 181h): thanh ghi này cho phép đọc và ghi. Thanh ghi INTCON (0Bh. 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. 18Bh):thanh ghi cho phép đọc và ghi. cạnh tác động của ngắt ngoại vi và bộ đếm Timer0. Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngoại vi. 103h. PWM …). 8Bh. Thanh ghi STATUS (03h.GVHD: NGUYỄN MINH NGỌC ** THANH GHI CHỨC NĂNG ĐẶC BIỆT SFR: ĐỒ ÁN 1 Đâ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. 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. chứa các bit điều khiển và các bit cờ hiệu khi timer0 bị tràn. xác lập các tham số về xung tác động.change tại các chân của PORTB. 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. 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. cho phép điều khiển chức năng pull-up của các chân trong PORTB.

vi điều khiển sẽ thực hiện tiếp chương trình theo đúng qui trình định trước. 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. 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ố. * 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 một trong các lệnh RETURN. 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. hằng số. RETLW hat RETFIE được thực thi.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 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. Đây là các thanh ghi dữ liệu thông thường. ** 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). kết quả hoặc các tham số phục vụ cho chương trình. ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM. 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. SSP bus. 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. 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ị PC sẽ tự động được lấy ra từ trong stack. -12- . Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi. 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.

. bao gồm PORTA. PORTD và PORTE. Muốn xác lập chức năng của một chân trong PORTA là input.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack. Các thanh ghi SFR liên quan đến PORTA bao gồm: . muốn xác lập chức năng của một chân trong PORTA là output.ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC. 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. bộ so sánh. các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển bởi CPU. Đây là các chân “hai chiều” (bidirectional pin). 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.CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh. đối với PORTC là TRISC. .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.TRISA (địa chỉ 85h) : điều khiển xuất nhập. đối với PORTB là TRISB. *PORT A: PORTA (RPA) bao gồm 6 I/O pin. PORTC. ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại. 2. 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. do đó ta không biết được khi nào stack tràn.CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp. đối với PORTD là TRISD vàđối với PORTE là TRISE). ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA. Bên cạnh đó PORTA còn là ngõ ra của bộ ADC.PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA. 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). . 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). -13- . Bên cạnh đó. . Vi điều khiển PIC16F877A có 5 cổng xuất nhập. 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. PORTB.

OPTION_REG (địa chỉ 81h. * PORT C: PORTC (RPC) gồm 8 pin I/O. PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0. 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. bộ Timer1.Thanh ghi TRISD : điều khiển xuất nhập.181h) : điều khiển ngắt ngoại vi và bộ Timer0. Các thanh ghi liên quan đến PORTE bao gồm: -14- . Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Các chân của PORTE có ngõ vào analog. . USART.Thanh ghi PORTD : chứa giá trị các pin trong PORTD. SPI. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port).TRISB (địa chỉ 86h.GVHD: NGUYỄN MINH NGỌC * PORT B: ĐỒ ÁN 1 PORTB (RPB) gồm 8 pin I/O. * PORT E: PORTE (RPE) gồm 3 chân I/O. SSP. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh.186h) : điều khiển xuất nhập .106h) : chứa giá trị các pin trong PORTB . * PORT D: PORTD (RPD) gồm 8 chân I/O. Các thanh ghi điều khiển liên quan đến PORTC: . Các thanh ghi SFR liên quan đến PORTB bao gồm: . Thanh ghi điều khiển xuất nhập tương ứng là TRISE. 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.PORTB (địa chỉ 06h. bộ PWM và các chuẩn giao tiếp nối tiếp I2C. Thanh ghi điều khiển xuất nhập tương ứng là TRISB. 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 PORTD bao gồm: . thanh ghi điều khiển xuất nhập tương ứng là TRISD.TRISC (địa chỉ 87h) : điều khiển xuất nhập.PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC .

Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn. Bit TOSE -15- .PORTE : chứa giá trị các chân trong PORTE. ĐỒ ÁN 1 . . Hình 3. Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit. 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).ADCON1 : thanh ghi điều khiển khối ADC. 2. ngắt Timer0 sẽ xuất hiện. Khi giá trị thanh ghi TMR0 từ FFh trở về 00h. 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.5: Sơ đồ khối c a timer 0 Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>).GVHD: NGUYỄN MINH NGỌC . 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. 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.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.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.

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ương tự như Timer0.INTCON (địa chỉ 0Bh. 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. Khi đối tượng tác động là WDT. 101h) : chứa giá trị đếm của Timer0. bit TMR0IF (INTCON<2>) sẽ được set. 18Bh): cho phép ngắt hoạt động (GIE và PEIE).6 TIMER 1 Timer1 là bộ định thời 16 bit.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 (OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào bột đếm. Sau đây là sơ đồ khối của Timer1: -16- . Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độ sleep. 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). Bit điều khiển của Timer1 sẽ là TMR1IE (PIE<0>). 8Bh. Khi thanh ghi TMR0 bị tràn. 2. Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>). 10Bh. Các thanh ghi điều khiển liên quan đến Timer0 bao gồ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. giá trị của Timer1 sẽ được lưu trong hai thanh ghi (TMR1H:TMR1L). 181h): điều khiển prescaler. Đây chính là cờ ngắt của Timer0.TMR0 (địa chỉ 01h.OPTION_REG (địa chỉ 81h. đồng thời prescaler sẽ ngưng tác vụ hỗ trợ cho WDT. lệnh CLRWDT sẽ xóa prescaler. 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. . . 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>).

Thanh ghi chứa giá trị đếm của Timer2 là TMR2. 18Bh): cho phép ngắt hoạt động (GIE và PEIE). Bit cho phép ngắt Timer2 tác động là TMR2ON (T2CON<2>).6: Sơ đồ hối i r Các thanh ghi liên quan đến Timer1 bao gồm: .TMR1H (địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1.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. -17- .INTCON (địa chỉ 0Bh. . Cờ ngắt của Timer2 là bit TMR2IF (PIR1<1>). . 2. 8Bh.T1CON (địa chỉ 10h): xác lập các thông số cho Timer1. .TMR1L (địa chỉ 0Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1.PIE1( địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE). 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>)).PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF). 10Bh.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 3. . .

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 3. tuy nhiên cạnh tác động vẫn được cố định là cạnh lên. Timer2 được hỗ trợ bởi hai bộ chia tần số prescaler và postcaler độc lập. Timer1 và Timer2 đều có hai chế độ hoạt động là timer và counter. 10Bh.T2CON (địa chỉ 12h): xác lập các thông số cho Timer2. 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. Hiệu điện thế -18- . Timer1 có quan hệ với khối CCP. trong khi Timer1 là bộ đếm 16 bit (giá trị đếm tối đa là FFFFh). 2. . . . 8Bh. Các thanh ghi liên quan đến Timer2 bao gồm: .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. PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0).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ố.INTCON (địa chỉ 0Bh.TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2. 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). Timer0. Xung clock có tần số bằng ¼ tần số của oscillator.PR2 (địa chỉ 92h): thanh ghi hỗ trợ cho Timer2. trong khi Timer2 được kết nối với khối SSP.PIE1 (địa chị 8Ch): chứa bit điều khiển Timer2 (TMR2IE). Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh). cạnh tác động) trong khi các thông số của xung tác động lên Timer1 là cố định.

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.INTCON (địa chỉ 0Bh.PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF). 8Bh. . với các vi điều khiển khác hay với máy tính.Đồng bộ_ Slave mode.Bất động bộ (Asynchronous).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. . Các dạng của giao diện USART ngoại vi bao gồm: . . . 18Bh): cho phép các ngắt (các bit GIE. .PIE1 (địa chỉ 8Ch): chứa bit điều khiển AD (ADIE). . PEIE). Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm: . 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. Ở dạng bất đồng bộ. .GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 chuẩn VREF có thể được lựa chọn là VDD.PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): liên quan đến các ngõ vào analog ở PORTE. 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. Ở dạng -19- .USART còn được gọi là giao diện giao tiếp nối tiếp SCI (Serial Communication Interface). 10Bh.ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD. VSS hay hiệu điện thể chuẩn được xác lập trên hai chân RA2 và RA3. BRG còn được điều khiển bởi bit BRGH ( TXSTA<2>). 2. 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. 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.Đồng bộ_ Master mode.

. -20- . 8 hay 9 bit dữ liệu (thông thường là 8 bit) và 1 bit Stop.Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền. 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.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). 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). * USART bất đồng bộ: Ở chế độ truyền này USART hoạt động theo chuẩn NRZ (None-Return-to-Zero). .Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện. 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). nghĩa là các bit truyền đi sẽ bao gồm 1 bit Start.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 đồng bộ tác động của bit BRGH được bỏ qua. 8Bh. .RCSTA (địa chỉ 18h): cho phép hoạt động cổng nối tiếp (bit SPEN). 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. 18Bh): cho phép tất cả các ngắt. . . Các thanh ghi liên quan đến BRG bao gồm: . 10Bh. .Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud.RSBRG (địa chỉ 99h): quyết định tốc độ baud.Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE. Bit LSB sẽ được truyền đi trước. .Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF. .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 PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF. 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. .Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE. -21- . .Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện. Đ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. USART cho phép hai chế độ truyền nhận dữ liệu là Master mode và Slave mode. 18Bh): cho phép tất cả các ngắt. 10Bh.Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud. Các thanh ghi liên quan đến psp bao gồm: . Cổng giao tiếp nối tiếp vẫn là hai chân RC7/RX/DT.Thanh ghi porte (địa chỉ 09h): chứa giá trị các pin porte. Master mode được kích hoạt bằng cách set bit CSRC (TXSTA<7>).Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyề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. . 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.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 INTCON (địa chỉ 0Bh.Thanh ghi trise (địa chỉ 89h): chứa các bit điều khiển porte và psp.GVHD: NGUYỄN MINH NGỌC * S ĐỒ ÁN 1 đồng bộ: Giao diện USART đồng bộ được kích hoạt bằng cách set bit SYNC. .Thanh ghi portd (địa chỉ 08h): chứa dữ liệu cần đọc hoặc ghi. . RC6/TX/CK và được cho phép bằng cách set bit SPEN. . 8Bh. Điều này cho phép Slave mode hoạt động ngay cả khi vi điều khiển đang ở chế độ sleep. Slave mode được kích hoạt bằng cách clear bit CSRC. 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: .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. 2.

GVHD: NGUYỄN MINH NGỌC
- 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

ĐỒ ÁN 1

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

-22-

GVHD: NGUYỄN MINH NGỌC

ĐỒ ÁN 1

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.
-23-

GVHD: NGUYỄN MINH NGỌC

ĐỒ ÁN 1

Đế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
-24-

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 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). 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. Cần chú ý là trong quá trình thực thi 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.GVHD: NGUYỄN MINH NGỌC GIE cũng sẽ được set để ĐỒ ÁN 1 cho phép các ngắt hoạt động trở lại. -25- . Hình 3. chỉ có giá trị của bộ đếm chương trình được cất vào trong Stack.9: Sơ đồ logic c a tất cả các ngắt trong vi điều khiển PIC16F877A. 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.

Giới thiệu led ma trận Hình 1. 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 -26- . LED MA TR N 1.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 II.7: Hình dạng thực tế của led ma trận. 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. 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ỏ.

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). vì nó có đồng thời điện thế cao trên Anode và điện thế thấp trên Cathode. 2 .CÁC HƢƠNG HÁ HIỂN THỊ CHO BẢNG QUANG BÁO 2. đồ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. 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. 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. 8 chân còn lại điều khiển màu thứ 2. trong đó có 8 chân dùng để điều khiển cột (hoặc hàng) chung cho cả 2 màu. 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. lúc đó chỉ có một led 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. Nhưng trong khi đó một số led ta không mong muốn cũng sẽ sáng. 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. Để đảm bảo cho mắt nhìn thấy các led không bị nháy.GVHD: NGUYỄN MINH NGỌC Dual color type Hình 1. 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. các chân Anode của các led trên cột tương ứng được cấp điện áp cao. 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.1 HƢƠNG HÁ CH T -27- . 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ị. 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. Đối với loại 8x8 có 2 màu thì số chân ra của led là 24 chân. 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. Tuy nhiên.8: Kết cấu bên trong của led ma trận ĐỒ ÁN 1 Khi có một tín hiệu điều khiển ở cột và hàng. thì tần số quét nhỏ nhất cho mỗi chu kì là khoảng 20Hz(50ms). 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 đó. Như vậy.

1: Giao tiếp led ma trận dùng phương pháp chốt. A. 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. 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. dữ liệu được đưa ra 8 hàng rồi chốt lại. trong khi đó dữ liệu trước đó vẫn hiện diện tại ngõ ra của IC chốt.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 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. Việc thực hiện chốt hàng được thể hiện ở lưu đồ như sau: 9 8 7 6 5 4 3 2 -28- . 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. 2 3 4 5 6 7 8 9 11 1 D0 D1 D2 D3 D4 D5 D6 D7 LE OE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 19 18 17 16 15 14 13 12 12 9 6 3 13 16 19 22 matrix_3mau DM74LS573 hd8 hd7 hd6 hd5 hd4 hd3 hd2 hd1 24 21 18 15 1 4 7 10 12 13 14 15 16 17 18 19 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 hx8 hx7 hx6 hx5 hx4 hx3 hx2 hx1 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 19 18 17 16 15 14 13 12 23 20 17 14 2 5 8 11 U7 DM74LS573 OE LE D7 D6 D5 D4 D3 D2 D1 D0 c1 c2 c3 c4 c5 c6 c7 c8 DM74LS573 LE OE 11 1 D0 D1 D2 D3 D4 D5 D6 D7 2 3 4 5 6 7 8 9 1 11 Hình 4.

B. 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. Việc thực hiện chốt cột được thể hiện ở lưu đồ như sau: -29- .2: Qui trình hiển thị chốt hàng. dữ liệu được đưa ra 8 cột rồi chốt lại. 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. 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). 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 hiển thị trên màn hình led ma trận.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 4.

Khó khăn trong việc lập trình xuất dữ liệu ra. cột một cách linh hoạt. -30- .Giới thiệu chung về phƣơng pháp quét cột.Quá trình thực hiện quét cộ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. 2.Chuyển đổi cách quét hàng.3: Qui trình hiển thị chốt c t. số cột của bảng quang báo. .GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 4. C Ƣ NHƢỢC ĐIỂ CỦ HƢƠNG HÁ NG IC CH * Ƣu điểm: . . . 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.Dữ liệu được truyền đi nhanh. .2 HƢƠNG HÁ HIỂN THỊ SỬ DỤNG THANH GHI DỊCH A.Mở rộng số hàng. * Nhƣợc điểm: .Tạo bảng mã khó khăn. QUÉT C T .

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ứ 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. Hình 4. cột được tích cực ở mức 0). đế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. Cứ như thế quá trình trên được lặp đi lặp lại > 24lần/1s.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ứ 11111000 nhất Dữ liệu thứ 2 Dữ liệu thứ 3 00100100 00100010 -31- C1 C2 C3 .GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 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.

00100100 11111000 00000000 00000000 00000000 C4 C5 C6 C7 C8 ĐỒ ÁN 1 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. 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. 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. 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. 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á trình thực hiện quét hàng: -32- . 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. .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. 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.GVHD: NGUYỄN MINH NGỌC Dữ liệu thứ 4 Dữ liệu thứ 5 Dữ liệu thứ 6 Dữ liệu thứ 7 Dữ liệu thứ 8 ảng 4. QUÉT HÀNG . 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.

cột được tích cực ở mức 0).5: Qui trình đư li u ra 8 c t cho 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. đế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. Cứ như thế quá trình trên được lặp đi lặp lại > 24lần/1s. 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. 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. 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. 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. -33- . 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.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 4. 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.5. 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.

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Hình 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 -34- .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: 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 Dữ liệu thứ 2 Dữ liệu thứ 3 Dữ liệu thứ 4 Dữ liệu thứ 5 Dữ liệu thứ 6 Dữ liệu thứ 7 Dữ liệu thứ 8 11111111 11111011 11110101 11101110 11101110 11100000 11101110 11101110 H1 H2 H3 H4 H5 H6 H7 H8 ảng 4.

Tiết kiệm chân PORT. * Nhƣợc điểm: . 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.Mở rộng bảng ma trận lên một cách dễ dàng. 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. . . -35- . C.Lập trình dễ dàng trong phương pháp 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.Lập trình khó khăn hơn khi sử dụng phương pháp quét hàng. 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. .Chuyển đổi không linh hoạt bằng sử dụng phương pháp chốt. . 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.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 ra một cách đồng thời. . hiệu quả kinh tế. Ƣ 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.Truyền dữ liệu đi xa hơn. 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. .Tốn thời gian để thực hiện việc truyền dữ liệu đến các cột.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. 2.

Chân 7: ngõ ra 3 .Chân 4: ngõ ra 0 . dòng điện ngõ vào 1uA.Chân 6: ngõ ra 2 . Sơ đồ chân Hình sơ đồ chân 6B595 . 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ân 5: ngõ ra 1 .Chân 8: xóa dữ liệu -36- .  Dải áp hoạt động từ 2-6v  Tần số quét 30Mhz 1.GVHD: NGUYỄN MINH NGỌC III .IC GHI DỊCH 6B595 ĐỒ ÁN 1  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.Chân 1: NC .chốt dữ liệu 8 bit.  IC 6B595 có dòng ra lớn có thể đạt được 500mA.Chân 3: ngõ vào dữ liệu . biến đổi dữ liệu dạng nối tiếp thành dạng dữ liệu song song.Chân 2: nguồn .  Dòng điện tiêu thụ 80uA.

Chân 13: ngõ vào xung clock .Chân 14: ngõ ra 4 .Chân 9: ngõ vào cho phép .Chân 18: ngõ ra dữ liệu . -37- .Chân 20: NC 2.GVHD: NGUYỄN MINH NGỌC . 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.Chân 10: nối mass . 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.Chân 11: nối mass .Chân 16: ngõ ra 6 .Chân 15: ngõ ra 5 .Chân 17: ngõ ra 7 .Chân 19: nối mass . 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.Chân 12: chốt dữ liệu ra . ĐỒ ÁN 1 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.

-38- . Hoạt động của IC 6B595 thông qua dạng sóng.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 3.

Sơ đồ chân: 2. Khảo sát transistor A1015: ĐỒ ÁN 1 4. Trạng thái hoạt động : -39- . 1.5 – 5.GVHD: NGUYỄN MINH NGỌC 4.2 V -40 – 1250 C Transistor A1015 là loại transistor PNP có dòng điện bão hòa cao. Các thông số của IC6B595: Điện áp cung cấp Điện áp tối đa cho một ngõ ra (DRAIN) khi sử dụng điện trở treo Dòng điện ra tối đa chỉ cho 1 ngõ ra Dòng điện xung có thể cung câp Dòng điện ra tối đa cho tất các ngõ ra Thời gian đáp ứng của các xung ck với ngõ vào Thời gian đáp ứng của G\ Điện áp ngõ ra của SER – OUT Giới hạn nhiệt độ của IC IV.5 V 50 V 500 mA 1A 150 mA 20ns 150ns 4 – 4.

2. Thông số của IC ULN2803. 3. 7. 16. 2.GVHD: NGUYỄN MINH NGỌC 3. 14. 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 -40- . Thông số của Transistor A1015 ĐỒ ÁN 1 V. Chân 11. 5. Chân 1. 15.10 là các chân cấp nguồn. Khảo sát IC ULN2803 Trong đó : Chân 9. 6. 8 là các ngõ ra. 12. 4. 18 là các ngõ ra đảo. 17. 13.

giống như cổng máy in. Đầu nối DB-25 DB-9 1 2 3 4 5 6 7 3 2 7 8 6 5 BERG B2 A4 A8 A3 A7 A6 B1 Đất ru ền dữ iệu Nhận dữ iệu u cầu g i á việc g i ữ iệu s n sàng Nối đất v á -41- Chức năng Tên GND TXD RXD RTS CTS DSR GND Hướng uất Nhập uất Nhập Nhập . RS-232B (năm 1965). PLC…).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. Cổng giao tiếp RS-232 là giao diện phổ biến rộng rãi nhất. 2 . RS-232A (năm 1963). GI I S-232 1. máy tính khác.ĐẶ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. RS232C (năm 1969) là các chuẩn RS-232 có sửa đổi. 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. mouse. máy vẽ.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 VI. 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.

GVHD: NGUYỄN MINH NGỌC 8 20 22 1 4 9 ỀN LIỆ A5 A2 s ng ang DCD DTR RI ĐỒ ÁN 1 er ina s n sàng ộ ch th v ng CH ẨN S-232 uất Nhập 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. 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. để khi không dùng đến nữa có thể hở mạch các cầu này. được nối với chân 9 của vi mạch MAX 232. 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. Cách truyền dữ liệu đơn giản nhất là chỉ dùng ba đường dẫn TxD. Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. 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. Đường dẫn điều khiển lối vào CTS. 4. RxD và GND (mass). điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết.Các bit dữ liệu được gởi đảo ngược lại. 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. -42- .

+10v). 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. để khắc phục trường hợp này ta mắc thêm các điện trở kéo lên.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 Sơ đồ t nối: 32 11 VDD C4 6 7 3 8 9 4 5 6 COM on PC C5 10uF C3 15 10uF 7 9 8 10 C2+ T2OUT R2OUT R2IN T2IN C216 2 1 2 10uF 14 13 T1OUT R1IN VCC C1+ V+ VGND 4 C13 T1IN R1OUT 11 12 1 C1 10uF RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 MCLR OSC1/CLKIN VDD VCC 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 1 C2 RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 8 9 10 2 3 4 5 6 7 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/C2OUT 5 10uF 13 14 MAX232 OSC2/CLKOUT VSS 31 VSS 12 PIC16F877A 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. phương pháp này có thể truyền được 2000m. đế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ý. 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 ở cổng PC thì điện áp ra trong khoảng (+3v. 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. -43- . 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). +15v). Điện áp ra của max232 trong (-10v.

số luợng thanh ghi lệnh nhiều lên.2. Ở đây ta không nói nhiều đến Assmebly. 1. Tổng quan về C HI-TECH NG N NG L NH 1. MikroC. 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. 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.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 CHƢƠNG II: GIỚI HIỆ 1. Sau này khi ngôn ngữ C ra đời. Vi điều khiển chỉ hiểu và làm việc với hai con số 0 và 1. 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. Sau này khi kiến trúc của Vi điều khiển ngày càng phức tạp. đòi hỏi ra đời một ngôn ngữ mới thay thế. 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. 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.227 Giống như nhiều trình biên dich C khác cho PIC. Và ngôn ngữ lập trình Assembly. HT‐PIC. 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. 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. phiên bản mới nhất là PCWH Compiler Ver 3. 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 -44- .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 đó.

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 dự án. ‐ #include 16f877a. biến. 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).0 // Mo ta phan cung : Dung PIC16F877A ‐ thach anh 20MHz -45- . SV K2001 DH BK HCM.h: Files do người lập trình tạo ra. chứa khai báo về các thanh ghi trong mỗi con PIC. Địa chỉ Download tài liệu: www. dùng cho việc cấu hình cho PIC.h : Đi kèm chương trình dịch. 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.com ‐> Mục nói về C HI-TECH. 2. ‐ #include def_877a. tuy rằng chưa đầy đủ nhưng đây là một tài liệu hay.Mô tả nội dung chƣơng trình. cấu trúc các câu lệnh trong chương trình. Tài liệu này dịch trên cơ sở bản Help của C HI-TECH.picvietnam. 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. Trong bản trợ giúp nhà sản xuất đã mô tả rất nhiều vềhằng. 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. chỉ thị tiền xủa lý. 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.

1 nút nhấn.2 tụ không phân cực 22p. . -46- .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 1 HẦN CỨNG: ạch du e IC .1 thạch anh 4 Mhz. .1 1 Linh iện s dụng: .1 tụ điện phân cực 1000uF .1 tụ điện phân cực470uF . . .GVHD: NGUYỄN MINH NGỌC // // // : LED giao tiep voi PORTB : Cuc am cua LED noi voi GND : RB0 ‐ RB7 la cac chan output ĐỒ ÁN 1 //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ #include <16f877a.1 PIC 16f877a.4 tụ không phân cực 104p.

. cầu diod n ý: ĐỒ ÁN 1 Sơ đồ ngu Hình 3.1 cổng com.1 tụ không phân cực 104p.1: Sơ đồ nguyên lý mạch module PIC ạch rs 1 Linh iện s dụng: .5 tụ phân cực 10u. . .GVHD: NGUYỄN MINH NGỌC 1 1 1 1 1 1 1 điện trở 221/1W điện trở 221 điện trở 101 điện trở 103 led đơn (báo nguồn).1 IC Max232. -47- .

GVHD: NGUYỄN MINH NGỌC .1 led đơn (báo nguồn).6 IC 6B595. -48- . .1 led đơn (báo nguồn). .6 led matrix . .1 điện trở 1k.1 điện trở 1k Sơ đồ ngu n í ạch rs ĐỒ ÁN 1 Sơ đồ nguyên lí mạch RS 232 ạch ed a trận: 1 Linh iện s dụng: .

2: Sơ đồ nguyên lý mạch led ma trận. R4 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 -49R3 R2 R1 330 330 330 330 330 330 5 6 7 8 9 10 11 12 C0G C1G C2G C3G C4G C5G C6G C7G C0R C1R C2R C3R C4R C5R C6R C7R 20 19 18 17 16 15 14 13 18 CR16 CR17 CR18 CR19 CR20 CR21 CR22 CR23 4 5 6 7 14 15 16 17 CR16 CR17 CR18 CR19 CR20 CR21 CR22 CR23 OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 R0 R1 R2 R3 R4 R5 R6 R7 330 8 VCC 2 19 9 24 23 22 21 4 3 2 1 U3 330 STROBE SER OUT CLR VDD GND OE 0 VCC 0 C3 104 5 6 7 8 9 10 11 12 C0G C1G C2G C3G C4G C5G C6G C7G 3 SER IN NC NC GND GND CLK 18 1 20 0 10 11 13 12 8 U18 6B595 C0R C1R C2R C3R C4R C5R C6R C7R 20 19 18 17 16 15 14 13 CR24 CR25 CR26 CR27 CR28 CR29 CR30 CR31 CR24 CR25 CR26 CR27 CR28 CR29 CR30 CR31 4 5 6 7 14 15 16 17 OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 R0 R1 R2 R3 R4 R5 R6 R7 24 23 22 21 4 3 2 1 U4 VCC 2 19 STROBE SER OUT CLR VDD GND OE 9 MATRIXLED 8x8 0 18 17 16 15 14 13 12 11 U13 9 GND IN1 IN2 IN3 IN4 IN5 IN6 IN7 IN8 COM 1 2 3 4 5 6 7 8 10 +12V 8 7 6 5 4 3 2 1 J1 ROW RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 +12V OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8 ULN2803 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 VCC 0 0 5 6 7 8 9 10 11 12 C0G C1G C2G C3G C4G C5G C6G C7G C4 104 3 SER IN NC NC GND GND CLK 1 20 0 10 11 13 12 U19 6B595 C0R C1R C2R C3R C4R C5R C6R C7R 20 19 18 17 16 15 14 13 CR32 CR33 CR34 CR35 CR36 CR37 CR38 CR39 CR32 CR33 CR34 CR35 CR36 CR37 CR38 CR39 4 5 6 7 14 15 16 17 OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 R0 R1 R2 R3 R4 R5 R6 R7 18 8 24 23 22 21 4 3 2 1 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 VCC U5 VCC 2 19 STROBE SER OUT CLR VDD GND OE 9 0 MATRIXLED 8x8 0 C5 104 ĐỒ ÁN 1 0 POWER C0 104 VCC GND 1 2 3 4 5 6 7 8 +12V +5V NC -5V NC +12V NC -12V NC 3 SER IN NC NC GND GND CLK 1 20 0 10 11 13 12 U20 6B595 5 6 7 8 9 10 11 12 C0G C1G C2G C3G C4G C5G C6G C7G C0R C1R C2R C3R C4R C5R C6R C7R 20 19 18 17 16 15 14 13 CR40 CR41 CR42 CR43 CR44 CR45 CR46 CR47 CR40 CR41 CR42 CR43 CR44 CR45 CR46 CR47 4 5 6 7 14 15 16 17 OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 R0 R1 R2 R3 R4 R5 R6 R7 18 8 24 23 22 21 4 3 2 1 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 U6 VCC 2 19 STROBE SER OUT CLR VDD GND OE 9 MATRIXLED 8x8 GND J5 0 0 0 C6 104 VCC .J6 OE CLEAR STROBE CLOCK DATA 5 4 3 2 1 RED CTRL IN 3 10 R9RD7 SER IN NC NC 1 20 0 10 GND GND CLK 12 8 9 13 11 10 10 10 R13RD3 R12RD4 R10RD6 10 U15 6B595 R11RD5 5 6 7 8 9 10 11 12 C0G C1G C2G C3G C4G C5G C6G C7G C0R C1R C2R C3R C4R C5R C6R C7R 18 VCC 2 19 OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 20 19 18 17 16 15 14 13 CR0 CR1 CR2 CR3 CR4 CR5 CR6 CR7 4 5 6 7 14 15 16 17 CR0 CR1 CR2 CR3 CR4 CR5 CR6 CR7 R0 R1 R2 R3 R4 R5 R6 R7 10 R14RD2 24 23 22 21 4 3 2 1 10 R15RD1 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 10 R16RD0 STROBE SER OUT CLR VDD GND OE 0 U1 MATRIXLED 8x8 +12V Q8 VCC Sơ đồ ngu 0 C1 104 A1015 Q7 3 SER IN NC NC 1 20 A1015 0 GND GND CLK 12 8 9 13 11 10 Q6 Q5 R0 R1 R2 R3 R4 R5 R6 R7 18 n ý: A1015 A1015 Q4 24 23 22 21 4 3 2 1 U2 VCC 2 19 U16 6B595 5 6 7 8 9 10 11 12 C0G C1G C2G C3G C4G C5G C6G C7G STROBE SER OUT CLR VDD GND OE C0R C1R C2R C3R C4R C5R C6R C7R OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 20 19 18 17 16 15 14 13 CR8 CR9 CR10 CR11 CR12 CR13 CR14 CR15 4 5 6 7 14 15 16 17 CR8 CR9 CR10 CR11 CR12 CR13 CR14 CR15 A1015 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 Q3 MATRIXLED 8x8 A1015 0 Q2 VCC 0 C2 104 A1015 3 SER IN NC NC GND GND CLK 1 20 Q1 A1015 R8 R7 R6 R5 0 10 11 13 12 U17 6B595 GVHD: NGUYỄN MINH NGỌC MATRIXLED 8x8 Hình 3.

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 Hiển thị chuỗi kí tự đã mặc định XIN NHAP CHU S Ngắt truyền dữ liệu từ PC Đ 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 -50- .các biến.Lưu đồ giải thuật C HI-TECH  Chương trình chính: BẮT ĐẦU Khai báo các tiền xử lí. HI HẦN Ề 1.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 II.

GVHD: NGUYỄN MINH NGỌC  Chương trình con: NHẬP CHỮ ĐỒ ÁN 1 BẮT ĐẦU Kiểm tra chuỗi kí tự với kích thước mảng Chuyển phần dư sang mảng 2 >80 <=80 Chứa hết vào mảng 1 KẾT THÚC Ngắt truyền nhận và má hóa dữ liệu BẮT ĐẦU Nhận dữ liệu từ PC và chuyển vào biến data Kiểm tra data nhận được S 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 Hiện thị ra led ma trận KẾT THÚC -51- .

Tạo xung dịch tín hiệu quét cột. OE = 0 Khởi động SDA = 1 Tạo xung dịch dữ liệu quét cột Xuất mã hiển thị ra 8 hàng Tạo xung trễ 0. SCL = 0. SDA = 0. STROBE = 0 Khởi động OE = 1.3ms Chống lem hiển thị Kiểm tra data nhận được <64 >=64 KẾT THÚC -52- . Cho phép xuất tín hiệu quét cột. Tạo xung chốt tín hiệu quét cột.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 QUÉT LED : BẮT ĐẦU Định nghĩa các hàm: Tạo tin hieu quét cột.

Kich muc = 0).0X82.0X00.0X82.h> #include "uart.0X92.0X14.MACH QUANG BAO GIAO TIEP PC // GVHD: NGUYEN MINH NGOC // SVTH: .0X000 //Chu H .NGUYEN THE VINH . #define _XTAL_FREQ 4000000 // Dinh nghia cac thong so.0X82.0x0FE.0X00. #define SCL RC1 // Ngo ra xung clock (Tin hieu quet cot Kich muc = 0/1).0X00.0X92.h> #include <stdio.0X82.0X44.0X000 //Chu C .0x7C.0x82. #define CLEAR RC3 // Ngo ra dieu khien bo quet cot (Xoa tin hieu quet .0X00.0x0F8.h> #include <math.0X000 //Chu E .0X10.09087251 // //============================================================ #include <htc.0x82.0x7C.h" __CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS).0X74.0X7C.0X000 //Chu J -53- .0X12.0X92.0X6C.0X02.0X92. //============================================================ // BANG DU LIEU CHUA MA KI TU HIEN THI //============================================================ // MA KI TU const unsigned char code[]= { 0X00.0X82.0X10.0X82.0X0F8.0X02.0X02.Chương trình vi xử lí: //============================================================ // // TRUONG DAI HOC CONG NGHIEP TP HO CHI MINH // KHOA DIEN TU // DO AN 1 .Kich muc = 0). #define SDA RC0 // Ngo ra du lieu (Tin hieu quet cot).0X82.0x0FE.0X82.09212861 // .0X92.0X0FE.0X000 //Chu G .0x0FE.0X10.0X000 //Chu I . #define OE RC4 // Ngo ra dieu khien bo quet cot (Xuat tin hieu quet .0X82.0X92.0X000 //Chu D .0X12. #define STROBE RC2 // Ngo ra dieu khien bo quet cot (Chot tin hieu quet .0X92.0X82.Kich muc = 0/1).0X14.0X00 //Chu B .0x0FE.0X82.0X12.0X00 //Chu A .0X92.0X0FE.0X00 //Khoang trang .0X7E.LE THANH XUAN .0X000 //Chu F .0x0FE.0X92.0X12.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 2.

0X92.0X000 .0X0A2.0X92.0X48.0X80.0X7C.0X48.0X08.0x7E.0X8A.0X000 .0x7A.0x7C.0X000 .0X08.0X0F0.0X80.0X80.0X000 .0X000 .0X0C2.0X92.0X000 .0X00.0X32.0X0F0.0x0C2.0X0A2.0X02.0x00.0x4C.0X000 .0X6C.0x7E.0x70.0X8C.0X00.0x00.0X92.0x0FE.0X000 .0X22.0X7E.0X82.0X80.0X0A8.0X44.0X800 .0X0F8.0x0C4.GVHD: NGUYỄN MINH NGỌC .0x0FC.0X9C.0X000 .0X80.0X80.0X7C.0X0A4.0X88.0X000 .0x0FE.0X92.0X88.0x00.0x02.0X10.0X48.0X000 .0X12.0x3E.0X88.0X90.0X000 .0X88.0X0A4.0X000 .0x0FE.0X92.0X24.0X0A8.0X02.0X000 .0x6C.0x7C.0X52.0X90.0x08.0X80.0X92.0X0E2.0X04.0x000 .0X40.0X000 .0X000 .0X24.0X000 .0X80.0X30.0x4E.0X80.0X92.0x00.0X0A2.0X24.0X08.0X70.0X12.0X7E.0x70.0x4C.0X38.0X24.0X92.0X000 .0X80.0X92.0x70.0X0A8.0X12.0X82.0X88.0x70.0X90.0x18.0X000 .0X08.0X12.0x02.0x0FE.0X0BA.0X82.0X80.0X000 .0X0A2.0X0FE.0X0FE.0X0F0.0X000 .0x7E.0X24.0X000 .0X000 .0X12.0X000 .0x0FE.0x90.0X0FE.0X80.0X88.0X80.0X8A.0X7C.0X000 .0X0C.0X92.0X24.0X72.0X000 .0X08.0X08.0x02.0X60.0X0A4.0X88.0X000 .0X92.0X12.0X0FE.0X86.0X0F8.0X88.0X0A8.0X80.0x88.0X80.0X0FE.0X08.0X42.0X0FE.0x00.0X0F0.0x000 .0X08.0X000 .0X12.0X88.0X92.0x0F8.0X24.0X8A.0X000 .0X000 .0X06.0X000 -54- ĐỒ ÁN 1 //Chu K //Chu L //Chu M //Chu N //Chu O //Chu P //Chu Q //Chu R //Chu S //Chu T //Chu U //Chu V //Chu X //Chu Y //Chu Z //Chu W //So 0 //So 1 //So 2 //So 3 //So 4 //So 5 //So 6 //So 7 //So 8 //So 9 //Chu a //Chu b //Chu c //Chu d //Chu e //Chu f //Chu g //Chu h //Chu i //Chu j //Chu k //Chu l //Chu m //Chu n //Chu o //Chu p //Chu q //Chu r //Chu s //Chu t .0X000 .0x0FE.0x7C.0x80.0x70.0X82.0X80.0X92.0X08.0X0F8.0X40.0x00.0X0A.0X88.0X92.0X08.0X04.0x0FE.0x98.0X000 .0x00.0X02.0X02.0X7C.0X3E.0X18.0X90.0X08.0X92.0x82.0X80.0X000 .0X04.0X88.0x0FE.0X44.0X0A2.0X84.0X000 .0X80.0X40.0X7E.0X8A.0x0F8.0x0F8.0X82.0X64.0X10.0X7C.0X80.0X000 .0X12.0X000 .0X86.0X04.0X000 .0x38.0X88.0x0F8.0X7A.0X02.0x00.0X6C.0X24.0X7C.0X0A8.0X18.0X000 .0x0FE.0X000 .0X000 .0X64.0X000 .0x44.0X82.0x7C.0X20.0X000 .0X04.0X84.0X88.

0x00.0.0x00.0X20.0 x00.0.0X78.0X0A0.0.0. 0x00.0X0A0.0X000 //Chu z .0x00.0x00.0. //============================================================ // Khai bao bien.0X000 //Chu x .0X000 //Chu u .0x00.0x00. -55- .0x00.0.0x00.0X88.0x00.0x00.0.0X0A0.0.0.0.0x00. 0x00.0.demy.0.0x00.0x88.0x00.0.0.10.0.0x00.0x00.0x00.14.0x00.0.0.0.0.0.0x00.0x00.0x00.0.0.0.0x00.0X0C8. //******************************************************************** // MANG DEM CHUA KI TU HIEN THI //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ unsigned char chuoi[]={0.41.0.0x00. unsigned char dem.0. // Khoi tao Port B.0x00.37.0x38.0.0x00.44.45.0x00.0x78.0X78. TRISB = 0X00.0x00.52.0X80.0x00.0x98.0.37.0x00.0X000 //Chu w }.50.0x00.0X38.0X0A8. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ const char bangtra[]=" ABCDEFGHIJKLMNOPQRSTUVXYZW0123456789abcdefghijklmnopqrstuvxyzw" .0X78.0x00.20.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 .0.0X0E0. //============================================================ // <> BO DEM unsigned char a[]={ 0x00.0x00.0.0x00.0.0x00.khoa.45.0X000 //Chu y .0.0X40.0x88. 0.0x00.0.44.0.0X50. // Cau hinh PORTD la ngo ra.0.0X80.0.0.0X50.0x00.0x00.0.0x00.0.0. // Cau hinh PORTB la ngo ra.0.0X98.0X40.0.0.0x00.0X80.0x00.0x00.0x00.0X80. // KHAI BAO KHOI TAO PORT //-----------------------------------------------------------------------------------------------------void init_PORTC(void) { PORTC = 0X00.0x00.0.0.0x00.0x00. 0.0X88.0 x00 }.0 x00.0x00.0x00.0x00.0.0.0x00.0.0.0x00.0X80.0. // Khoi tao Port C.0x00.0.0x00.0.0.0.0. } //-----------------------------------------------------------------------------------------------------void init_PORTB(void) { PORTB = 0X00.0}.13.0.0.0x00.0x78.0.0.0 x00.0.demx.0x00. TRISC = 0b10000000.0.0.0.0x00.0.0x00.0.0.0.0X80.8.0x00.0x00.0X000 //Chu v .

// Tao xung xoa toan bo bang quang bao.i<=47. CLEAR = 1. STROBE = 0. // Chong lem hien thi. SDA = 1. SCL = 0. // ******************************************************** // Bat dau tien hanh hoat dong quet cot. __delay_us(1). CLEAR = 0. // Tao xung chot tin hieu quet cot. CLEAR = 1. __delay_us(100). SCL = 1. // STROBE = 1. __delay_us(1). // SCL = 1 STROBE = 0. SDA = 0. // SDA = 0. // Xuat ma hien thi ra bang quang bao. // Khoi dong SDA = 0. // tao tre 0. SCL = 0. STROBE = 1.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 } //-----------------------------------------------------------------------------------------------------// HAM QUET LED HIEN THI void quetled_righttoleft() { unsigned int i. } } //============================================================ -56- . // Khoi dong OE = 1. // SCL = 1 STROBE = 0. // Tao xung chot tin hieu quet cot. SDA = 0. // Khoi dong STROBE = 0. STROBE = 0. // Khoi dong SCL = 0. // CLEAR = 1.i++) // Thuc hien quet 48 cot. SDA = 1. PORTB = 0x00. SCL = 0. SCL = 0. // Khoi dong CLEAR = 1. { PORTB = a[i].3 ms __delay_us(100). __delay_us(1). SCL = 1. __delay_us(100). STROBE = 1. __delay_us(1). // STROBE = 1. __delay_us(1). OE = 1. //============================================================ for (i=0. //********************************************************* CLEAR = 0. // Tao xung dich tin hieu quet cot. STROBE = 0. OE = 0. SCL = 0. // Tao tin hieu quet cot. __delay_us(1). OE = 0. __delay_us(1). // Cho phep xuat tin hieu quet cot. // Tao xung dich tin hieu quet cot.

x. } demx++. if(x==6) { x=0. while(1) { taoma_rtl(). x++. PEIE = 1.} if(demy>=dem) {khoa=1. unsigned int m.i<=47. demy++. // Cau hinh Port B.n<=chuoi[1].n++) { quetled_righttoleft().i. // INTCON = | GIE | PEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF | GIE = 1. // Cho phep ngat ngoai vi (UART). for(i=0. khoa=0. // Cho phep ngat toan cuc.} } } //============================================================ // Chuong trinh chinh. // Khoi dong UART. if(demx==6) {demx=0. a[i]=code[m]. demy=2.i++) { m=chuoi[y]*6+x.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 void taoma_rtl() { unsigned char y. uart_init(). } } //============================================================ void interrupt isr() -57- . init_PORTC(). dem=24.n. //============================================================ void main (void) { init_PORTB(). } } for(n=0. y++. while (khoa==0) { y=demy. demx=0. x=demx.

demx=0.c. { for(i=0.i<=63. demy=2.i++) { chuoi[i]=0. // Doc du lieu thu duoc tu UART. dem--. { c = uart_getc(). } else { if(c==8 & dem>=1) { chuoi[dem-2]=0.i++) { if(bangtra[i]==c) { chuoi[dem]=i. } dem=0.GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 { unsigned char i.i<=dem. demy=2. demx=0.} else khoa=1. if (c==46) { for(i=0. } } dem++. if(RCIE && RCIF) // Kiem tra cho phep ngat thu cua UART. } else { if(c==1) {khoa=0. } } } } } -58- .

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: -59- .Quá trình thi công mạch đúng theo thiết kế. .GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 III ĐÁNH GIÁ HÍ NGHIỆM . .Yêu cầu của đồ án được hoàn thành đầy đủ.

GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1  Thực tế + Trước khi giao tiếp máy tính + Khi giao tiếp máy tính -60- .

II HƢỚNG PHÁT TRIỂN ĐỀ TÀI: Trong đời thường.  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..2. 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).Thiết kế và thi công mạch hoàn chỉnh theo yêu cầu của đề tài. . . Vì vậy để đáp ứng nhu cầu truyền thông công nghiệp. .Sử dụng thành thạo phần mềm vẽ mạch ORCAD 9. 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). . bạn bè. 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. 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 -61- .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.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. 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ô.. .GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 CHƢƠNG I : I Ả Đ ĐƢỢC: T LU N  Sau thời gian tìm hiểu và thực hiện đề tài.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).

-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). Do đó.com www.TÀI LIỆU THAM KHẢO: -Giáo trình lý thuyết Vi Xử Lý.ant7. -Serial Communication (nguồn Internet).GVHD: NGUYỄN MINH NGỌC ĐỒ ÁN 1 vi sai (vì 2 dây có đặc tính giống nhau. -RS232 . trường ĐH Công Nghiệp TPHCM (BS: Phạm Quang Trí – Phạm Hữu Lộc). 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). trường ĐH Công Nghiệp TPHCM (BS: Phạm Quang Trí – Phạm Hữu Lộc).Communication (nguồn Internet). -Giáo trình thực hành Vi Xử Lý. 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. 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.dientuvietnam.com www. -Trang Web: www. III.alldatasheet.com -62- .