kilo book

180

Upload: phuoc-nguyen

Post on 07-Aug-2015

41 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kilo Book
Page 2: Kilo Book

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

Ngày ………..tháng……….năm 2008

Giáo viên hướng dẫn

Thạc sỹ : LÊ ĐÌNH KHA

Page 3: Kilo Book

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

.....................................................................................

...

Ngày ………..tháng……….năm 2008

Giáo viên phản biện

Thầy : TRƯƠNG QUANG TRUNG

Page 4: Kilo Book

Lời cảm ơn

Sau những năm học tại trường,chúng em đã đượchọc và tiếp thu nhiều kiến thức mới từ sự chỉ bảo tận tìnhcủa Quý Thầy Cô, sự giúp đỡ của bạn bè. Đây là khoảngthời gian đầy ý nghĩa. Đồ án tốt nghiệp ra trường là nềntảng quan trọng và đánh dấu một bước ngoặc mới trongcuộc đời của chúng em.

Chúng em xin gửi lời cảm ơn chân thành đến ThầyLê Đình Kha. Thầy đã hướng dẫn tôi thực hiện đồ án tốtnghiệp và cung cấp cho tôi nhiều kinh nghiệm quý báu.

Chúng em xin chân thành cảm ơn Quý Thầy côkhoa Điện Tử - Tin Học và các Cán bộ Công nhân viênTrường Cao Đẳng Kỹ Thuật Cao Thắng, đã tạo điều kiệnthuận lợi để tôi có thể hoàn thành tốt đồ án tốt nghiệpnày..

Sinh viên thực hiện

Hà Xuân Bình

Vũ Thanh Hưng

Page 5: Kilo Book

LỜI NÓI ĐẦU

Ngày nay Khoa học – Kỹ thuật phát triển mạnh mẽ,cùng với sự phát triển không ngừng của các ngành kỹ thuậtnói chung và kỹ thuật điện tử nói riêng. Chúng đã đi sâuvào mọi mặc đời sống hàng ngày của người dân. Đặc biệtsử dụng vi điều khiển để điều khiển các thiết bị dân dụng vàcác thiết bị công nghiệp. Nắm được tầm quan trọng đó, nhómchúng em làm đề tài: KIT THỰC TẬP PIC để cho các bạn sinhviên có công cụ học tập và thực hành môn vi điều khiển Pic.

Những kiến thức và năng lực đạt được trong quá trìnhhọc tập tại trường sẽ được đánh giá qua đợt bảo vệ đồ án tốtnghiệp. Vì chúng em cố gắng tận dụng tất cả những kiến thứcđã học ở trường cùng với sự tìm tòi nghiên cứu, để có thể hoànthành tốt đồ án tốt nghiệp này. Những kết quả những sảnphẩm đạt được trong ngày hôm nay tuy không lớn lao nhưngnó là thành quả của ba năm học tập tại trường. Là thành côngđầu tiên của chúng em trước khi ra trường.

Do khoảng thời gian và kiến thức còn hạn hẹp, mặc dùchúng em cố gắng hoàn thành đồ án tốt nghiệp này đúng thờihạn. Nên không tránh khỏi những thiếu xót mong Quý thầy côthông cảm. Chúng em mong nhận được những ý kiến đóng góptận tình của quý thầy cô và các bạn. Cuối cùng em xin chânthành cảm ơn quý thầy cô và các bạn .

Page 6: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

MỤC LỤC

CHƯƠNG 0 DẪN NHẬP…………………………………………………………11

PHẦN I KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F877A .................. 12

CHƯƠNG I CẤU TRÚC PHẦN CỨNG CỦA 16F877A.................................... 13 1.1. Sơ lượt về vi điều khiển PIC 16F877A .................................................................... 13 1.2. Sơ lượt về các chân của PIC 16F877A..................................................................... 13 1.3.Một số điểm đặc biệt của CPU ............................................................................ 18 1.3.1. Dao động ..................................................................................................... 18 1.3.2. Reset ............................................................................................................ 19 1.3.3.MCLR(Master clear) .................................................................................... 19 1.3.4. Interrupts ..................................................................................................... 20 1.3.5. Chế độ nguồn thấp Sleep(Power down Mode) ........................................... 20 1.3.6. Bộ định thời giám sát (Watch Dog Timer – WDT) .................................... 21 1.4.Tổ chức bộ nhớ ............................................................................................................. 22 1.4.1. Bộ nhớ chương trình ................................................................................... 22 1.4.2. Bộ nhớ dữ liệu ............................................................................................. 23 1.4.2.2. Vùng thanh ghi chức năng đặt biệt....................................................... 24 1.4.3. Các thanh ghi chức năng đặc biệt................................................................ 27 1.4.3.1.Thanh ghi trạng thái(Status register): .................................................... 27 1.4.3.2. Thanh ghi tùy chọn (Option Reg_Register) ......................................... 28 1.4.3.3. Thanh ghi điều khiển ngắt INTCON .................................................... 29 1.4.3.4. Thanh ghi cho phép ngắt ngoại vi 1 ..................................................... 30 1.4.3.5. Thanh ghi cờ của các ngắt ngoại vi 1 ................................................... 31 1.4.3.6. Thanh ghi cho phép ngắt ngoại vi 2 ..................................................... 32 1.4.3.7. Thanh ghi cờ của các ngắt ngoại vi 2 ................................................... 33 1.4.4. PCL và PCLATH ........................................................................................ 33 1.4.5. Ngăn xếp Stack............................................................................................ 34 1.4.6. Định địa chỉ trực tiếp và địa chỉ gián tiếp, thanh ghi INF và FSR.............. 341.5. I/O port ............................................................................................................................ 35 1.5.1. Port B và thanh ghi TRIS B ........................................................................ 35 1.5.2. Port B và thanh ghi TRIS B ........................................................................ 37 1.5.3. Port C và thanh ghi TRIS C ........................................................................ 38 1.5.4. Port D và thanh ghi TRIS D ........................................................................ 40 1.5.5. Port E và thanh ghi TRIS E......................................................................... 40

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 4

Page 7: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG II BỘ ĐỊNH THỜI................................................................................ 43

2.1. Bộ định thời timer 0 .................................................................................................... 43 2.1.1. Giới thiệu..................................................................................................... 43 2.1.2. Hoạt động của bộ định thời ......................................................................... 43 2.1.3. Ngắt Timer 0 ............................................................................................... 43 2.1.4. Sử dụng Timer 0 với nguồn xung clock ngoài............................................ 44 2.1.5. Bộ tiền định tỉ lệ 8 bit của Timer 0 ............................................................. 442.2. Bộ định thời Timer 1................................................................................................... 44 2.2.1. Giới thiệu..................................................................................................... 44 2.2.2. Thanh ghi điều khiển Timer 1 ..................................................................... 45 2.2.3. Chế độ định thời trong hoạt động của Timer 1 ........................................... 45 2.2.4. Chế độ đếm ................................................................................................. 45 2.2.5. Giao động riêng của Timer 1....................................................................... 46 2.2.6. Ngắt Timer 1 ............................................................................................... 462.3. Bộ định thời Timer 2................................................................................................... 46 2.3.1. Giới thiệu .................................................................................................... 46 2.3.2. Thanh ghi điều khiển T2CON..................................................................... 47 2.3.3. Xóa các bộ tỉ lệ............................................................................................ 47 2.3.4. Nguồn xung clock cho Timer 2................................................................... 47 2.3.5. Thanh ghi TMR2 và PR2 ............................................................................ 47 2.3.6. Tín hiệu báo trạng thái cân bằng ................................................................. 47 2.3.7. Chế độ ngủ .................................................................................................. 48

CHƯƠNG III MODULE CCP ................................................................................. 49

3.1. Giới thiệu...................................................................................................................... 493.2. Thanh ghi điều khiển module CCP ........................................................................... 493.3. Chế độ Capture ............................................................................................................ 50 3.3.1. Bộ định tỉ lệ của CCP.................................................................................. 503.4. Chế độ Compare .......................................................................................................... 513.5. Chế độ điều biến xung PWM..................................................................................... 51 3.5.1. Chu kỳ PWM............................................................................................... 51 3.5.2.Chu kỳ nhiệm vụ của PWM ......................................................................... 52 3.5.3. Cài đặt hoạt động cho PWM ....................................................................... 52 3.5.4. Module MSSP ............................................................................................. 54

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 5

Page 8: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG IV BỘ BIẾN ĐỔI ADC 10 BIT............................................................. 55

4.1. Giới thiệu module ADC 10 bit .................................................................................. 554.2. Các thanh ghi điều khiển ............................................................................................ 554.3. Hoạt động của Module ADC ..................................................................................... 574.4.Thời gian lấy mẫu......................................................................................................... 584.5. Lựa chọn xung clock cho biến đổi ADC.................................................................. 584.6. Cấu hình các chân Analog.......................................................................................... 594.7. Chuyển đổi ADC ......................................................................................................... 594.8. Hoạt động của module ADC trong chế độ ngủ ....................................................... 604.9. Ảnh hưởng của Reset.................................................................................................. 60

CHƯƠNG V ĐIỆN THẾ THAM CHIẾU VÀ CÁC BỘ SO SÁNH ĐIỆN ......... 61

5.1. Module Comparator .................................................................................................... 61 5.1.1. Giới thiệu về module comparator................................................................ 61 5.1.2. Cài đặt chế độ cho bộ so sánh ..................................................................... 61 5.1.3. Nguồn tham chiếu của bộ so sánh............................................................... 63 5.1.3.1. Tín hiệu điện áp tham chiếu ngoại ....................................................... 63 5.1.3.2. Tín hiệu điện áp tham chiếu nội ........................................................... 63 5.1.4. Thời gian đáp ứng ...................................................................................... 63 5.1.5. Tín hiệu ngõ ra của bộ so sánh.................................................................... 63 5.1.6. Ngắt của các bộ so sánh .............................................................................. 64 5.1.7. Hoạt động của các bộ so sánh trong chế độ ngủ ......................................... 64 5.1.8. Ảnh hưởng của Reset................................................................................... 645.2. Module điện áp tham chiếu........................................................................................ 64 5.2.1. Giới thiệu module điện áp tham chiếu ........................................................ 64 5.2.2. Thanh ghi điều khiển CVRCON ................................................................. 65 5.2.3. Độ chính xác của điện áp tham chiếu ......................................................... 66 5.2.4. Hoạt động của module VREF trong chế độ ngủ ......................................... 66 5.2.5. Trạng thái của module khi Reset................................................................. 66 5.2.6. Sử dụng module với các mạch ngoài .......................................................... 66

PHẦN II CÁC THÀNH PHẦN CỦA KIT THỰC TÂPPIC 16F877A......................................................................................................... 67

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 6

Page 9: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG I HIỂN THỊ LED ĐƠN....................................................................... 68

1.1. Giới thiệu chung ......................................................................................................... 681.2. Mạch nguyên lý ........................................................................................................... 69

CHƯƠNG II HIỂN THỊ LED 7 ĐOẠN................................................................. 70

2.1. Các khái niệm cơ bản ................................................................................................. 702.2. Kết nối với vi điều khiển ............................................................................................ 712.3. Giao tiếp vi điều khiển với nhiều led 7 đoạn ........................................................... 722.4. Lưu đồ giải thuật ......................................................................................................... 742.5.Mạch nguyên lý ............................................................................................................ 75

CHƯƠNG III ĐÈN GIAO THÔNG ........................................................................ 76

3.1. Giới thiệu ..................................................................................................................... 763.2. Sơ đồ nguyên lý ........................................................................................................... 773.3. Lưu đồ giải thuật ......................................................................................................... 78

CHƯƠNG IV LED MA TRẬN ................................................................................ 79

4.1. Hiện thị led ma trận..................................................................................................... 79 4.1.1. Giới thiệu..................................................................................................... 79 5.1.2. Led ma trận 8x8........................................................................................... 794.2. Phương pháp hiển thị bằng IC chốt........................................................................... 80 4.2.1. Chốt hàng .................................................................................................... 81 4.2.2. Chốt cột ....................................................................................................... 814.3. Phương pháp dùng thanh ghi dịch............................................................................. 82 4.3.1. Quét hàng .................................................................................................... 82 4.3.1.1. Giới thiệu chung về phương pháp quét hàng..................................... 82 4.3.1.2. Quá trình thực hiện quét hàng ........................................................... 83 4.3.1.3. Ví dụ .................................................................................................. 83 4.3.2. Quét cột ....................................................................................................... 84 4.3.2.1. Giới thiệu chung về phương pháp quét cột........................................ 84 4.3.2.2. Quá trình thực hiện quét cột .............................................................. 83 4.3.2.3. Ví dụ ........................................................................................................... 844.4. Mạch nguyên lý ........................................................................................................... 86

CHƯƠNG V LCD .................................................................................................... 87

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 7

Page 10: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

5.1. Giới thiệu chung về LCD .......................................................................................... 87 5.1.1. Các thanh ghi............................................................................................... 89 5.1.2. Cờ báo bận BF............................................................................................. 90 5.1.3. Bộ đếm địa chỉ AC ...................................................................................... 90 5.1.4. Vùng RAM hiển thị DDRAM..................................................................... 90 5.1.5. Vùng ROM chứa ký tự CGROM ................................................................ 91 5.1.6. Vùng RAM chứa ký tự đồ họa CGRAM .................................................... 925.2. Tập lệnh của LCD ....................................................................................................... 945.3. Khởi tạo LCD .............................................................................................................. 97 5.3.1. Mạch khởi tạo bên trong chip HD44780..................................................... 97 5.3.2. Khởi tạo bằng lệnh ...................................................................................... 975.4. Lưu đồ giải thuật ......................................................................................................... 995.5. Mạch nguyên lý ......................................................................................................... 100

CHƯƠNG VI ADC.................................................................................................. 101

6.1. Giới thiệu về module ADC ...................................................................................... 101 6.1.1. Cơ bản về ADC ........................................................................................ 101 6.1.2. ADC trong PIC 16F877A.......................................................................... 1026.2. Sơ đồ nguyên lý ......................................................................................................... 103

CHƯƠNG VII BÀN PHÍM GIAO TIẾP LCD.................................................... 104

7.1. Keypad và nguyên lý hoạt động ............................................................................. 1047.2. Keypad giao tiếp với LCD ....................................................................................... 1047.3. Sơ đồ giải thuật ......................................................................................................... 106CHƯƠNG VIII GIAO TIẾP I2C........................................................................ 107

8.1. Giới thiệu chung về I2C .......................................................................................... 107 8.1.1. Đặc điểm giao tiếp I2C.............................................................................. 107 8.1.2. START and STOP conditions................................................................... 109 8.1.3. Định dạng dữ liệu truyền........................................................................... 109 8.1.4. Định dạng địa chỉ thiết bị .......................................................................... 111 8.1.5. Truyền dữ liệu trên bus I2C ...................................................................... 112 8.1.6. Chế độ Multi-Master ................................................................................. 1138.2. Module I2C Trong Vi Điều Khiển PIC ....................................................................... 113 8.2.1. Đặc điểm phần cứng của PIC16F877A.................................................... 113 8.2.2. Cách thức sử dụng Module I2C trong CCS .............................................. 114SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 8

Page 11: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

8.2.3. EEPROM 24C04 ....................................................................................... 115 8.2.3.1. Hình dạng......................................................................................... 115 8.2.3.2. Sơ đồ cấu tạo.................................................................................... 115 8.2.3.3. Sơ đồ chân .............................................................................................. 1158.3. Mạch nguyên lý ........................................................................................................ 117CHƯƠNG IX ĐO NHIỆT ĐỘ DÙNG LM35 ...................................................... 118

9.1. Giới thiệu.................................................................................................................... 1189.2. Một số đặc tính cơ bản của LM35........................................................................... 1189.3. Mạch nguyên lý ....................................................................................................... 119

PHẦN III CÁC BÀI TẬP THỰC HÀNH ............................................ 120

BÀI 1 HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN .............................. 121BÀI 2 HIỂN THỊ TRẠNG THÁI CÁC PORT VÀ THAY ĐỔI THỜI GIAN

DELAY……………………………………………………………………………………..123BÀI 3 HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7 ........................... 125BÀI 4 HIỂN THỊ ĐỒNG HỒ TRÊN LED 7 ........................................................ 127BÀI 5 CHƯƠNG TRÌNH ĐÈN GIAO THÔNG.................................................. 129BÀI 6 CHẠY CHỮ LED MA TRẬN.................................................................... 131BÀI 7 HIỂN THỊ KÝ TỰ TRÊN LCD ................................................................. 133BÀI 8 GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD…………………….135BÀI 9 ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN .............................................. 137BÀI 10 ĐO NHIỆT ĐỘ .......................................................................................... 139

PHẦN VI GIẢI CÁC BÀI TẬP THỰC HÀNH ................................ 141

BÀI 1 HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN .............................. 142BÀI 2 HIỂN THỊ TRẠNG THÁI CÁC PORT VÀ THAY ĐỔI THỜI GIAN

DELAY……………………………………………………………………………………..144BÀI 3BÀI 4BÀI 5BÀI 6BÀI 7BÀI 8BÀI 9

HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7 ........................... 146HIỂN THỊ ĐỒNG HỒ TRÊN LED 7 ………………………………… ..149CHƯƠNG TRÌNH ĐÈN GIAO THÔNG.................................................. 151CHẠY CHỮ LED MA TRẬN.................................................................... 153 HIỂN THỊ KÝ TỰ TRÊN LCD ................................................................ 156GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD…………………….161ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN .............................................. 165

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 9

Page 12: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 10 ĐO NHIỆT ĐỘ .......................................................................................... 166

PHẦN VI PHỤ LỤC ............................................................ 170

Phụ lục 1 : 16F877A……….................................................................................. 171Phụ lục 2 : DEFS_16F877A………. .................................................................... 177

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 10

Page 13: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Chương 0 : DẪN NHẬP

I. Đặt vấn đề: Ngày nay với sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ thống điềukhiển dần được tự động hóa.Với các kỹ thuật tiên tiến như vi xử lý, vi mạch số…đượcứng dụng vào lãnh vực điều khiển, thì các hệ thống điều khiển cơ khí thô sơ, với tốc độxử lý chậm chạm ít chính xác được thay thế bằng các hệ thống điều khiển tự động vớicác lệnh chương trình đã được thiết lập trước. Để có thể học tốt môn vi điều khiển chúng ta phải có thiết bị học tập một trongnhững thiết bị đó là kit thực tập, và được sự đồng ý của khoa Điện Tử - Tin Học TrườngCao Đẳng Kỹ Thuật Cao Thắng. Nhóm chúng em quyết định làm đề tài tốt nghiệp: “KitThực Tập Vi Điều Khiển Pic”.II. Giới hạn đề tài: Với thời gian gần năm tuần thực hiện đề tài cũng như trình độ chuyên môn có hạn,chúng em đã cố gắng hết sức để hoàn thành đồ án này nhưng chỉ giải quyết được nhữngvấn đề sau: Led đơn. Hiển thị Led 7 đoạn. Đèn giao thông . Chạy chữ led ma trận. Hiển thị LCD. ADC Giao tiếp bàn phím. Đo nhiệt độ dùng LM35.III. Mục đích nghiên cứu : Mục đích trước hết khi thực hiện đề tài này là để hoàn tất chương trình môn học đểđủ điều kiện ra trường. Cụ thể khi nghiên cứu đề tài là chúng em muốn phát huy nhữngthành quả ứng dụng của vi điều khiển để tạo ra những sản phẩm cho các bạn sinh viênkhóa sau. Không những thế nó còn là tập tài liệu cho các bạn sinh viên tham khảo. Ngoài ra quá trình thực hiện đề tài là một cơ hội để chúng em tự kiểm tra lại nhữngkiến thức đã học ở trường. Đồng thời phát huy tính sáng tạo, khả năng giải quyết một vấnđề theo nhu cầu đặt ra. Và đây cũng là dịp để chúng em khẳng định mình trước khi ratrường để tham gia vào các hoạt động sản xuất của xã hội.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 11

Page 14: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

PHẦN I

KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F877A

CHƯƠNG I : CẤU TRÚC PHẦN CỨNG CỦA PIC16F877A

CHƯƠNG II : BỘ ĐỊNH THỜI

CHƯƠNG III : MODULE CCP (Capture – Compare – PWM)

CHƯƠNG IV : BỘ BIẾN ĐỔI ADC 10 BIT

CHƯƠNG V : ĐIỆN THẾ THAM CHIẾU VÀ CÁC BỘ SO SÁNHĐIỆN

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 12

Page 15: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG I : CẤU TRÚC PHẦN CỨNG CỦA PIC16F877A

1.1 Sơ lược về vi điều khiển PIC16F877A: PIC 16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng, 40 chân,bộ nhớ đủ cho hầu hết các ứng dụng thông thường). Cấu trúc tổng quát của PIC16F877A như sau: - 8 K Flash ROM. - 368 Bytes RAM. - 256 Bytes EEPROM. - 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập. - 2 bộ định thời 8 bits (Timer 0 và Timer 2). - Một bộ định thời 16 bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm năng lượng (SLEEP MODE) với nguồn xung Clock ngoài. - 2 bô CCP( Capture / Compare/ PWM). - 1 bộ biến đổi AD 10 bits, 8 ngõ vào. - 2 bộ so sánh tương tự (Compartor). - 1 bộ định thời giám sát (WatchDog Timer). - Một cổng song song 8 bits với các tín hiệu điều khiển. - Một cổng nối tiếp. - 15 nguồn ngắt. - Có chế độ tiết kiệm năng lượng. - Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Programming) - Được chế tạo bằng công nghệ CMOS - 35 tập lệnh có độ dài 14 bits. - Tần số hoạt động tối đa 20MHz.1.2 Sơ lược về các chân của PIC16F877A:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 13

Page 16: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 14

Page 17: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 15

Page 18: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chức năng khácnhau.Trong đó có một số chân đa công dụng: mỗi chân có thể hoạt động như một đườngxuất nhập hoặc là một chân chức năng đặc biệt dùng để giao tiếp với các thiết bị ngoại vi.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 16

Page 19: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Sơ đồ khối PIC16F877A.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 17

Page 20: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.3 Một số điểm đặc biệt của CPU: 1.3.1 Dao động: PIC16F877A có thể hoạt động trong bốn chế độ dao động khác nhau:

Trong các chế độ LP, XT và HS chúng tasử dụng thạch anh dao động nối vào các chânOSC1 và OSC2 để tạo dao động.

Việc lựa chọn tụ trong dao động thạch anh dựa vào bảng sau:

Lưu ý: Tụ có giá trị lớn sẽ tăng tính ổnđịnh của dao động nhưng cũng làm tăngthời gian khởi động.

Chế độ dao động RC được sử dụngnhư một giải pháp tiết kiệm trong cácứng dụng không cần sự chính xác về thờigian.

* Cách tính chu kì máy:Ví dụ ta sử dụng thạch anh 10Mhz. Khi đó:Tần số dao động của thạch anh là Fosc = 10Mhz→ Chu kỳ dao động của thạch anh là Tosc = 1/Tosc= 1/10*106 (s)

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 18

Page 21: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Chu kỳ máy:T_instruction = 4*Tosc = 4/10*106(s) = 0.4 µs = 400 ns 1.3.2 Reset: PIC16F877A có thể bị reset bởi nhiều nguyên nhân khác nhau như:

1.3.3 MCLR : PIC16F877A có một bộ lọc nhiễu ởphần MCLR . Bộ lọc nhiễu này sẽ phát hiệnvà bỏ qua các tín hiệu nhiễu. Ngõ vào MCLR trên chân 4 củaPIC16F877A. Khi đưa chân này xuốngthấp thì các thanh ghi bên trong VĐK sẽđược tải những giá trị thích hợp để khởiđộng lại hệ thống.(Lưu ý: Reset do WDT không làm chân MCLR xuống mức thấp).

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 19

Page 22: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.3.4 Interrupts: PIC16F877A có nhiều nguồn ngắt khác nhau. Đây là một số ngắt tiêu biểu : - Ngắt ngoài xảy ra trên chân INT. - Ngắt do Timer0. - Ngắt do Timer1. - Ngắt do Timer2. - Ngắt do thay đổi trạng thái trên các chân PortB. - Ngắt so sánh điện thế. - Ngắt do Port song song. - Ngắt USART. - Ngắt nhận dữ liệu. - Ngắt truyền dữ liệu . - Ngắt chuyển đổi ADC. - Ngắt màn hình LCD. - Ngắt hoàn tất ghi EEPROM. - Ngắt module CCP. - Ngắt Module SSP. * Các thanh ghi chức năng ngắt: INTCON, PIE1, PIR1, PIE2, PIR2 (các thanh ghinày sẽ được nghiên cứu ở các phần sau).

1.3.5 Chế độ nguồn thấp Sleep (Power down Mode) : Đây là chế độ hoạt động của VĐK khi lệnh sleep được thực thi. Khi đó nếu đượccho phép hoạt động, bộ đếm của WDT sẽ bị xóa nhưng WDT vẫn tiếp tục hoạt động bitPD (STATUS <3>) được reset về không, bit TO được set, oscillator ngưng hoạt động vàcác PORT giữ nguyên trạng thái như trước khi lệnh sleep được thực thi.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 20

Page 23: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Do khi chế độ sleep dòng cung cấp cho VĐK là rất nhỏ nên ta cần thực hiện cácbước sau trước khi VĐK thực thi lệnh sleep. • Đưa tất cả các chân về trạng thái VDD hoặc VSS.

• Cần đảm bảo rằng không có mạch ngoại vi nào được điều khiển bởi dòng điện của VĐK vì dòng điện nhỏ không đủ khả năng cung cấp cho các mạch ngoại vi hoạt động. • Tạm ngưng hoạt động của khối A/D và không cho phép các xung clock bên ngoài tác dụng vào VĐK. • Để ý chức năng điện trở kéo lên của PORTB. • Pin MCLR phải ở mức logic cao. 1.3.6 Bộ định thời giám sát (Watch Dog Timer -WDT): Giả sử bạn viết một chương trình, bạn mong đợi chương trình này sẽ chạy nếukhông có gì trục trặc xảy ra thì nó sẽ không bao giờ dừng lại, như vậy bạn phải làm mộtvòng lặp để khi chương trình chạy đến điểm cuối thì nó lại quay trở về điểm bắt đầu.Nhưng mà hãy xem một trường hợp: Giả sử chương trình kiểm tra một chân input, nếunó lên mức cao thì con Pic sẽ tiếp tục kiểm tra một chân input thứ hai có lên mức cao haykhông, nếu chân input thứ hai không lên mức cao, con Pic sẽ ngồi đó chờ và nó sẽ chỉthoát ra khỏi chỗ ngồi của nó nếu chân input thứ hai lên mức cao. Bây giờ hãy xem một trường hợp khác, giả sử như bạn viết một chương trình, bạncompiled nó thành công, và ngay cả bạn đã cho chạy mô phỏng từng bước, từng bướcmột trên máy tính, bằng MPLAB chẳng hạn, có vẻ như mọi chuyện đều tốt, bạn đem nạpvào con Pic. Sau một thời gian chạy thử, con Pic thình lình bị kẹt vào nơi nào đó trongchương trình mà không thể thoát ra được trạng thái hiện tại. Điều gì là cần thiết để giảiquyết hai trường hợp trên, reset lại hay vẫn để cho nó bị kẹt không thoát ra được, đó làmục đích của mạch Watchdog. Mạch Watchdog thì không phải là mới mẽ gì, có rất nhiều microprocessors vàmicrocontrollers đã có mạch Watchdog, nhưng mà nó làm việc ra sao ? Bên trong con Pic có một mạch RC, mạch này cung cấp 1 xung Clock độc lập vớibất kỳ xung Clock nào cung cấp cho Pic. Khi Watchdog Timer (viết tắt là WDT) đượccho phép (enabled), nó sẽ đếm bắt đầu từ 00 và tăng lên 1 cho đến FFh, khi nó tăng từFFh đến 00 ( FFh+1) thì con Pic sẽ bị Reset bất kể đang làm gì, chỉ có 1 cách là ngănkhông cho WDT đếm tới 00. Khi con Pic bị kẹt không thể thoát ra khỏi tình trạng hiện tại thì WDT vẫn tiếp tụcđếm mà không bị bất kỳ điều gì ngăn cấm nó đếm tới FF và đến FF+1, vì vậy nó sẽ resetcon Pic làm cho chương trình phải khởi động lại từ đầu. Để sử dụng WDT chúng ta cần làm 3 việc. • Thứ nhất, cần thời gian bao lâu để reset WDT ? • Thứ hai, làm sao xoá WDT ? • Cuối cùng, chúng ta phải nói cho con Pic biết chương trình cho phép WDT hoạt động.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 21

Page 24: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.4 Tổ chức bộ nhớ: PIC16F877A có tất cả 3 khối bộ nhớ riêng biệt bao gồm: Bộ nhớ chương trình, bộnhớ dữ liệu và bộ nhớ EEPROM. 1.4.1 Bộ nhớ chương trình: PIC16F877A có bộ đếm chương trình dài 13 bits có thể định địa chỉ cho khoảngkhông gian nhớ 8K x 14bits. Không gian bộ nhớ này được chia làm 8 trang, có địa chỉ từ0005h đến 1FFFh. Mọi sự truy cập ngoài vùng không gian nhớ này sẽ không có tác dụng. Ngoài ra, bộ nhớ chương trình còn bao gồm một ngăn xếp (Stack) 8 mức. VectorReset được đặt tại địa chỉ 0000h và vector ngắt được đặt tại địa chỉ 0004h.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 22

Page 25: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.4.2 Bộ nhớ dữ liệu:

Bảng đồ cấu trúc bộ nhớ dữ liệu P16F877A

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 23

Page 26: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bộ nhớ dữ liệu bao gồm 4 Bank: Bank 0, Bank1, Bank2 và Bank3. Mỗi bank códung lượng 128 Bytes, bao gồm vùng Ram đa mục đích (GPR) và vùng thanh ghi chứcnăng đặc biệt (SFR). Các Bank này được lựa chọn bằng 2 bit ở thanh ghi STATUS là RP0(Status<5>) vàRP1(Status<6>).

1.4.2.1 Vùng Ram đa mục đích:

Vùng RAM đa mục đích có chiều rộng 8 bit và có thể được truy nhập trực tiếp hoặcgián tiếp thông qua thanh ghi FSR. Vùng RAM đa mục đích được phân phối ở các Banknhư sau: - Bank 0: 96 Bytes từ địa chỉ 20h đến địa chỉ 7Fh. - Bank 1: 80 Bytes từ địa chỉ A0h đến địa chỉ EFh. - Bank 2: 96 Bytes từ địa chỉ 110h đến địa chỉ 16Fh. - Bank 3: 96 Bytes từ địa chỉ 190h đến địa chỉ 1EFh.

1.4.2.2 Vùng thanh ghi chức năng đặc biệt:

Các thanh ghi chức năng đặc biệt được sử dụng bởi bộ xử lý trung tâm CPU hoặccác module ngoại vi để điều khiển hoạt động của VĐK. Các thanh ghi chức năng đặc biệtnày được chia làm 2 loại: loại thứ nhất dùng cho các chức năng của CPU, loại thứ 2 dùngcho các chức năng ngoại vi.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 24

Page 27: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bảng tóm tắt các thanh ghi chức năng đặc biệt:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 25

Page 28: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 26

Page 29: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.4.3 Các thanh ghi chức năng đặc biệt: 1.4.3.1 Thanh ghi trạng thái ( Status Register): Thanh ghi trạng thái chứa các trạng thái số học của bộ ALU, trạng thái Reset và cácbit chọn Bank của bộ nhớ dữ liệu.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 27

Page 30: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho định địa chỉ gián tiếp). 1 = Bank 2, 3 (100h – 1FFh ) 0 = Bank 0, 1 (00h – FFh)

Bit 6 – 5 RP1 – RP0: Bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ trực tiếp). 11 = Bank 3 ( 180h – 1FFh) 10 = Bank 2 (100h – 17Fh) 01 = Bank 1 (80h – FFh) 00 = Bank 0 (00h – 7Fh) Each bank is 128 bytes

Bit 4 TO: Bit báo hiệu hoạt động của WDT. 1: Lệnh xóa WDT hoặc Sleep xảy ra. 0: WDT hoạt động.

Bit 3 PD: Bit báo công suất thấp ( Power down bit). 1: Sau khi nguồn tăng hoặc có lệnh xóa WDT. 0: Thực thi lệnh Sleep.

Bit 2 Z: bit Zero 1: Khi kết quả của một phép toán bằng 0. 0: Khi kết quả của một phép toán khác 0.

Bit 1 DC: Digit Carry 1: Có một số nhớ được sinh ra bởi phép cộng hoặc phép trừ 4 bit thấp. 0: Không có số nhớ sinh ra.

Bit 0 C: cờ nhớ (Carry Flag) 1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ. 0: Không có số nhớ sinh ra. 1.4.3.2 Thanh ghi tùy chọn (Option _Reg Register): Thanh ghi tùy chọn chứa các bit điều khiển để cấu hình cho các chứa năng như:ngắt ngoài, Timer 0 chức năng kéo lên Vdd của các chân Port B, và thời gian chờ củaWDT

Bit 7 RBPU : Bit cho phép PORTB được kéo lên nguồn.1: Không cho phép PORTB kéo lên nguồn.0: Cho phép PORTB kéo lên nguồn.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 28

Page 31: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bit 6 INTEDG: Bit lựa chọn cạnh tác động ngắt (INTERRUPT EDGE) 1: Ngắt sẽ được tác động bởi cạnh lên của chân RB0/INT 0: Ngắt sẽ được tác động bởi cạnh xuống của chân RB0/INT

Bit 5 T0CS: Bit lựa chọn nguồn xung Clock cho Timer 0 1: Xung Clock cung cấp bởi nguồn ngoài qua chân RA4/T0CKI 0: Xung Clock cung cấp bởi nguồn dao động nội.

Bit 4 T0SE: Bit lựa chọn cạnh nào của xung clock tác động lên timer 0 1: Cạnh xuống 0: Cạnh lên

Bit 3 PSA: Bit quyết định tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0 hay WDT 1: Tốc độ đếm PS2:PS0 sẽ tác động lên WDT 0: Tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0

Bit 2-0 PS2:PS0: Dùng để lựa chọn tốc độ đếm của timer hay WDT

Thời gian tràn WDT

18 ms36ms72ms144ms288ms576ms1.1s2.2s

1.4.3.3 Thanh ghi điều khiển ngắt INTCON (Interrupt Control Register):

Bit 7 GIE: Bit cho phép ngắt toàn cục 1: Cho phép ngắt toàn cục 0: Không cho phép ngắt

Bit 6 PEIE: Bit cho phép ngắt khi ghi vào EEPROM hoàn tất. 1: Cho phép ngắt ghi vào EEPROM hoạt động 0: Không cho phép ngắt ghi vào EEPROM hoạt động

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 29

Page 32: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bit 5 TMR0IE: Bit cho phép ngắt khi timer 0 tràn 1: Cho phép ngắt khi timer 0 tràn 0: Không cho phép ngắt khi timer 0 tràn

Bit 4 INTE: Bit cho phép ngắt ngoại vi trên chân RB0/INT 1: Cho phép ngắt ngoại vi 0: Không cho phép ngắt ngoại vi

Bit 3 RBIE: Cho phép ngắt khi trạng thái PORTB thay đổi 1: Cho phép 0: Không cho phép

Bit 2 TMR0IF: Cờ báo ngắt Timer 0 1: Timer 0 tràn 0: Timer 0 chưa tràn

Bit 1 INTF: Cờ báo ngắt ngoài RB0/INT 1: Có ngắt 0: Không xảy ra ngắt.

Bit 0 RBIF: Cờ báo ngắt khi có thay đổi trạng thái PORTB 1: Có thay đổi 0: Không có thay đổi xảy ra trên PORTB

1.4.3.4 Thanh ghi cho phép ngắt ngoại vi 1(PIE1 Register):

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngọai vi nàoxảy ra.Bit 7 PSPIE: Bit cho phép ngắt đọc/ ghi Port song song 1: Cho phép 0: Không cho phép

Bit 6 ADIE: Bit cho phép ngắt chuyển đổi A/D 1: Cho phép 0: Không cho phép

Bit 5 RCIE: Bit cho phép ngắt nhận USART 1: Cho phép 0: Không cho phép

Bit 4 TXIE: Bit cho phép ngắt truyền USART 1: Cho phép

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 30

Page 33: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

0: Không cho phép

Bit 3 SSPIE: Bit cho phép ngắt Port nối tiếp đồng bộ 1: Cho phép 0: Không cho phép

Bit 2 CCP1IE: Bit cho phép ngắt module CCP1 1: Cho phép ngắt 0: Không cho phép

Bit 1 TMR2IE: Bit cho phép ngắt xảy ra khi TMR2 bằng thanh ghi PR2 1: Cho phép 0: Không cho phép

Bit 0 TMR1IE: Bit cho phép ngắt tràn TMR1 1: Cho phép 0: Không cho phép

1.4.3.5 Thanh ghi cờ của các ngắt ngoại vi 1:

Bit 7 PSPIF: Cờ ngắt đọc/ ghi của Port song song 1: Một hoạt động đọc/ghi đã diễn ra (phải xóa bằng phần mềm) 0: Không có hoạt động đọc/ghi.

Bit 6 ADIF: Cờ báo ngắt chuyển đổi A/D 1: Một quá trình chuyển đổi A/D đã hoàn thành 0: Chuyển đổi A/D chưa hoàn tất

Bit 5 RCIF: Cờ báo ngắt nhận USART 1: Buffer nhận USART đầy 0: Buffer nhận USART trống.

Bit 4 TXIF: Cờ báo ngắt phát USART 1: Buffer truyền USART trống 0: Buffer truyền USART đầy

Bit 3 SSPIF: Cờ báo ngắt port nối tiếp đồng bộ (ngắt SSP) 1: Ngắt SSP xảy ra và phải được xóa bằng phần mềm trước khi trở lại chương trình chính từ chương trình phục vụ ngắt. 0: Không có ngắt xảy ra

Bit 2 CCP1IF: Cờ báo ngắt CCP1

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 31

Page 34: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Chế độ Capture (Bắt giữ): 1: Một Capture thanh ghi TMR1 xảy ra( phải được xóa bằng phần mềm) 0: Không xảy ra Capture thanh ghi TMR1Chế độ Compare ( So sánh): 1: Khi các giá trị so sánh trong thanh ghi TMR1 được thỏa ( phải được xóa bằng phần mềm) 0: Khi các giá trị so sánh trong thanh ghi TMR1 không được thỏaChế độ PWM: Không sử dụng trong chế độ này

Bit 1 TMR2IF: Cờ báo ngắt xảy ra khi giá trị trong thanh ghi TMR2 bằng trong thanh ghi PR2 1: Giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải được xóa bằng phần mềm) 0: Giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2

Bit 0 TMR1IF: Cờ báo tràn thanh ghi TMR1 1: Thanh ghi TMR1 tràn (phải được xóa bắng phần mềm) 0: Thanh ghi TMR1 chưa tràn

1.4.3.6 Thanh ghi cho phép ngắt ngoại vi 2:

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngọai vi nàoxảy ra.

Bit 7,5,2,1 Unimplemented : read as ‘0’

Bit 6 CMIE: Bit cho phép ngắt do bộ so sánh điện thế 1: Cho phép 0: Không cho phép

Bit 4 EEIE: Bit cho phép ngắt do ghi EEPROM 1: Cho phép 0: Không cho phép

Bit 3 BCLIE: Bit cho phép ngắt do xung đột bus 1: Cho phép 0: Không cho phép

Bit 0 CCP2IE: Cho phép ngắt module CCP2 1: Cho phép 0: Không cho phép

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 32

Page 35: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.4.3.7 Thanh ghi cờ của các ngắt ngoại vi 2:

Bit 7,5,2,1 Unimplemented : read as ‘0’

Bit 6 CMIF: Cờ báo ngắt do bộ so sánh 1: Ngõ vào bộ so sánh đã thay đổi (phải được xóa bằng phần mềm) 0: Ngõ vào bộ so sánh không thay đổi.

Bit 4 EEIF: Cờ báo ngắt ghi EEPROM 1: Ghi EEPROM hoàn tất (phải được xóa bằng phần mềm) 0: Ghi EEPROM chưa hoàn tất.

Bit 3 BCLIF: Cờ báo ngắt do xung đột bus 1: Xung đột bus đã xuất hiện trong chế độ SSP 0: Không có xung đột bus xảy ra

Bit 0 CCP2IF: Cờ báo ngắt CPP2 Chế độ Capture (bắt giữ): 1: Một sự bắt giữ thanh ghi TMR1 đã xảy ra (phải được xóa bằng phần mềm) 0: Không xảy ra Capture thanh ghi TMR1 Chế độ Compare (So sánh): 1: Một thuật toán so sánh trong thanh ghi TMR1 xảy ra (phải được xóa bằng phần mềm) 0: Không xảy ra thuật toán so sánh

1.4.4 PCL và PCLATH: Bộ đếm chương trình PC(program counter) có độ dài 13 bit,được dùng để chứa địa chỉ của lệnhđược thực thi kế tiếp. Byte thấp chứatrong thanh ghi PCL có thể đọc/ghimột cách trực tiếp. Các bit cao (bit12:8) chứa trong thanh ghi PCLATH,không thể đọc nhưng có thể ghi giántiếp bằng cách sử dụng thanh ghiPCLATH. Khi có bất kỳ sự Reset nàoxảy ra, các bit cao của bộ đếm chươngtrình PC sẽ bị xóa. Xem thêm hai ví dụsau đây để hiểu thêm về hoạt động củabộ đếm chương trình PC.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 33

Page 36: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.4.5 Ngăn xếp Stack: Stack cho phép 8 lệnh gọi chương trình con và ngắt hoạt động. Stack chứa địa chỉmà chương trình chính sẽ quay về thực hiện từ sau chương trình con hay ngắt. Đối vớiPIC16F877A Stack có độ sâu 8 lớp. Stack không nằm trong cả bộ nhớ chương trình lẫnbộ nhớ dữ liệu. 1.4.6 Địa chỉ trực tiếp và địa chỉ gián tiếp, thanh ghi INF và thanh ghi FSR: Thanh ghi INF không phải là một thanh ghi vật lí. Nó chứa giá trị của thanh ghi cóđịa chỉ nằm ở thanh ghi FSR.

Ví dụ: Thanh ghi tại địa chỉ 10h có giá trị 5Ah Nếu ta đưa 10h vào thanh ghi FSR thì khi đọc thanh ghi INF ta sẽ có giá trị 5Ah.

Data EEPROM và Flash Program Memory: EEPROM là bộ nhớ có khả năng đọc và ghi trong điều kiện làm việc bình thường(khi nguồn Vdd không đổi). Bộ nhớ này không được định địa chỉ trực tiếp trong bản đồbộ nhớ mà được định địa chỉ gián tiếp thông qua các thanh ghi chức năng đặc biệt: - EECON1 - EECON2 - EEDATA - EEDATH - EEADR - EEADRH Trong đó thanh ghi EEDATA lưu giữ giá trị 8 bit sẽ được ghi hoặc đọc. Thanh ghiEEADR lưu giữ địa chỉ mà chúng ta muốn ghi hoặc đọc, thanh ghi này có khả năng địnhđịa chỉ cho 256 byte EEPROM. Thanh ghi EECON1 chứa các bit điều khiển còn thanhghi EECON2 được sử dụng để khởi tạo quá trình ghi/đọc.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 34

Page 37: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.5 I/O ports: 1.5.1 Port A và thanh ghi TRISA: Port A gồm 6 chân từ RA0 đến RA5. Việcghi giá trị vào thanh ghi TRISA sẽ qui định cácchân của Port A là input hay output (nếu là 1 thìlà input, là output nếu là 0). Việc đọc thanh ghiPort A sẽ đọc trạng thái của các chân ở Port A.Việc ghi giá trị vào thanh ghi Port A sẽ thay đổitrạng thái của các chân Port A. Riêng chân RA4 được tích hợp chức nănglà chân cung cấp xung clock ngoài cho Timer 0(RA4/T0CKI). Những chân khác của Port Ađược đa hợp với các chân ngõ vào Analog củaADC và chân ngõ vào điện thế so sánh của bộso sánh Comparator. Hoạt động của những chânnày được quy định bằng những bit tương ứngtrong các thanh ghi ADCCON1 và CMCON1.Khi các chân của Port A được sử dụng làm ngõvào Analog thì các bit trong thanh ghi TRISAphải được set bằng 1.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 35

Page 38: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Chức năng của các chân Port A

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 36

Page 39: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bảng tóm tắt các thanh ghi liên quan đến Port A

1.5.2 Port B và thanh ghi TRISB: Port B gồm 8 chân từ chân RB0-RB7. Việc ghi giá trị vào thanh ghi TRISB sẽ quyđịnh các chân của Port B là input hay output (1: input, 0: output). Việc đọc thanh ghi PortB sẽ đọc trạng thái của các chân ở Port B. Việc ghi giá trị vào thanh ghi Port B sẽ thayđổi trạng thái của các chân Port B. Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger và LowVoltage Programming function: RB3/PGM, RB6/PGC, RB7/PGD. Mỗi chân Port B có một transistor kéo lên Vdd. Chức năng này hoạt động khi bitRBPU (Option <7>) được xóa. Chức năng này sẽ tự động được xóa khi Port B được quyđịnh là input. Bốn chân của Port B từ RB7 đến RB4 có chức năng ngắt khi trạng thái chân Port Bthay đổi (Khi Port B được quy định là output thì chức năng này không hoạt động. Giá trịchân của Port được so sánh với giá trị đã được lưu trước đó, khi có sự sai lệch giữa 2 giátrị này ngắt sẽ xảy ra với cờ ngắt RBIF (INTCON<0) sẽ bật lên. Ngắt có thể làm choVĐK thoát khỏi trạng thái SLEEP. Bất cứ sự truy xuất nào trên PortB sẽ xóa trạng thái sai lệch, kết thúc ngắt và chophép xóa cờ ngắt RBIF.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 37

Page 40: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bảng chức năng PortB :

Bảng tóm tắt các thanh ghi liên quan đến Port B :

1.5.3 Port C và thanh ghi TRISC: Port C gồm 8 chân từ chân RC0-RC7. Việc ghi giá trị vào thanh ghi TRISC sẽ quyđịnh các chân của Port C là input hay output (1: input, 0: output). Việc đọc thanh ghiPort C sẽ đọc trạng thái của các chân ở Port C. Việc ghi giá trị vào thanh ghi Port C sẽthay đổi trạng thái của các chân Port C. Các chân của Port C được đa hợp với các chức năng ngoại vi. Khi các chức năng ngoại vi được cho phép ta cần quan tâm chặt chẽ tới giá trị cácbit của thanh ghi TRISC. Một số chức năng ngoại vi sẽ ghi đè giá trị 0 lên các bit củathanh ghi TRISC và mặc định các chân này là output, ngoài ra một số chức năng ngoại vikhác sẽ tự động mặc định một số chân là ngõ vào. Do đó cần xem xét kĩ các tính năngcủa các hàm ngoại vi để thiết lập giá trị các bit trong thanh ghi TRISC cho thích hợp.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 38

Page 41: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bảng chức năng Port C :

Bảng tóm tắt các thanh ghi liên quan đến Port C :

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 39

Page 42: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1.5.4 Port D và thanh ghi TRISD Port D gồm 8 chân từ chân RD0-RD7. Bên cạnh chức năng là port xuất nhập,Port D còn có thể hoạt động như một cổng song song bằng cách set bit PSPMODE(TRISE<4>), trong chế độ này buffer ngõ vào là TTL. Bảng chức năng Port D :

Bảng tóm tắt các thanh ghi liên quan đến Port D :

1.5.5 Port E và thanh ghi TRISE: Port E có 3 chân RE0 /RD/AN5, RE1/WR /AN6, RE2 /CS/AN7, có thể được cấuhình như các chân xuất nhập thông thường. Các chân của Port E có thể trở thànhcác chân điều khiển cho cổng song song củaVĐK khi bit PSPMODE (TRISE<4>) đượcset bằng 1. Trong chế độ này, người sử dụngphải đảm bảo các chân của PortE là ngõ vào. Ngoài ra các chân Port E còn có thểđược cấu hình như các ngõ vào Analog, tạichế độ này, khi đọc giá trị của các chân nàysẽ cho ta giá trị là 0. Thanh ghi TRISE quy định chức năngxuất nhập của Port E ngay cả khi nó được sửdụng như các ngõ vào Analog. Phải đảm bảocác chân này được quy định là ngõ vào trongchế độ này.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 40

Page 43: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bảng chức năng các chân Port E :

Bảng tóm tắt các thanh ghi liên quan đến Port E :

Thanh ghi TRISE :

Các bit điều khiển trạng thái của Port song song

Bit 7 IBF : Bit trạng thái báo buffer ngõ vào đầy 1 : Một từ (word -16bit) được nhận vào và đang được đọc bởi CPU 0 : Không có từ nào được nhận vào

Bit 6 OBF: Bit trạng thái báo buffer ngõ ra đầy 1 : Buffer ngõ ra vẫn còn giữ một từ đã được đọc trước đó 0 : Buffer ngõ ra đã được đọc.

Bit 5 IBOV: Bit báo trạng thái buffer ngõ vào tràn ( trong chế độ Vi xử lí) 1 : Chu kì ghi mới đã bắt đầu nhưng giá trị cũ vẫn còn trang buffer ( phải được xóa bằng phần mềm) 0 : Không có tràn xảy ra

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 41

Page 44: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Bit 4 PSPMODE: Bit chọn chế độ cổng song song cho Port D 1 : Port D được cấu hình như cổng song song 0 : Port D cấu hình như ngõ xuất nhập thông thường

Bit 3 Không sử dụng, đọc là ‘0’

Các bit xác định xuất nhập của Port E:

Bit 2 Bit 2: Xác định chiều xuất nhập cho chân RE2/CS/AN7 1 : Ngõ vào 0 : Ngõ ra

Bit 1 Bit 1: Xác định chiều xuất nhập cho chân RE1/WR/AN6 1 : Ngõ vào 0 : Ngõ ra

Bit 0 Bit 0: xác định chiều xuất nhập cho chân RE0/RD/AN5 1 : Ngõ vào 0 : Ngõ ra

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 42

Page 45: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG II : BỘ ĐỊNH THỜI

2.1 Bộ định thời Timer 0 : 2.1.1 Giới thiệu : Module Timer 0 là một bộ định thời/ đếm 8 bit, có khả năng đọc và ghi được , cómột bộ tiền định tỉ lệ (Prescaler) 8 bit lập trình được, có bit lựa chọn nguồn xung clocktrong hoặc ngoài, có ngắt khi Timer tràn, có bit lựa chọn cạnh tác động của xung clockngoài.

2.1.2 Hoạt động của bộ định thời . Chế độ định thời được chọn bằng cách xóa bit T0CS (OPTION_REG <5>). Trongchế độ này thanh ghi TMR0 sẽ tăng lên sau mỗi chu kì (prescaler không có tác dụng hoặctỉ lệ 1 :1). Nếu thanh ghi TMR0 được ghi một giá trị mới, giá trị trong thanh ghi này sẽkhông tăng trong 2 chu kỳ lệnh kế tiếp.Vì vậy để khắc phục hiện tượng này chúng ta cóthể hiệu chỉnh giá trị nhập vào thanh ghi TMR0. Chế độ đếm được lựa chọn bằng cách set bit T0CS (OPTION_REG <5>). Trongchế độ đếm, thanh ghi TMR0 sẽ tăng lên khi có cạnh lên hoặc cạnh xuống xuất hiện trênchân T0CKL ( cạnh lên hoặc cạnh xuống được lựa chọn bởi bit T0SE (OPTION_REG<4>, xóa bit T0SE sẽ lựa chọn cạnh lên). 2.1.3 Ngắt Timer 0 . Ngắt Timer 0 được tạo ra khi thanh ghi TMR0 tràn từ 0FFh đến 00h. Khi xảy ratràn, cờ T0IF(INTCON<2>) được bật lên. Ngắt có thể được ngăn chặn bằng cách xóa bitT0IE (INTCON<5>). Cờ ngắt T0IF phải được xóa bằng phần mềm truớc khi thoát khỏichương trình ngắt trở về chương trình chính.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 43

Page 46: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Lưu ý : Ngắt Timer 0 không làm VĐK thoát khỏi trạng thái ngủ. 2.1.4 Sử dụng Timer 0 với nguồn xung clock ngoài. Khi bộ tiền định tỉ lệ không được sử dụng, ngõ vào xung clock ngoại cũng giốngnhư ngõ ra bộ tiền định tỉ lệ. Nguồn xung clock ngoại sẽ được đồng bộ với xung clocknội bằng cách: nó sẽ được lấy mẫu tại chu kỳ Q2 và Q4 của xung clock nội. Do đó,T0CKI phải ở mức cao ít nhất 2 Tosc và ở mức thấp ít nhất cũng là 2 Tosc. 2.1.5 Bộ tiền định tỉ lệ 8 bit của Timer 0. Bộ đếm 8 bit được sử dụng như bộ tiền định tỉ lệ cho Timer 0 hoặc bộ hậu định tỉ lệcho WDT. Bit PSA (OPTION_REG<3>) sẽ lựa chọn bộ đếm này sẽ sử dụng cho Timer0 hay WDT, các bit PS2, PS1, PS0 sẽ xác định tỉ lệ của bộ đếm.

(Xem lại phần thanh ghi OPTION_REG)

Các thanh ghi có liên quan đến Timer 0:

2.2 Bộ định thời Timer 1. 2.2.1 Giới Thiệu. Timer 1 là một bộ định thời/ đếm 16 bit bao gồm hai thanh ghi 8 bit (TMR1H vàTMR1L), có khả năng đọc được và ghi được. Cặp thanh ghi TMR1H và TMR1L sẽ tăngtừ 0000h lên FFFFh rồi sau đó tràn về 0000h. Nếu được cho phép (bit TMR1IE được set),ngắt sẽ xảy ra khi giá trị TMR1 tràn từ FFFFh về 0000h, lúc đó cờ ngắt TMR1IF sẽ bậtlên.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 44

Page 47: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

2.2.2 Thanh ghi điều khiển Timer 1:

Bit 7,6 Không sử dụng, đọc là 0.

Bit 5,4 T1CKPS1 : T1CKPS0 : Các bit chọn tỉ lệ xung ngõ vào cho Timer1. 111 : 8 giá trị tỉ lệ 101 : 4 giá trị tỉ lệ 011 : 2 giá trị tỉ lệ 001 : 1 giá trị tỉ lệ

Bit 3 T10SCEN : Bit cho phép bộ dao động Timer 1 Oscillator 1 : Cho phép dao động 0 : Không cho phép dao động

T1SYNC : Bit lựa chọn đồng bộ hóa xung clock ngoài của Timer 1 (Chú ý: Bit này chỉ có tác dụng khi bit TMR1CS = 1) 1: Không đồng bộ hóa xung clock ngoại 0: Đồng bộ hóa xung clock ngoại.

TMR1CS : Bit chọn nguồn xung clock cho Timer 1 1: Chọn xung clock ngoài qua chân T1OSC/T1CKI ( tác động cạnh lên) 0: Chọn xung clock nội (Fosc/4)

TMR1ON: Bit cho phép ngoặc ngưng Timer 1 1: Cho phép 0: Không cho phép

Bit 2

Bit 1

Bit 0

2.2.3 Chế độ định thời trong hoạt động của Timer 1 : Chế độ định thời được lựa chọn bằng cách xóa bit TMR1CS (T1CON<1>). Trongchế độ này, xung clock cung cấp cho Timer 1 là Fosc/4, bit đồng bộ T1SYNC(T1CON<2>) không có tác dụng vì xung clock nội đã luôn luôn được đồng bộ. 2.2.4 Chế độ đếm : Timer 1 có thể hoạt động ở cả chế độ đồng bộ hoặc bất đồng bộ tùy thuộc vào việccài đặt bit TMR1CS (T1CON<1>). Đếm đồng bộ : Chế độ này được lựa chọn bằng cách set bit TMR1CS và xóa bit T1SYNC. Trongchế độ này giá trị của Timer 1 sẽ tăng khi có xung cạnh lên trên chân T1OSI/RC1 ( nếubit T1OSCEN được set) hoặc chên trân T1OSO (nếu bit T1OSCEN được xóa). Xung clock ngoại sẽ được đồng bộ với xung clock nội, hoạt động đồng bộ đượcthực hiện ngay sau bộ tiền định tỉ lệ xung (prescaler). Trong chế độ ngủ hoạt động đồng

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 45

Page 48: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

bộ sẽ bị tắt cho dù có xung clock ngoài thì Timer 1 cũng không tăng. Điều này có nghĩalà chế độ đếm đồng bộ sẽ không hoạt động được trong chế độ ngủ (SLEEP). Khi chế độ sử dụng xung clock ngoài được lựa chọn cho Timer 1 ở chế độ đếmđồng bộ, chúng ta phải đảm bảo xung clock ngoài đã được đồng bộ với xung clock nội. Đếm bất đồng bộ : Nếu bit T1SYNC được set, xung clock ngoài sẽ không được đồng bộ hóa. Bộ địnhthời sẽ tiếp tục đếm trong suốt quá trình Sleep của VĐK và có khả năng tạo ra một ngắtkhi bộ định thời tràn và làm VĐK thoát khỏi trạng thái ngủ. * Một số đặc điềm lưu ý khi đọc ghi vào Timer : - Việc đọc thanh ghi TMR1H hoặc TMR1L trong khi bộ định thời đang chạy từmột nguồn xung clock ngoài không đồng bộ sẽ cho giá trị tức thời (không phải ngưngTimer lại). Tuy nhiên, phải chú ý rằng việc đọc Timer 1 sẽ phải bao gồm 2 lần đọc giá trị8 bit, do đó có thể phát sinh vấn đề là Timer có thể bị tràn giữa 2 lần đọc. - Để ghi vào Timer tốt nhất chúng ta nên dừng Timer lại và ghi giá trị chúng tamong muốn. Chúng ta có thể ghi giá trị váo khi Timer đang chạy nhưng việc đó có thểtạo ra một giá trị không như ta mong muốn. 2.2.5 Dao động riêng của Timer 1 : Chúng ta có thể tạo một bộ dao động độc lập cho Timer 1 bằng cách sử dụng thạchanh có tần số tối đa 200Khz.Với bộ dao động này Timer có thể đếm ngay cả khi VĐKrơi vào trạng thái ngủ. 2.2.6 Ngắt Timer 1 : Khi ngắt được cho phép, nó sẽ xảy ra khi Timer tràn từ giá trị FFFFh xuống 0000h.Khi xảy ra tràn, cờ báo ngắt TMR1IF sẽ bật lên. Ngắt có thể ngăn chặn bằng cách xóa bitTMR1IE, cờ TMR1IF phải được xóa bằng phần mềm trước khi thoát khỏi chương trìnhphục vụ ngắt trở về chương trình chính. Lưu ý : Ngắt của Timer 1 ở chế độ định thời và chế độ đếm đồng bộ không làmcho VĐK thoát khỏi trạng thái ngủ, chỉ có ngắt ở chế độ đếm bất đồng bộ mới làm choVĐK thoát khỏi trạng thái ngủ. Các thanh ghi liên quan đến Timer 1 :

2.3 Bộ định thời Timer 2 : 2.3.1 Giới thiệu : Timer 2 là một bộ định thời 8 bit baogồm một bộ tiền định tỉ lệ và một bộ hậuđịnh tỉ lệ, Timer 2 cung cấp thời gian hoạtđộng cho chế độ PWM nếu module CCPđược chọn. Thanh ghi TMR2 là một thanh

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 46

Page 49: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

ghi có thể đọc và ghi được, nó bị xóa bởi bất cứ tác đông reset nào. Xung clock ngõ vào (Fosc/4) có các tùy chọn tỉ lệ là 1:1, 1:4, 1:16, được lựa chọnbằng các bit điều khiển T2CKPS1 : T2CKPS0 (T2CON<1 :0>). Timer 2 có một thanh ghi khoảng thời gian 8 bit PR2, đây là một thanh ghi có khảnăng đọc được và ghi được. Timer 2 sẽ tăng từ 00h đến khi bằng giá trị ở thanh ghi PR2nó sẽ reset về 00h ở chu kỳ tăng tiếp theo. 2.3.2 Thanh ghi điều khiển T2CON

Bit 7

Bit 6:3

Không sử dụng

TOUTPS3:TOUTPS0: Bit chọn tỉ lệ ngõ ra của Timer 2 0000: 1:1 Tỷ lệ ngõ ra 0001: 1:2 Tỷ lệ ngõ ra . . . 1111: 1:16 Tỷ lệ ngõ ra

Bit 2 TMR2ON: Bit cho phép hoạt động của Timer 2 1: Cho phép 0: Không cho phép.

Bit 1:0T2CKPS1:T2CKPS0: Bit chọn tỉ lệ ngõ vào của Timer 2 00 : Prescaler 1 01 : Prescaler 4 1x : Prescaler 16

2.2.3 Xóa các bộ tỉ lệ. Hai bộ đếm prescaler và postcaler sẽ bị xóa bởi một trong các nguyên nhân sauđây : - Ghi một giá trị vào thanh ghi TMR2 - Ghi một giá trị vào thanh ghi TCON2 - Bất cứ một reset thiết bị nào. Thanh ghi TMR2 không bị xóa khi thanh ghi TCON2 được ghi. 2.3.4 Nguồn xung clock cho Timer 2. Timer 2 có một nguồn xung clock đó là xung clock của VĐK. Một bộ tiền định tỉlệ được lựa chọn bởi các bit T2CKPS1:T2CKPS0 2.3.5 Thanh ghi TMR2 và PR2. Thanh ghi TMR2 và PR2 là 2 thanh ghi đọc được và ghi được. Timer 2 sẽ tăng từgiá trị 00h lên tới giá trị nằm trong thanh ghi PR2, sau đó nó sẽ reset về 00h cho đến chukỳ đếm kế tiếp. 2.3.6 Tín hiệu báo trạng thái cân bằng.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 47

Page 50: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Khi giá trị trong thanh ghi TMR2 bằng với giá trị trong PR2, bộ so sánh sẽ tạo ramột xung báo hiệu, xung này có thể được dùng cho bộ hậu định tỉ lệ hoặc được dùng làmxung clock cho module truyền nối tiếp. Ngoài ra nó còn được dùng làm tín hiệu Resetcho Timer 2. 2.3.7 Chế độ ngủ. Trong chế độ ngủ Timer 2 không hoạt động, giá trị của bộ định tỉ lệ sẽ được lưu lạivà phục hồi sau khi VĐK thoát khỏi trạng thái ngủ.

Các thanh ghi lien quan đến Timer 2:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 48

Page 51: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG III : MODULE CCP

3.1 Giới thiệu : Module CCP được xây dựng để hỗ trợ choviệc đo lường và điều khiển thời gian hoạt độngcủa các tín hiệu, đo chu kỳ hoạt động của tín hiệu,tạo ra các tín hiệu có tần số khác nhau, điều khiểntốc độ động cơ DC… Mỗi module CCP có môt thanh ghi 16 bit cóthể hoạt động như: - Một thanh ghi Capture 16 bit - Một thanh ghi Compare 16 bit - Một thanh ghi điểu khiển chu kỳ nhiệm vụ của bộ PWM. PIC16F877A có 2 module CCP là CCP1 và CCP2:

Module CCP1: Thanh ghi CCPR1 bao gồm 2 thanh ghi 8 bit: CCPR1L và CCPR1H. Thanh ghiCCP1CON điều khiển hoạt động cùa module CCP1. Các xung đặc biệt xảy ra bằng cácthuật toán so sánh và sẽ reset Timer 1.Module CCP2: Thanh ghi CCPR2 bao gồm 2 thanh ghi 8 bit: CCPR2L và CCPR2H. Thanh ghiCCP2CON điều khiển hoạt động cùa module CCP2. Các xung đặc biệt xảy ra bằng cácthuật toán so sánh sẽ reset Timer 1 và bắt đầu chuyển đổi ADC (nếu chuyển đổi ADCđược cho phép).

3.2 Thanh ghi điều khiển module CCP:

Bit 7,6 Không sử dụng

Bit 5,4 DCxB1:DCxB0: Bit 0 và bit 1 của chế độ PWM Chế độ Capture và chế độ Compare : Không sử dụng

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 49

Page 52: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Chế độ PWM: Trong chế độ PWM có 10 bit dùng để định chu kỳ nhiệm vụ choPWM, đây là 2 bit trong số 10 bit đó, 8 bit còn lại nằm trong thanh ghi CCPRxL.

Bit 3:0 CCPxM3:CCPxM0: Các bit chọn chế độ cho module CCPx 0000: Tắt tất cả các chức năng CCP 0100: Chế độ Capture, hoạt động ở mỗi xung cạnh xuống 0101: Chế độ Capture, hoạt động ở mỗi xung cạnh lên. 0110: Chế độ Capture, hoạt động ở mỗi 4 xung cạnh lên. 0111: Chế độ Capture, hoạt động ở mỗi 16 xung cạnh lên. 1000: Chế độ Compare, ban đầu ngõ ra CCP ở mức thấp, khi điều kiện cân bằng xuất hiện nó lên mức cao (cờ CCPIF được set). 1001: Chế độ Compare, ban đầu ngõ ra CCP ở mức cao, khi điều kiện cân bằng xuất hiện nó xuống mức thấp (cờ CCPIF được set). 1010: Chế độ Compare, tạo ra một ngắt phần mềm khi điều kiện cân bằng xuất hiện (cờ CCPIF được set, chân CCP không đổi) 1011: Chế độ Compare , sự kiện đặc biệt xảy ra (cờ CCPIF được set, chân CCP không đổi), CCP1 reset TMR1, CCP2 reset TMR1, bắt đầu chuyển đổi A/D ( nếu module ADC được cho phép). 11xx: Chế độ PWM .

3.3 Chế độ Capture. Để module CCP hoạt động trong chế độCapture thì Timer 1 phải thiết lập ở chế độđịnh thời hoặc chế độ đếm đồng bộ, nếukhông chế độ Capture sẽ không làm việc. Khichế độ Capture được sử dụng, chân CCP phảiđược mặc định là ngõ vào.

Trong chế độ Capture, hai thanh ghiCCPRxH và CCPRxL sẽ ghi lại giá trị 16 bitcủa Timer 1 khi có môt sự kiện xuất hiện trên chân CCPx (giá trị trong Timer 1 không bịreset). Một sự kiện được định nghĩa bởi: - Bất cứ một xung cạnh xuống - Bất cứ một xung cạnh lên - Bất cứ 4 xung cạnh lên - Bất cứ 16 xung cạnh lên Sự kiện được lựa chọn bởi các bit điều khiển CCPxM3:CCPxM0(CCPxCON<3:0>). Khi một sự kiện xuất hiện giá trị trong Timer 1 được ghi lại và cờCCPxIF được bật lên, cờ này phải được xóa bằng phần mềm trước khi một sự kiện khácxảy ra nếu không giá trị lưu trước đó sẽ bị xóa. Khi thay đổi hoạt động chế độ Capture sẽ tạo ra một ngắt nên khi muốn thay đổihoạt động chế độ Capture trước hết phải vô hiệu hóa các ngắt và xóa các cờ ngắt. 3.3.1 Bộ định tỉ lệ của CCP: Bộ định tỉ lệ prescaler có 4 giá trị tỉ lệ được lựa chọn bởi các bit CCPxM3:CCPxM0.Bất cứ khi nào module CCP ngừng hoạt động hoặc không hoạt động trong chế độCapture thì giá trị tỉ lệ sẽ bị xóa. Bất cứ reset nào cũng xóa giá trị tỉ lệ.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 50

Page 53: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Khi thay đổi giá trị prescaler có thể gây ra một ngắt. Giá trị đếm prescaler sẽ khôngbị xóa nên sự Capture đầu tiên có thể không xuất phát từ giá trị 0 của bộ prescaler.3.4 Chế độ Compare: Để module CCP hoạt động trong chế độCompare thì Timer 1 phải thiết lập ở chế độđịnh thời hoặc chế độ đếm đồng bộ, nếukhông chế độ Compare sẽ không làm việc.Khi chế độ Compare được sử dụng, chân CCPphải được mặc định là ngõ vào. Trong chế độ Compare giá trị trongthanh ghi TMR1 sẽ được so sánh với một giátrị đã được lưu sẵn trong thanh ghi 16 bitCCPRx, khi hai giá trị này bằng nhau, mộtngắt sẽ xảy ra nếu được cho phép.Chân CCPxsẽ: - Lên mức cao - Xuống mức thấp - Hay giữ nguyên trạng thái Trạng thái của chân CCP sẽ phụ thộc vào các bit CCPxM3:CCPxM0. Việc xóa thanh ghi CCPxCON sẽ đẩy trạng thái của chân CCP xuống mứcthấp. Đặc biệt trong chế độ này, khi giá trị trong 2 thanh ghi TMR1 và CCPRx bằng nhauthì một xung tín hiệu sẽ được tạo ra. Xung này sẽ reset cặp thanh ghi TMR1H vàTMR1L. Điều này cho phép thanh ghi CCPRx hoạt động giống như một thanh ghikhoảng thời gian cho Timer 1.3.5 Chế độ điều biến xung PWM: Trong chế độ điều chế độ rộng xung PWM,chân CCP tạo ra một tín hiệu có độ phân giải 10bit. Chân CCP phải được mặc định là ngõ ra. Việc xóa thanh ghi CCPxCON sẽ đẩy chânngõ ra CCPx xuống mức mặc định thấp.

3.5.1 Chu kỳ PWM: Chu kỳ PWM được chỉ định trong thanh ghi PR2. Chu kỳ có thể được tính bằngcông thức:Chu kỳ PWM = [(PR2 + 1)*4*Tosc*giá trị tỉ lệ TMR2)Tần số PWM = 1/ chu kỳ PWM. Khi giá trị trong hai thanh ghi TMR2 và PR2 bằng nhau, ba tác vụ sau đây sẽ diễn ra:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 51

Page 54: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Thanh ghi TMR2 bị xóa Chân CCPx được set lên mức 1 Giá trị Duty cycle ( Chu kỳ nhiệm vụ) từ thanh ghi CCPRxL sẽ chuyển sang thanh ghi CCPRxH.Lưu ý: Bộ postcaler của Timer 2 không có tác dụng trong việc quyết định tần sốPWM. Bộ prescaler được kết hợp với thanh ghi TMR2 để tạo ra bộ đếm 10 bittương ứng. 3.5.2 Chu kỳ nhiệm vụ của PWM: Giá trị chu kỳ nhiệm vụ của PWM được quy định bằng 10 bit : 8 bit trong thanh ghiCCPRxL và 2 bit trong thanh ghi CCPxCON (DCxB1, DCxB0). Chu kỳ nhiệm vụ PWMcó thể được tính theo công thức sau:

Ton PWM = ( Giá trị của DCxB9:DcxB0) * Tosc * giá trị tỉ lệ tiền định TMR2

Giá trị DCxB9:DcxB0 có thể thay đổi tùy ý nhưng giá trị này sẽ không được tảivào trong thanh ghi CCPRxH cho đến khi trạng thái cân bằng xảy ra giữa 2 thanh ghiPR2 và TMR2. Trong chế độ PWM thanh ghi CCPRxH là thanh ghi chỉ đọc. Độ phân giải PWM có thể tính theo công thức sau:

---

3.5.3 Cài đặt hoạt động cho PWM: Để cài đặt hoạt động cho chế độ PWM ta tiến hành các bước sau: - Định chân CCPx là ngõ ra. - Thiết lập chu kỳ PWM bằng việc ghi vào thanh ghi PR2 - Thiết lập chu kỳ nhiệm vụ PWM bằng việc ghi giá trị vào các bit DCxB9:DCxB0. - Cài đặt giá trị tỉ lệ cho Timer 2 và cho phép Timer 2 hoạt động bằng cách ghi vào thanh ghi T2CON. - Cấu hình cho module CCP hoạt động trong chế độ PWM.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 52

Page 55: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 53

Page 56: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

3.5.4 Module MSSP (Master Synchronous Serial Port): Giới thiệu: Module MSSP là một giao diện nối tiếp,hữu dụng cho việc giao tiếp với các thiết bịngoại vi hoặc các VĐK khác. Những thiết bịngoại vi này có thể là EEPROMs nối tiếp,thanh ghi dịch, điều khiển hiển thị hay bộ biếnđổi ADC … Module MSSP có thể hoạt động ở mộttrong hai chế độ: - SPI ( Serial Peripheral Interface) - I2C (Inter- Intergrated Circuit) + Full master Mode + Slave Mode ( with general address call) Giao tiếp I2C cung cấp các chế độ sau đây trong phần cứng: - Master mode - Multi Master Mode - Slave Mode Thanh ghi điều khiển: Module MSSP có 3 thanh ghi liên quan:thanh ghi trạng thái (SSPSTAT) và hai thanhghi điều khiển (SSPCON và SSPCON2). Việcsử dụng và cài đặt giá trị cho các thanh ghinày phụ thuộc vào việc Module MSSP hoạtđộng ở chế độ nào.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 54

Page 57: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG IV : BỘ BIẾN ĐỔI ADC 10 BIT

4.1 Giới thiệu module ADC 10 bit: Trên VĐK có một bộ biến đổi ADC 10bit, 8 ngõ vào Analog, 8 ngõ vào này đượcnối với ngõ vào của bộ chuyển đổi. Sau đó bộ chuyển đổi sẽ tạo ra một kết quả 10 bittương ứng với giá trị Ananlog đầu vào. Điện thế tham chiếu đầu vào sẽ được lựa chọnbằng phần mềm (từ Vdd, Vss hoặc 2 chân AN2, AN3. Module ADC là module duy nhấtcó khả năng hoạt động trong chế độ ngủ. Để hoạt động trong chế độ ngủ Sleep, xungclock cung cấp cho ADC phải được nhận từ dao động nội RC của ADC. Module ADC bao gồm 4 thanh ghi: - Thanh ghi chứa byte cao của kết quả ADRESH - Thanh ghi chứa byte thấp của kết quả ADRESL - Thanh ghi chứa các bit điều khiển ADCON0 - Thanh ghi chứa các bit điều khiển ADCON14.2 Các thanh ghi điều khiển:

Thanh ghi điều khiển ADCON0:

Bit 7:6 ADCS1:ADCS0: Các bit lựa chọn tần số chuyển đổi A/D 00 =FOSC/2 01 =FOSC/4 10 =FOSC/32 11 =FRC (xung clock được lấy từ dao đông nội RC)

Bit 5:3 CHS2:CHS0: Các bit lựa chọn kênh Analog 000: Kênh 0, (AN0) 001: Kênh 1, (AN1) 010: Kênh 2, (AN2) 011: Kênh 3, (AN3) 100: Kênh 4, (AN4) 101: Kênh 5, (AN5) 110: Kênh 6, (AN6) 111: Kênh 7, (AN7)

Bit 2 GO/ DONE: Bit báo trạng thái chuyển đổi A/D Khi bit ADON = 1 1: Quá trình A/D đang thực hiện (Khi chúng ta set bit này lên thì quá trình chuyển đổi sẽ xảy ra, khi quá trình kết thúc nó sẽ tự động được xóa bằng phần mềm). 0: Quá trình A/D không xảy ra hoặc đã hoàn tất.Bit 1 Không sử dụng, giá trị là 0Bit 0 ADON : Bit cho phép module A/D hoạt động.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 55

Page 58: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

1: Nguồn được cung cấp cho A/D 0: Ngưng cung cấp nguồn cho A/DThanh ghi điều khiển ADCON1:

Bit 7 ADFM: Bit lựa chọn định dạng kết quả A/D 1: Canh phải, 6 bit cao nhất của thanh ghi ADRESH có giá trị 0 0: Canh trái, 6 bit thấp nhất của thanh ghi ADRESL có giá trị 0

Bit 6 ADCS2: Bit lựa chọn clock chuyển đổi A/D

Bit 5,4 Không sử dụng

Bit 3:0 PCFG3:PCFG0: Các bit điều khiển cấu hình các chân ADC

4.3 Hoạt động của module ADC

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 56

Page 59: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Hai thanh ghi ADRESH và ADRESL chứa giá trị 10 bit của kết quả ADC. Khi quátrình chuyển đổi hoàn tất, kết quả ADC sẽ được lưu lại trong cặp thanh ghi này. BitGO/DONE bị xóa và cờ ngắt ADIF được bật lên. Sau khi module ADC đã được cấu hình như mong muốn, chúng ta phải lựa chọnkênh chuyển đổi A/D trước khi chuyển đổi ADC xảy ra. Các chân Analog phải đượcchọn là ngõ vào bằng cách set các bit trong thanh ghi TRIS tương ứng. Để tiến hành chuyển đổi ADC, tiến hành theo các bước sau:Bước 1: Cấu hình cho module ADC: - Cấu hình cho các chân ngõ vào/ điện thế chuẩn và I/O số (ADCON1) - Lựa chọn kênh ngõ vào A/D (ADCON0) - Lựa chọn tần số chuyển đổi (ADCON0) - Cấp nguồn cho module ADC (ADCON0)Bước 2: Cấu hình các ngắt ADC (nếu cần): - Xóa cờ ngắt ADIF - Set bit GIE (Cho phép ngắt toàn cục) - Set bit ADIE (Cho phép ngắt chuyển đổi ADC)Bước 3: Đợi thời gian Acquisition (lấy mẫu) cần thiếtBước 4: Bắt đầu quá trình chuyển đổi ADC: Set bit GO/ DONE (ADCON0)Bước 5: Đợi quá trình ADC hoàn tất: Chạy vòng lập đợi bit GO/DONE bị xóa hoặc cờ ngắt ADIF bật lênBước 6 : Đọc kết quả trong 2 thanh ghi ADRESH và ADRESL, xóa bit ADIF ( nếu cầnthiết)Bước 7: Nếu muốn tiếp tục thực hiện chuyển đổi ADC trong chu kỳ kế tiếp thì quay lạibước 1 hoặc bước 2.Sơ đồ khối của bộ biến đổi ADC 10 bit:

4.4 Thời gian lấy mẫu:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 57

Page 60: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Thời gian lấy mẫu bao gồm hai giai đoạn: Thời gian acquition: Là thời gian cần để tụ điện của bộ sample and hold (tạm dịchlà bộ lấy mẫu và giữ) nạp điện để có giá trị điện thế bằng với giá trị của nguồn analogcần lấy mẫu. Thời gian chuyển đổi từ tương tự sang số: Vào khoảng 12 chu kỳ của bộ ADC. Tổng 2 thời gian đó ta được thời gian lấy mẫu Cách tính thời gian acquition: TACQ = Thời gian ổn định của phần cứng khuếch đại + Thời gian nạp của tụ + hệsố nhiệt độ TACQ = TAMP + TC + TCOFF = 2µs + TC +[(Nhiệt độ - 250C)(0.05/0C)] = 19.72 µs

4.5 Lựa chọn xung clock cho biến đổi A/D: Thời gian chuyển đổi 1 bit được định nghĩa là chu kỳ TAD. Để biến đổi 10 bitchúng ta cần thời gian xấp xỉ 12TAD . Nguồn xung clock cung cấp cho ADC được lựachọn bằng phần mềm. Có 4 giá trị để lựa chọn: - 2 Tosc - 8 Tosc - 32 Tosc - Dao động nội RC của module ADC (2-6µs) Để đảm bảo quá trình ADC chính xác thì xung clock ADC (TAD) phải được lựachọn để đảm bảo rằng giá trị tối thiểu của TAD là 1.6µs. Bảng sau đây chỉ ra môi liên hệ giữa TAD và tần số của thiết bị:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 58

Page 61: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

4.6 Cấu hình các chân Analog: Các thanh ghi ADCON1 và TRIS điều khiển hoạt động của các chân ADC. Đối vớicác chân cần được quy định là ngõ vào Analog thì các bit tương ứng trong thanh ghiTRIS phải được set, nếu các bit trong thanh ghi TRIS bị xóa (output) thì các ngõ ra số(VOH hoặc VOL) sẽ được chuyển đổi. Hoạt động của bộ ADC sẽ phụ thuộc vào trạngthái của các bit CHS2:CHS0 và các bit trong thanh ghi TRIS.4.7 Chuyển đổi ADC: Việc xóa bit GO/DONE trong quá trình chuyển đổi sẽ bỏ qua chuyển đổi hiện tại.Cặp thanh ghi kết quả chuyển đổi ADC sẽ không được cập nhật những mẫu chuyển đổiADC đã hoàn tất. Do đó, cặp thanh ghi ADRESH và ADRESL sẽ chứa giá trị của lầnchuyền đổi hoàn tất cuối cùng ( hoặc giá trị được ghi cuối cùng vào 2 thanh ghi này). Sau khi một chuyển đổi ADC bị bỏ qua, việc lấy mẫu tiếp theo dựa trên kênh ADCđã chọn sẽ tự động diễn ra. Sau đó bit GO/DONE có thể được set để bắt đầu chuyển đổiADC. Chú ý: Bit GO/DONE không nên được set trong cùng một lệnh với lệnh mởmodule ADC.

Cặp thanh ghi ADRESH và ADRESL dùng để lưu kết quả ADC 10 bit. ModuleADC cho phép ta lựa chọn việc canh trái hay canh phải kết quả 10 bit trong thanh ghi kếtquả bằng cách xóa hoặc set bit ADFM. Các bit còn lại mang giá trị là 0.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 59

Page 62: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

4.8 Hoạt động của module ADC trong chế độ ngủ: Module ADC có thể hoạt động trong chế độ ngủ (Sleep). Điều này yêu cầu nguồnxung clock cung cấp cho ADC phải từ dao động RC (ADCS1:ADCS0 = 11). Khi xungclock RC được chọn, module ADC sẽ đợi một chu kỳ máy trước khi bắt đầu tiến hànhchuyển đổi ADC. Điều này cho phép lệnh SLEEP có thể được thực thi mà không gâynhiễu đến quá trình ADC. Khi chuyển đổi ADC hoàn tất, bit GO/DONE sẽ bị xóa và kếtquả được lưu vào cặp thanh ghi ADRESH, ADRESL. Nếu ngắt ADC được cho phép, nósẽ làm VĐK thoát khỏi chế độ ngủ. Nếu ngắt không được cho phép, module ADC sau đósẽ bị tắt mặc dù bit ADCON vẫn còn ở mức cao. Khi nguồn xung clock khác được chọn chứ không phải RC, lệnh SLEEP sẽ làm chochuyển đổi ADC hiện tại bị bỏ qua và module ADC sẽ bị tắt dù bit ADCON vẫn cònđang ở mức 1.4.9 Ảnh hưởng của Reset: Một reset thiết bị sẽ buộc tất cả các thanh ghi rơi vào trạng thái Reset của chúng.Điều này buộc module ADC bị tắt và bất kỳ chuyển đổi ADC nào cũng bị bỏ qua. Tất cảcác chân ngõ vào A/D sẽ được cấu hình là các ngõ vào Analog. Giá trị trong cặp thanh ghi ADRESH:ADRESL không bị thay đổi trong một ResetPower-on. Cặp thanh ghi này sẽ chứa một giá trị không biết trước sau reset Power-on. Các thanh ghi và các bit liên quan đến module ADC:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 60

Page 63: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG V : ĐIỆN THẾ THAM CHIẾU VÀ CÁC BỘ SO SÁNH ĐIỆN

5.1 Module Comparator: 5.1.1 Giới thiệu module comparator : Module so sánh (Compararor) chứa 2 bộ so sánh tương tự. Ngõ vào của bộ so sánhđược đa hợp với các chân xuất nhập từ RA0 đến RA3 trong khi ngõ ra lại đa hợp với cácchân RA4 và RA5. Điện thế trên chip cũng có thể đưa vào ngõ vào của bộ so sánh. Thanh ghi CMCON điều khiển ngõ vào và ngõ ra của bộ so sánh.

Bit 7 C2OUT: Bit cho biết kết quả ngõ ra của bộ so sánh 2 Khi C2INV = 0: 1: Nếu C2Vin+ > C2Vin- 0: Nếu C2Vin+ < C2Vin- Khi C2INV = 1: 1: Nếu C2Vin+ < C2Vin- 0: Nếu C2Vin+ > C2Vin-Bit 6 C1OUT : Bit ngõ ra bộ so sánh 1 Khi C1INV = 0: 1: Nếu C1Vin+ > C1Vin- 0: Nếu C1Vin+ < C1Vin- Khi C1INV = 1: 1: Nếu C1Vin+ < C1Vin- 0: Nếu C1Vin+ > C1Vin-Bit 5 C2INV : Bit đảo ngõ ra bộ so sánh 2 1: Ngõ ra C2 đảo 0: Ngõ ra C2 không đảoBit 4 C1INV: Bit đảo ngõ ra bộ so sánh 1 1: Ngõ ra C1 đảo 0: Ngõ ra C1 không đảoBit 3 CIS: Bit chuyển đổi ngõ vào bộ so sánh Khi CM2:CM0 = 110: 1: C1 Vin- nối với chân RA3/AN3 C2 Vin- nối với chân RA2/AN2 0: C1 Vin- nối với chân RA0/AN0 C1 Vin- nối với chân RA1/AN1Bit 2-0 CM2:CM0: Bit chọn chế độ hoạt động của bộ so sánh. 5.1.2 Cài đặt chế độ cho bộ so sánh: Có 8 chế độ hoạt động của bộ so sánh, thanh ghi CMCON được sử dụng để lựachọn những chế độ này. Thanh ghi TRIS điều khiển các chân I/O của bộ so sánh trongmỗi chế độ. Nếu chế độ so sánh bị thay đổi, ngõ ra của bộ so sánh sẽ không còn chínhxác nữa.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 61

Page 64: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Lưu ý: Các ngắt do bộ so sánh sinh ra nên được cấm trong suốt quá trình thay đổichế độ hoạt động, nếu không các ngắt ngoài ý muốn có thể sinh ra.

Một bộ so sánh đơn được trình bàytrong hình bên cạnh đây, nó cho chúng tabiết sự thay đổi trạng thái logic ngõ ratương ứng với trạng thái tín hiệu Analogngõ vào. Khi VIN+ > VIN- thì ngõ ra lên mứccao và ngược lại. Tại những cạnh này ngõ ra khôngbiết chắc chắn.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 62

Page 65: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

5.1.3 Nguồn tham chiếu của bộ so sánh: Một nguồn tham chiếu nội hoặc ngoại có thể được sử dụng. Việc lựa chọn nguồnnội hay ngoại tùy thuộc vào chế độ hoạt động của bộ so sánh. 5.1.3.1 Tín hiệu điện thế tham chiếu ngoại: Khi sử dụng nguồn tham chiếu ngoại, module so sánh có thể được cấu hình hoạtđộng từ một hoặc 2 nguồn so sánh khác nhau. Điện thế so sánh phải nằm trong khoảng từVss đến Vdd và điện áp này có thể được đưa vào bất cứ một chân nào của bộ so sánh. 5.1.3.2 Tín hiệu điện thế tham chiếu nội: Module so sánh cũng cho phép lựa chọn một điện thế so sánh nội dùng cho các bộso sánh. Tín hiệu tham chiếu nội được sử dụng trong chế độ so sánh CM2:CM0 = 010.Trong chế độ này tín hiệu so sánh nội được đưa vào chân VIN+ của 2 bộ so sánh. 5.1.4 Thời gian đáp ứng: Thời gian đáp ứng là thời gian tính từ khi lựa chọn một điện thế tham chiếu hoặcmột tín hiệu ở ngõ vào cho đến khi có một giá trị điện áp hợp lý ở ngõ ra. 5.1.5 Tín hiệu ngõ ra của các bộ so sánh: Tín hiệu ngõ ra của các bộ so sánh được đọc thông qua thanh ghi CMCON khi cácbit này đã sẵn sàng. Ngõ ra của các bộ so sánh có thể được nối trực tiếp với các chânxuất nhập RA4 và RA5, các chân này phải được cấu hình là ngõ ra trong chế độ này. Chú ý: - Khi các chân port được cấu hình là các chân ngõ vào Analog, việc đọc các thanh ghi port sẽ cho giá trị là “0” Sơ đồ khối chân ngõ ra của các bộ so sánh

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 63

Page 66: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

5.1.6 Ngắt của các bộ so sánh: Cờ ngắt CMIF của các bộ so sánh được bật lên khi giá trị ngõ ra của các bộ so sánhthay đổi so với giá trị của bit CMxOUT. Cờ ngắt này phải được xóa bằng phần mềm đểmột ngắt kế tiếp có thể xảy ra. Ngoài ra để một ngắt có thể xảy ra chúng ta cần phải set các bit CMIE, PEIE, GIElên 1 5.1.7 Hoạt động của các bộ so sánh trong chế độ ngủ: Các bộ so sánh vẫn hoạt động trong chế độ ngủ và các ngắt vẫn có thể xảy ra nếuđược cho phép. Do đó các ngắt này sẽ đánh thức VĐK. 5.1.8 Ảnh hưởng của Reset: Khi một Reset thiết bị xảy ra, nó sẽ buộc thanh ghi CMCON về trạng thái reset củanó, làm cho module rơi vào chế độ tắt, CM2:CM0 = 111. Các thanh ghi liên quan đến module so sánh:

5.2 Module điện áp tham chiếu : 5.2.1 Giới thiệu module điện thế tham chiếu Module điện áp tham chiếu so sánh được sử dụng chủ yếu với module so sánh khicần sử dụng nguồn so sánh là nguồn nội. Module điện áp tham chiếu bao gồm một hệ thống 16 điện trở, hệ thống điện trởnày sẽ cung cấp cho chúng ta một điện áp tham chiếu có thề lập trình được . Dãy điện trở này được chia nhỏ ra để cung cấp cho chúng ta các điện thế tham chiếukhác nhau. Sơ đồ khối của module điện thế so sánh

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 64

Page 67: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

5.2.2 Thanh ghi điều khiển CVRCON:

Bit 7 CVREN: Bit cho phép CVR hoạt động. 1: Cung cấp nguồn cho CVR 0: Ngưng cấp nguồn cho CVR.

Bit 6 CVROE: Cho phép ngõ ra CVR 1: Điện áp CVREF là ngõ ra trên chân RA2 0: Điện áp CVREF không kết nối với chân RA2

Bit 5 CVRR: Bit lựa chọn dãi giá trị hoạt động cùa CVREF 1: 0 đến 0.75 CVRSRC, với kích thước mỗi buớc là CVRSRC/24 0: 0.25 CVRSRC đến 0.75 CVRSRC, với kích thuớc bước là CVRSRC/32

Bit 4 Không sử dụng, giá trị là 0

Bit 3-0 CVR3:CVR0: Các bit lựa chọn giá trị VREF ( 0 <= VR3:VR0 <= 15) Khi VRR =1: VREF = ( VR<3:0>/24) * Vdd Khi VRR = 0: VREF = ¼ * VDD + ( VR<3:0>/32) * Vdd

Bảng điện thế tham chiếu tiêu biểu với VDD=5.0V

CVR3:CVR0

0000000100100011010001010110011110001001101010111100110111101111

VREFCVRR =10.00V0.21V0.42V0.63V0.83V1.04V1.25V1.46V1.67V1.88V2.08V2.29V2.50V2.71V2.92V3.13V

CVRR =01.25V1.14V1.56V1.72V1.88V2.03V2.19V2.34V2.50V2.66V2.81V2.97V3.13V3.28V3.44V3.59V

Trang 65SVTH :Hà Xuân Bình & Vũ Thanh Hưng

Page 68: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

5.2.3 Độ chính xác của điện thế tham chiếu: Giá trị điện thế VREF không thể bằng Vdd hay Vss được vì có hai con transistor ởhai đầu. 5.2.4 Hoạt động của module VREF trong trạng thái ngủ Khi VĐK thoát khỏi trạng thái ngủ hay watchdog timer, nội dung của thanh ghiCVRCON sẽ không còn tác dụng. Để hạn chế công suất tiêu thụ, trong chế độ ngủmodule điện thế tham chiếu nên cấm. 5.2.5 Trạng thái của module khi reset: Khi VĐK được reset nó sẽ xóa bit CVREN, bit CVROE, bit CVRR và các bitCVRCON<3:0> 5.2.6 Sử dụng module với các mạch ngoài : Nên nhớ rằng module VREF hoạt động độc lập với module comparator. Ngõ ra củamodule này có thể được kết nối với chân ngõ ra nếu bit tương ứng trong thanh ghi TRISđược xóa. Việc cho phép module VREF cung cấp điện thế cho các mạch ngoài sẽ làmtăng công suất của VĐK. Ngoài ra module này có thể dùng như bộ biến đổi D/A đơngiản. Do sự giới hạn về dòng điện ngõ ra nên một Bufer điện thế được sử dụng để đảmbảo độ chính xác của tín hiệu điện thế.

Các thanh ghi liên quan đến điện áp tham chiếu

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 66

Page 69: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

PHẦN II

CÁC THÀNH PHẦN CỦA KIT THỰC TẬP PIC 16F877A

CHƯƠNG I: HIỂN THỊ LED ĐƠN.

CHƯƠNG II: HIỂN THỊ LED 7 ĐOẠN.

CHƯƠNG III: ĐÈN GIAO THÔNG.

CHƯƠNG IV: CHẠY CHỮ LED MATRẬN.

CHƯƠNG V: HIỂN THỊ LCD.

CHƯƠNG VI: ADC

CHƯƠNG VII: BÀN PHÍM GIAO TIẾP LCD.

CHƯƠNG VIII: GIAO TIẾP I2C

CHƯƠNG IX: ĐO NHIỆT ĐỘ DÙNG LM35

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 67

Page 70: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG I : HIỂN THỊ LED ĐƠN

1.1 Giới Thiệu Chung: LED (viết tắt của Light Emitting Diode, có nghĩa là điốt phát quang) là các điốt cókhả năng phát ra ánh sáng hay tia hồng ngoại, tử ngoại. Cũng giống như điốt, LED đượccấu tạo từ một khối bán dẫn loại p ghép với một khối bán dẫn loại n. Hoạt động của LED giống với nhiều loại điốt bán dẫn. Khối bán dẫn loại p chứanhiều lỗ trống tự do mang điện tích dương nên khi ghép với khối bán dẫn n (chứa cácđiện tử tự do) thì các lỗ trống này có xu hướng chuyễn động khuếch tán sang khối n.Cùng lúc khối p lại nhận thêm các điện tử (điện tích âm) từ khối n chuyển sang. Kết quảlà khối p tích điện âm (thiếu hụt lỗ trống và dư thừa điện tử) trong khi khối n tích điệndương (thiếu hụt điện tử và dư thừa lỗ trống). Ở biên giới hai bên mặt tiếp giáp, một số điện tử bị lỗ trống thu hút và khi chúngtiến lại gần nhau, chúng có xu hướng kết hợp với nhau tạo thành các nguyên tử trung hòa. Quá trình này có thể giải phóng năng lượng dưới dạng ánh sáng (hay các bức xạđiện từ có bước sóng gần đó). Tùy theo mức năng lượng giải phóng cao hay thấp mà bước sóng ánh sáng phát rakhác nhau (tức màu sắc của LED sẽ khác nhau). Mức năng lượng (và màu sắc của LED)hoàn toàn phụ thuộc vào cấu trúc năng lượng của các nguyên tử chất bán dẫn.LED thường có điện thế phân cực thuận cao hơn điốt thông thường, trong khoảng 1,5đến 3 V. Nhưng điện thế phân cực nghịch ở LED thì không cao. Do đó, LED rất dễ bị hưhỏng do điện thế ngược gây ra.

Loại LEDĐỏVàngXanh lá cây

Điện thế phân cực thuận1,4 - 1,8V2 - 2,5V2 - 2,8V

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 68

Page 71: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008

1.2 Mạch Nguyên Lý

VCC

GVHD:Thạc sỹ Lê Đình Kha

1

4R2

330

98765432

1 111 1 1 1 1

L6L0 L1 L2 L3 L4 L5 L7

2 222 2

Với VCC = 5VDC , điện áp trung bình trên mỗi LED là 2V, dòng qua LED là10mA thì điện trở hạn dòng cho LED là:

Rled =5VDC − 2VDC = 300Ω 10mA

Chọn Rled = 330 Ω

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

87654321

LEDDON

2 2 2

Trang 69

Page 72: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG II : HIỂN THỊ LED 7 ĐOẠN

2.1 Các khái niệm cơ bản Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó cho người sử dụng vớithông số chỉ là các dãy số đơn thuần, thường người ta sử dụng "led 7 đoạn". Led 7 đoạnđược sử dụng khi các dãy số không đòi hỏi quá phức tạp, chỉ cần hiện thị số là đủ, chẳnghạn led 7 đoạn được dùng để hiển thị nhiệt độ phòng, trong các đồng hồ treo tường bằngđiện tử, hiển thị số lượng sản phẩm được kiểm tra sau một công đoạn nào đó... Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình và có thêmmột led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led 7 đoạn. Tám led đơn trên led 7 đoạn có Anode(cực +) hoặc Cathode(cực -) được nối chungvới nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8 cực còn lạitrên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài để kết nối vớimạch điện. Nếu led 7 đoạn có Anode(cực +) chung, đầu chung này được nối với +Vcc,các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khitín hiệu đặt vào các chân này ở mức 0. Nếu led 7 đoạn có Cathode(cực -) chung, đầuchung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển trạngthái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1.

Vì led 7 đoạn chứa bên trong nó các ledđơn, do đó khi kết nối cần đảm bảo dòng qua mỗiled đơn trong khoảng 10mA-20mA để bảo vệ led.Nếu kết nối với nguồn 5V có thể hạn dòng bằngđiện trở 330Ω trước các chân nhận tín hiệu điềukhiểnSơ đồ vị trí các led được trình bày như hìnhbên: Các điện trở 330Ω là các điện trở bên ngoàiđược kết nối để giới hạn dòng điện qua led nếuled 7 đoạn được nối với nguồn 5V. Chân nhận tínhiệu a điều khiển led a sáng tắt, ngõ vào b để điềukhiển led b. Tương tự với các chân và các led còn lại.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 70

Page 73: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

2.2 Kết nối với Vi Điều Khiển

Ngõ nhận tín hiệu điều khiển của led 7 đoạn có 8 đường, vì vậy có thể dùng 1 Portnào đó của Vi điều khiển để điều khiển led 7 đoạn. Như vậy led 7 đoạn nhận một dữ liệu8 bit từ Vi điều khiển để điều khiển hoạt động sáng tắt của từng led led đơn trong nó, dữliệu được xuất ra điều khiển led 7 đoạn thường được gọi là "mã hiển thị led 7 đoạn". Cóhai kiểu mã hiển thị led 7 đoạn: mã dành cho led 7 đoạn có Anode (cực +) chung và mãdành cho led 7 đoạn có Cathode (cực -) chung. Chẳng hạn, để hiện thị số 1 cần làm chocác led ở vị trí b và c sáng, nếu sử dụng led 7 đoạn có Anode chung thì phải đặt vào haichân b và c điện áp là 0V (mức 0) các chân còn lại được đặt điện áp là 5V(mức 1), nếusử dụng led 7 đoạn có Cathode chung thì điện áp (hay mức logic) hoàn toàn ngược lại,tức là phải đặt vào chân b và c điện áp là 5V (mức 1).

Bảng mã hiển thị led 7 đoạn:

Phần cứng được kết nối với 1 Port bất kì của Vi điều khiển, để thuận tiện cho việcxử lí về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a, Px.1 nối với chânb, lần lượt theo thứ tự cho đến Px.7 nối với chân h.

Dữ liệu xuất có dạng nhị phân như sau : hgfedcba

Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung (các led đơnsáng ở mức 0):

Số hiển thị trên led Mã hiển thị led 7 đoạn dạng7 đoạnnhị phân hgfedcba011000000111111001210100100310110000410011001510010010611000010711111000810000000910010000A10001000B10000011

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

Mã hiển thị led 7 đoạn dạngthập lục phân

C0F9A4B0999282F880908883

Trang 71

Page 74: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CDEF-

1100011010100001100001101000111010111111

C6A1868EBF

Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Cathode chung (các led đơn sángở mức 1):

Số hiển thị trên led Mã hiển thị led 7 đoạn dạng Mã hiển thị led 7 đoạn dạng7 đoạnnhị phânthập lục phân0001111113F100000110062010110115B3010011114F401100110665011011016D6011111017D700000111078011111117F9011011116FA0111011177B011111007CC0011100139D010111105EE0111100179F0111000171-0100000040

2.3 Giao Tiếp Vi Điều Khiển Với Nhiều Led 7 Đoạn :

Nếu kết nối mỗi một Port của Vi điều khiển với 1 led 7 đoạn thì tối đa kết nối được4 led 7 đoạn. Mặt khác nếu kết nối như trên sẽ hạn chế khả năng thực hiện các công việckhác của Vi điều khiển. Cho nên cần phải kết nối, điều khiển nhiều led 7 đoạn với số

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 72

Page 75: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

lượng chân điều khiển từ Vi điều khiển càng ít càng tốt. Có hai giải pháp: một là sử dụngcác IC chuyên dụng cho việc hiện thị led 7 đoạn, hai là kết nối nhiều led 7 đoạn vào cùngmột đường xuất tín hiệu hiển thị. Nội phần này sẽ đề cập đến cách kết nối nhiều led 7đoạn theo giải pháp thứ 2.

Mắt người có đặc điểm sinh lí là chỉ thu nhận 24 hình/giây để tổng hợp các hìnhảnh về thế giới xung quanh. Nếu một tín hiệu ánh sáng có chu kì sáng tắt hơn 24 lầntrong 1 giây, mắt người luôn cảm nhận đó là một nguồn sáng liên tục. Để minh họa chođiều này, bạn hãy lấy các chương trình đã thực hiện với led đơn và làm ngắn thời giandelay lại, đến một giá trị nào đó bạn sẽ thấy các led đều sáng liên tục.

Để kết nối nhiều led 7 đoạn vào vi điều khiển thực hiện như sau: nối tất cả các chânnhận tín hiệu của tất cả các led 7 đoạn (chân abcdefgh) cần sử dụng vào cùng 1 Port, 6led 7 đoạn có các chân nhận tín hiệu cùng được được nối với PC. Dùng các ngõ ra cònlại của Vi điều khiển điều khiển on/off cho led 7 đoạn, mỗi ngõ ra điều khiển ON/OFFcho 1 led 7 đoạn, (ON: led 7 đoạn được cấp nguồn để hiển thị, OFF: led 7 đoạn bị ngắtnguồn nên không hiển thị được).

60PA

615243342516

6RN3

4.7K

789101112

VCC

Q1A1015

Q2A1015

Q3A1015

Q4A1015

Q5A1015

Q6A1015

6LED1 6LED2 6LED3 6LED4 6LED5 6LED6

VCCVCCVCC VCC VCC VCC VCC VCCVCC

60PC

87654321

12345678

6RN2161514131211109

hgfedcba

VCC VCC

ABCDEFGH ABCDEFGH ABCDEFGHABCDEFGH ABCDEFGH

330 abcdef gh abcdef gh abcdef gh abcdef gh abcdef gh

Trong sơ đồ trên, led 7 đoạn được sử dụng là loại có Anode chung, với tất cả cácchân nhận tín hiệu được kết nối với Port C đã qua điện trở hạn dòng. Để điều khiển

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 73

ABCDEFGH

abcdef gh

VCC

Page 76: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

ON/OFF cho các led 7 đoạn, sử dụng transitor loại PNP, transitor này nhận dòng điềukhiển từ một ngõ ra của Vi điều khiển, led 7 đoạn sẽ được ON khi tín hiệu từ vi điềukhiển đến transitor ở mức 0. Có thể sử transitor loại A1015hoặc 2N3905 hoặc mộttransitor PNP khác có thông số phù hợp. Các điện trở 4.7K và điện trở treo 4.7K đảm bảotransitor luôn hoạt động ở chế độ bao hòa .Port A dùng để chọn led 7 đoạn (đảm bảo khiled 7 đoạn đang ở trạng thái OFF sẽ bị tắt hoàn toàn, không bị sáng mờ mờ).

Tại mỗi thời điểm, chỉ nên cho Vi điều khiển điều khiển cho 1 led 7 đoạn hoạtđộng, do đó tại mỗi thời điểm chỉ nên có 1 ngõ ra duy nhất nối với transitor ở mức 0. Tạimỗi thời điểm chỉ có một led 7 đoạn được ON nên sẽ không xảy ra tình trạng quá tải chotải và quá tải cho vi điều khiển khi điều khiển nhiều led 7 đoạn.

Trong sơ đồ kết nối trên, chẳng hạn cần hiển thị số 451, qui ước thứ tự các led 7được đếm từ phải sang trái, như vậy cần làm cho led 7 đoạn thứ nhất hiển thị số 1, led 7đoạn thứ hai hiện thị số 5, led 7 đoạn thứ 3 hiện thị số 4, các led còn lại không hiện thị.Đầu tiên OFF tất cả các led 7 đoạn. Kế tiếp xuất mã hiển thị led 7 đoạn để hiển thị số 1,ON led 7 đoạn thứ nhất, lúc này dòng điện chỉ đi qua led 7 đoạn thứ nhất, làm cho led 7đoạn thứ nhất hiển thị số 1, thời gian ON trong khoảng vài chục µs(1µs=1/10-6s). Kế tiếpxuất mã hiển thị led 7 đoạn hiển thị số 5, OFF led 7 đoạn thứ nhất và đồng thời ON led 7đoạn thứ 2, lúc này chỉ có led 7 đoạn thứ hai hiển thị và hiển thị số 5. Tiếp theo xuất mãhiển thị led 7 đoạn hiện thị số 4, OFF led 7 đoạn thứ hai và ON led 7 thứ ba, lúc này chỉduy nhất led 7 đoạn thứ ba hiển thị số 4. Cứ thế lặp lại quá trình trên liên tục. Thời gianON/OFF chỉ trong khoảng vài chục µs, và tại mỗi thời điểm chỉ có mỗi một led 7 đoạnhiện thị số của chính nó, vì vậy mắt người thấy 3 led 7 đoạn không sáng đứt quãng, màsáng liên tục, mỗi led hiển thị 1 số riêng của nó. Thực hiện tương tự để mở rộng số lượngled 7 đoạn cần sử dụng.

2.4 Lưu dồ giải thuật:

Bắt đầu

Quét led 1,2 …

Xuất dữ liệu

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 74

Page 77: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008

2.5 Mạch nguyên lý:

60PA

GVHD:Thạc sỹ Lê Đình Kha

615243342516

6RN3

4.7K

789101112

VCC

Q1A1015

Q2A1015

Q3A1015

Q4A1015

Q5A1015

Q6A1015

6LED1

VCC VCC

6LED2

VCC VCC

6LED3

VCC VCC

6LED4

VCC VCC

6LED5

VCC VCC

6LED6

VCC VCC

60PC

87654321

6RN212345678

161514131211109

hgfedcba

ABCDEFGHABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH

abcdef gh330 abcdef gh abcdef gh abcdef gh abcdef gh

Một led 7 đoạn do 8 led đơn ghép lại do đó điện trở hạn dòng cho led là 330Ω

5V

Để Led sáng bình thường thì: Ic = Iled =10mA.Ic8led =80mATa có: IC8 led = ICS = 80mAChọn β=80

IBS =

RB =

I CS

RBQ1

A1015

β= 1 mA ( IB=IBS ) 330

RC

VCC − VEB5 − 0 .8 == 4.2 KΩ IB1mA

LED

Chọn RB = 4.7 KΩ

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

ABCDEFGH

abcdef gh

Trang 75

Page 78: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG III : ĐÈN GIAO THÔNG

3.1 Giới thiệu: Giao thông là một vấn đề cơ bản của cuộc sống, tuy nhiên với tình hình giao thôngnhư hiện nay ở Việt Nam thì vấn đề này đã trở nên rất bức xúc đối với người tham giagiao thông. Khi tham gia giao thông, chúng ta sẽ phải chấp hành theo tín hiệu đèn giaothông. Vậy bạn có biết hệ thống đèn này hoạt động như thế nào ko? Với mục đích tìmhiểu sự hoạt động của một hệ thống đèn giao thông nhóm chúng em đã cố gắng viết mộtchương trình đơn giản. Với kiến thức về vi xử lý còn hạn chế, chắc chắn chương trình tôi viết sẽ còn nhiềusai sót, mong nhận được sự góp ý của người đọc. Chân thành cảm ơn!

Hoạt động của các đèn như hình:

X1 – Đ2T4

T1

Đ1 – V2V1 – Đ2

T3 Đ1 – X2 T2

Giản đồ xung:

X1

V1

Đ1

X2

V2

Đ2

T T T T T T

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 76

Page 79: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

3.2 Sơ đồ nguyên lý:

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 77

Page 80: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

3.3 Lưu đồ giải thuật:

BEGIN

Xanh 1 = 0, Đỏ 2 = 0

DL 7s

Đ

S

Vàng 1 = 0, Đỏ 2 = 0

DL 3s

Đ

S

Xanh 2 = 0, Đỏ 1 = 0

SDL 7s

Đ

Vàng 2 = 0, Đỏ 1 = 0

S

DL 3s

Đ

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 78

Page 81: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG IV : LED MA TRẬN

4.1 Hiển thị led Ma Trận

4.1.1 Giới Thiệu:

Led ma trận là một thuật ngữ quen thuộc ngày nay, nhưng ta nên lướt qua sự pháttriển và ứng dụng của các dụng cụ này:

Silicon carbide là vật liệu đầu tiên được ghi nhận là phát ra ánh sáng “lạnh” – từ“lạnh” ở đây dùng để phân biệt quá trình phát xạ từ sự bức xạ đen mà vật liệu nóng lênkhi có dòng điện đi qua. Cho đến gần 1940, người ta nhận thấy miền phát sáng là tiếpxúc p-n. Những công trình trước năm 1950 đã báo cáo là sự phát sáng có từ nhiều vậtliệu dùng các diode bán dẫn kim loại tiếp xúc điểm: GaP, GaAs, GaSb, InP và Ge, Si.Rồi đi đến bước kế tiếp dùng bán dẫn hỗn hợp (compound semiconductor) để có đượcánh sáng ra nhiều hơn.

Các ứng dụng của led ma trận như dùng để chỉ thị, hiển thị, làm nguồn sáng trongcác máy in laser, và quan trọng hơn là các led ma trận được sử dụng rộng rãi trong các hệthống thông tin dựa vào quang sợi. Sự lựa chọn vật liệu quyết định màu của ánh sáng phát ra. Với các hiển thị và bộ chỉthị thì cần có các led ma trận ánh sáng thấy được, trái lại với thông tin quang sợi cần cómất mát thấp, tán xạ thấp trong sợi và khả dụng các bộ phát hiện thích hợp. Led ma trận được coi là một trong các nguồn quang điện tử, phổ biến nhất. Nókhông đắt, tiêu thụ ít công suất, và dễ dàng thích hợp cho các mạch điện tử.

4.1.2 Led Ma Trận 8x8:

Led matrix là led ma trận hiển thị bao gồm nhiều led ma trận nhỏ kết hợp lại tạothành một ma trận gồm m cột và n hàng (led ma trận m×n). Led ma trận 8×8 là led matrận gồm có 8 cột và 8 hàng. Led ma trận này có hai loại: loại thứ nhất là commoncathode (cathode chung – cột cathode, hàng anode), loại thứ hai là common anode(anode chung – cột anode, hàng cathode).

• Sơ đồ chân ra và hình dạng thực tế:

12 9 6 313161922

U1 matrix 8x8

Hình 4.1 : Hình dạngthực tế và sơ đồ chânled ma trận 8 x 8.

h1h2h3h4h5h6h7h8

c1 c2 c3 c4 c5 c6 c7 c8

10741

15 18 21 24

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 79

Page 82: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

(a) (b)

Hình 4.2: Sơ đồ cấu trúc bên trong của led ma trận: (a) cathode chung, (b) anode chung.

4.2 Phương Pháp Hiển Thị Dùng IC Chốt:

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áchthức quét và hiển thị một cách linh hoạt và nhanh chóng.

23456789

11 1

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

1918171615141312

matrix_3mauDM74LS573

2421181514710

1213141516171819

Q7Q6Q5Q4Q3Q2Q1Q0

DM74LS573

OELE

Q0Q1Q2Q3Q4Q5Q6Q7

1918171615141312

U7

2320171425811

DM74LS573

LEOED0D1D2D3D4D5D6D7D7D6D5D4D3D2D1D0

hx8hx7hx6hx5hx4hx3hx2hx1

111111

hd8hd7hd6hd5hd4hd3hd2hd1

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

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

98765432 23456789

c1c2c3c4c5c6c7c8

1296313161922

Trang 80

Page 83: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

4.2.1 Chốt Hàng:

Chốt hàng là phương pháp trong một khoảngthờ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 đượchiển thị trên màn hình led ma trận. Sau đó dữ liệukế tiếp được đưa ra 8 hàng và được chốt lại bởi mộtIC chốt khác, trong khi đó dữ liệu trước đó vẫn hiệndiện tại ngõ ra của IC chốt. Như vậy dữ liệu củahà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ệndiện trên hàng mà không bị mất đi. Việc thực hiệnchốt hàng được thể hiện ở lưu đồ như sau:

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

4.2.2 Chốt Cột:

Chốt cột là phương pháp trong mộtkhoả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ồichốt lại, dữ liệu được hiển thị trên màn hìnhLed ma trận. Sau đó dữ liệu được đưa ra 8 cộtkế 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ạingõ ra của IC chốt (dữ liệu vẫn hiện diện tạicá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ácdữ liệu của các cột khác vẫn hiện diện trên cộtmà không bị mất đi. Việc thực hiện chốt cộtđược thể hiện ở lưu đồ như sau:

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

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 81

Page 84: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Phương Pháp Hiển Thị Led Ma Trận Sử Dụng IC Chốt:

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

4.3 Phương Pháp Dùng Thanh Ghi Dịch:

4.3.1 Quét Hàng:

4.3.1.1 Giới thiệu chung về phương pháp quét hàng.

Phương pháp 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 độ > 25hì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.

Vdd

R2

R

Vdd

R3

RR10 R

HB.0

R14 R

Q5

Q1

R11 R

Q2

HB.1

R15 R

Q6

H1

Vdd

R25

R

H2

Vdd

R26

RR34 RR33 R

R38 R

H8H7H6H5H4H3H2H1

1296313161922

Q12

HB.5

Q13

H6 matrix_3mau

H5

Vdd

R4

RR12 R

2421181514710Vdd

R5

171615147654

SDO DRAIN0DRAIN1DRAIN2DRAIN3DRAIN4DRAIN5DRAIN6DRAIN7

HB.2

R16 R

Q7 HB.3

R17 R

Q8

GSRCLR SRCLRG

1213 1312Vdd

R23

R

Vdd

SDI

89

R24

R

Q10R31 R R32 R

R37 RHB.7

Q11

HB.6

R36 R

Q14

H7

Q15

H8

Hình 4.6: Sơ đồ mạch thanh ghi.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 82

3 98 3

SDIH3 H4

RCLKSRCLK SRCLKRCLK

DRAIN7DRAIN6DRAIN5DRAIN4DRAIN3DRAIN2DRAIN1DRAIN0TPIC6B595

TPIC6B595

SDOQ3

R13 R 18 456714151617 18

U9

R

Q4

2320171425811

U10

hx8hx7hx6hx5hx4hx3hx2hx1hd8hd7hd6hd5hd4hd3hd2hd1

c1c2c3c4c5c6c7c8HB.4 Q16

R39 R

Q17

Page 85: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

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

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 trongviệ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.

VD: Đưa dữ liệu ra 8 cột được diễn ra như sau.

Hình 4.7: Qui trình đưa dữ liệu ra 8 cột cho led ma trận.

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àngthứ 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 man 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 đilặp lại > 25lần/1s, đến đây chúng ta quan sát được một hình ảnh liên tục hiển thị trênmàn hình Led ma trận.4.3.1.3.Ví dụ:

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

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 83

Page 86: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Hàng 1

Cột 8Hình 4.8: Hiển thị chữ B trên led ma trận dùng phương pháp quét hàng.

Dữ liệu thứ nhất có gía trị: 11111111 được đưa ra cột tích cực hàng thứ nhất (điềukhiển hàng thứ nhất cho ra giá trị là 1); dữ liệu thứ hai có giá trị: 00001111 đưa ra cột,tích cực hàng thứ hai; dữ liệu thứ 3 có giá trị: 01110111 đưa ra cột, tích cực hàng thứ 3;dữ liệu thứ 4 có giá trị: 01110111 đưa ra cột, tích cực hàng thứ 4; tiếp tục dữ liệu hàngthứ 5 có giá trị: 00001111 đưa ra cột, tích cực hàng thứ 5; kế tiếp là dữ liệu của hàng thứ6 có giá trị: 01110111 được đưa ra cột, tích cực hàng thứ 6 ; dữ liệu của hàng thứ 7 cógiá trị: 01110111 đưa ra cột, tích cực hàng thứ 7; dữ liệu thứ 8 có giá trị: 00001111 đưara cột, tích cực hàng thứ 8. Như vậy toàn bộ dữ liệu của chữ B đã đượ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/ 1s nên chúngta có cảm giác nó diễn ra một cách đồng thời nhờ đó mà chúng ta quan sát được trên mànhình Led ma trận là một chữ B liên tục.

4.3.2 Quét Cột:

4.3.2.1 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íchcự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 độ >25hì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.

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

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 đượchiển thị trên màn 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ìnhLed ma trận.

4.3.2.3.Ví dụ:

Hiển thị chữ B lên màn hình Led ma trận (hàng được tích cực ở mức1, cột được tíchcực ở mức 0).

Hàng 8

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 84

Page 87: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Hàng 1

Hàng 8Cột 8

Cột 1Hình 4.9: Hiển thị chữ B trên led ma trận dùng phương pháp quét cột.

Dữ liệu thứ nhất có gía trị: 11111110 được đưa ra hàng, tích cực cột thứ nhất (điềukhiển cột thứ nhất cho ra giá trị là 0); dữ liệu thứ hai có giá trị: 10010010 đưa ra hàng,tích cực cột thứ hai; dữ liệu thứ 3 có giá trị: 10010010 đưa ra hàng, tích cực cột thứ 3; dữliệu thứ 4 có giá trị: 10010010 đưa ra hàng, tích cực cột thứ 4; tiếp tục đữ liệu hàng thứ 5có giá trị: 01101100 đưa ra hàng, tích cực cột thứ 5; kế tiếp là dữ liệu của cột thứ 6 cógiá trị: 00000000 được đưa ra hàng, tích cực côt thứ 6 ; dữ liệu của cột thứ 7 có giá trị:00000000 đưa ra hàng, tích cực cột thứ 7; dữ liệu thứ 8 có giá trị: 00000000 đưa ra hàng,tích cực cột thứ 8. Như vậy toàn bộ dữ liệu của chữ B đã được đưa ra hiển thị trên mànhình Led ma trận. Quá trình trên được diễn ra rất nhanh > 24lần/ 1s nên chúng ta có cảmgiá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 matrậnlà một chữ B liên tục. Phương pháp hiển thị Led ma trận sử dụng thanh ghi dị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.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 85

Page 88: Kilo Book

VCC

b1

b2Q1A1015

b3Q2A1015

b4Q3A1015

b5Q4A1015

c4

b6Q5A1015

Q6 b7A1015

b8Q7A1015

c7

Q8A1015

4.4 Mạch nguyên lý:

c1

c2

c3

c5

c6

c8

90PD

9RN

VCC

b9

b10Q9A1015

Đồ Án Tốt Nghiệp Khóa 2005 – 2008

5271128149

87654321

9RN3

MTRAN1

87654321

12345678

12345678

161514131211109

161514131211109

330

b8b7b6b5b4b3b2b1

90PB

GVHD:Thạc sỹ Lê Đình Kha

4k7

h8h7h6h5h4h3h2h1

1334106111516

h8h7h6h5h4h3h2h1

h8h7h6h5h4h3h2h1

1334106111516

5271128149

MTRAN2

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

Q10 b11A1015

Q13 b14A1015

c13

c10

Q11 b12A1015

Q12 b13A1015

Q14 b15A1015

Q15 b16A1015

c14

c15

Q16A1015

87654321

c9

12345678

161514131211109

b16b15b14b13b12b11b10b9

c11

c12

c16

4k7

c1c2c3c4 c5c6c7c8

c9c10 c12 c14 c16 c11 c13 c15

90PC

9RN2

Trang 86

Page 89: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG V : LCD(Liquid Crystal Display)

5.1 Giới Thiệu Chung Về LCD Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1 làhai loại LCD thông dụng.

Hình 1 : Hình dáng của hai loại LCD thông dụng Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (như HD44780) bêntrong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số thứ tự vàđặt tên như hình 2 :

Hình 2 : Sơ đồ chân của LCD2> Chức năng các chân : Tên Chân Và Chức Năng

Chân Số

1

2

3

Tên

VSS

VDD

Vee

Chức NăngChân nối đất cho LCD.

Chân cấp nguồn cho LCD.

Chân này dùng để điều chỉnh độ tương phản củaLCDChân chọn thanh ghi (Register select). Nối chânRS với logic “0” (GND) hoặc logic “1” (VCC)để chọn thanh ghi. + Logic “0”: Bus DB0-DB7 sẽ nối với thanhghi lệnh IR của LCD (ở chế độ “ghi”-write)hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ“đọc” - read). + Logic “1”: Bus DB0-DB7 sẽ nối với thanh

Trang 87

4RS

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

Page 90: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

ghi dữ liệu DR bên trong LCD.

5 R/W Chân chọn chế độ đọc/ghi (Read/Write). Nốichân R/W với logic “0” để LCD hoạt động ởchế độ ghi, hoặc nối với logic “1” để LCD ởchế độ đọc.

Chân cho phép (Enable). Sau khi các tín hiệuđược đặt lên bus DB0-DB7, các lệnh chỉ đượcchấp nhận khi có 1 xung cho phép của chân E.+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCDchuyển vào (chấp nhận) thanh ghi bên trong nókhi phát hiện một xung (high-to-low transition)của tín hiệu chân E.+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất raDB0-DB7 khi phát hiện cạnh lên (lowto-hightransition) ở chân E và được LCD giữ ở bus đếnkhi nào chân E xuống mức thấp.

Tám đường của bus dữ liệu dùng để trao đổithông tin với MPU. Có 2 chế độ sử dụng 8đường bus này :+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8đường, với bit MSB là bit DB7.+ Chế độ 4 bit : Dữ liệu được truyền trên 4đường từ DB4 tới DB7, bit MSB là DB7

6E

7-14DB0-DB7

.Bảng 1 : Chức năng các chân của LCD

* Ghi chú : Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các chânDBx.Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD thôngqua các chân DBx.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 88

Page 91: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

3> Sơ khối của HD44780:Hình 3 : Sơ đồ khối của HD44780

đồ

5.1.1 Các thanh ghi : Chíp HD44780 có 2 thanh ghi 8 bit quan trọng : Thanh ghi lệnh IR (InstructorRegister) và thanh ghi dữ liệu DR (Data Register) - Thanh ghi IR : Để điều khiển LCD, người dùng phải “ra lệnh” thông qua támđường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng. Ngườidùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR. Nghĩa là, khi ta nạpvào thanh ghi IR một chuỗi 8 bit, chíp HD44780 sẽ tra bảng mã lệnh tại địa chỉ mà IRcung cấp và thực hiện lệnh đó.VD : Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7…DB0)Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110 - Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAMDDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM nàygởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông tin vào DR, mạch nội bêntrong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM. Hoặc khi thông tin

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 89

Page 92: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng RAM nội sẽ được chuyển raDR để truyền cho MPU. - Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2 thanhghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối với hai chân RSvà R/W theo mục đích giao tiếp.

Bảng 2 : Chức năng chân RS và R/W theo mục đích sử dụng 5.1.2 Cờ báo bận BF: (Busy Flag) Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảngthời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế, LCD bỏqua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0,R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong việc, nó sẽ đặt cờBF lại mức 0. 5.1.3 Bộ đếm địa chỉ AC : (Address Counter) Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM(DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối với 2 vùngRAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tinđược nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương tác đã đượcbao hàm trong mã lệnh. Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi) 1 đơn vị vànội dung của AC được xuất ra cho MPU thông qua DB0-DB6 khi có thiết lập RS=0 vàR/W=1 (xem bảng tóm tắt RS - R/W).Lưu ý: Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh mà được cậpnhật sau khi cờ BF lên mức cao (not busy), cho nên khi lập trình hiển thị, bạn phải delaymột khoảng tADD khoảng 4uS- 5uS (ngay sau khi BF=1) trước khi nạp dữ liệu mới. Xemthêm hình bên dưới.

Hình 4 : Giản đồ xung cập nhật AC 5.1.4 Vùng RAM hiển thị DDRAM : (Display Data RAM) Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ôkí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD sẽ hiển thị tạivị trí tương ứng trên màn hình một kí tự có mã 8 bit mà bạn đã cung cấp. Hình sau đây sẽtrình bày rõ hơn mối liên hệ này.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 90

Page 93: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Hình 4 : Mối liên hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8 bit. Những vùngRAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM đa mục đích.Lưu ý là để truy cập vào DDRAM, ta phải cung cấp địa chỉ cho AC theo mã HEX 5.1.5 Vùng ROM chứa kí tự CGROM: Character Generator ROM Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự, vàđịnh địa chỉ bằng 8 bit. Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mẫu kí tự kiểu5x10 (tổng cộng là 240 thay vì 28 = 256 mẫu kí tự). Người dùng không thể thay đổi vùngROM này.

Hình 5 : Mối liên hệ giữa địa chỉ của ROM và dữ liệu tạo mẫu kí tự. Như vậy, để có thể ghi vào vị trí thứ x trên màn hình một kí tự y nào đó, ngườidùng phải ghi vào vùng DDRAM tại địa chỉ x (xem bảng mối liên hệ giữa DDRAM và vịtrí hiển thị) một chuỗi mã kí tự 8 bit trên CGROM. Chú ý là trong bảng mã kí tự trongCGROM ở hình bên dưới có mã ROM A00.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 91

Page 94: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Ví dụ : Ghi vào DDRAM tại địa chỉ “01” một chuỗi 8 bit “01100010” thì trên LCD tại ôthứ 2 từ trái sang (dòng trên) sẽ hiển thị kí tự “b”.

Bảng 3 : Bảng mã kí tự (ROM code A00) 5.1.6 Vùng RAM chứa kí tự đồ họa CGRAM : (Character Generator RAM) Như trên bảng mã kí tự, nhà sản xuất dành vùng có địa chỉ byte cao là 0000 đểngười dùng có thể tạo các mẫu kí tự đồ họa riêng. Tuy nhiên dung lượng vùng này rấthạn chế: Ta chỉ có thể tạo 8 kí tự loại 5x8 điểm ảnh, hoặc 4 kí tự loại 5x10 điểm ảnh. Đểghi vào CGRAM, hãy xem hình 6 bên dưới.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 92

Page 95: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Hình 6 : Mối liên hệ giữa địa chỉ của CGRAM, dữ liệu của CGRAM, và mã kí tự.4> Tập lệnh của LCD : Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp vớiLCD : * Tuy trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập trình điềukhiển LCD ta chỉ có thể tác động trực tiếp được vào 2 thanh ghi DR và IR thông qua cácchân DBx, và ta phải thiết lập chân RS, R/W phù hợp để chuyển qua lại giữ 2 thanh ghinày. (xem bảng 2) * Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này có thể khálâu đối với tốc độ của MPU, nên ta cần kiểm tra cờ BF hoặc đợi (delay) cho LCD thựcthi xong lệnh hiện hành mới có thể ra lệnh tiếp theo. * Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có lệnh ghi vàoRAM. (Điều này giúp chương trình gọn hơn) * Các lệnh của LCD có thể chia thành 4 nhóm như sau :• Các lệnh về kiểu hiển thị. VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit /4 bit), …

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 93

Page 96: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

• Chỉ định địa chỉ RAM nội. • Nhóm lệnh truyền dữ liệu trong RAM nội. • Các lệnh còn lại . (!!!)5.2 Tập lệnh của LCD

Tên lệnhClearDisplay

Hoạt độngMã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 0 0 0 0 1Lệnh Clear Display (xóa hiển thị) sẽ ghi một khoảng trống-blank (mã hiển kí tự 20H) vào tất cả ô nhớ trong DDRAM,sau đó trả bộ đếm AC=0, trả lại kiểu hiện thị gốc nếu nó bịthay đổi. Nghĩa là : Tắt hiển thị, con trỏ dời về góc trái (hàngđầu tiên), chế độ tăng ACMã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 0 0 0 1 *Lệnh Return home trả bộ đếm địa chỉ AC về 0, trả lại kiểuhiển thị gốc nếu nó bị thay đổi. Nội dung của DDRAMkhông thay đổiMã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 0 0 1 [I/D] [S]I/D : Tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiểnthị AC 1 đơn vị mỗi khi có hành động ghi hoặc đọc vùngDDRAM. Vị trí con trỏ cũng di chuyển theo sự tăng giảmnày.S : Khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải(I/D=0) hoặc sang trái (I/D=1) mỗi khi có hành động ghivùng DDRAM. Khi S=0: không dịch nội dung hiển thị.Nội dung hiển thị không dịch khi đọc DDRAM hoặc đọc/ghivùng CGRAM.

Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 0 1 [D] [C] [B]D: Hiển thị màn hình khi D=1 và ngược lại. Khi tắt hiển thị,nội dung DDRAM không thay đổi.C: Hiển thị con trỏ khi C=1 và ngược lại. Vị trí và hình dạngcon trỏ, xem hình 8B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại.Xem thêm hình 8 về kiểu nhấp nháy. Chu kì nhấp nháykhoảng 409,6ms khi mạch dao động nội LCD là 250kHz.

Returnhome

Entrymode set

Displayon/offcontrol

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 94

Page 97: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Hình 8: Kiểu con trỏ, kiểu kí tự và nhấp nháy kí tự

Cursorordisplayshift

Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 1 [S/C] [R/L] * *Lệnh Cursor or display shift dịch chuyển con trỏ hay dữ liệuhiển thị sang trái mà không cần hành động ghi/đọc dữ liệu.Khi hiển thị kiểu 2 dòng, con trỏ sẽ nhảy xuống dòng dướikhi dịch qua vị trí thứ 40 của hàng đầu tiên. Dữ liệu hàng đầuvà hàng 2 dịch cùng một lúc. Chi tiết sử dụng xem bảng bêndưới: S/C R/L Hoạt động :

Functionset

Bảng 5: Hoạt động lệnh Cursor or display shiftMã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 1 [DL] [N] [F] * *DL: Khi DL=1, LCD giao tiếp với MPU bằng giao thức 8 bit(từ bit DB7 đến DB0).Ngược lại, giao thức giao tiếp là 4 bit (từ bit DB7 đến bitDB0). Khi chọn giao thức 4 bit, dữ liệu được truyền/nhận 2lần liên tiếp. với 4 bit cao gởi/nhận trước, 4 bit thấp gởi/nhậnsau.N : Thiết lập số hàng hiển thị. Khi N=0 : hiển thị 1 hàng,N=1: hiển thị 2 hàng.F : Thiết lập kiểu kí tự. Khi F=0: kiểu kí tự 5x8 điểm ảnh,F=1: kiểu kí tự 5x10 điểm ảnh..* Chú ý:• Chỉ thực hiện thay đổi Function set ở đầu chương trình.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 95

Page 98: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Và sau khi được thực thi 1 lần, lệnh thay đổi Function setkhông được LCD chấp nhận nữa ngoại trừ thiết lậpchuyển đổi giao thức giao tiếp.• Không thể hiển thị kiểu kí tự 5x10 điểm ảnh ở kiểu hiểnthị 2 hàng

SetCGRAMaddress

.SetDDRAMaddress

Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 1 [ACG][ACG][ACG][ACG][ACG][ACG]Lệnh này ghi vào AC địa chỉ của CGRAM. Kí hiệu [ACG]chỉ 1 bit của chuỗi dữ liệu 6 bit. Ngay sau lệnh này là lệnhđọc/ghi dữ liệu từ CGRAM tại địa chỉ đã được chỉ định.

Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 1 [AD] [AD] [AD] [AD] [AD] [AD] [AD]Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cầnthiết lập tọa độ hiển thị mong muốn. Ngay sau lệnh này làlệnh đọc/ghi dữ liệu từ DDRAM tại địa chỉ đã được chỉ định.Khi ở chế độ hiển thị 1 hàng, địa chỉ có thể từ 00H đến 4FH.Khi ở chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H chohàng thứ nhất, và từ 40h đến 67h cho hàng thứ 2.

Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = [BF] [AC] [AC] [AC] [AC] [AC] [AC] [AC] (RS=0,R/W=1)Như đã đề cập trước đây, khi cờ BF bật, LCD đang làm việcvà lệnh tiếp theo (nếu có) sẽ bị bỏ qua nếu cờ BF chưa vềmức thấp. Cho nên, khi lập trình điều khiển, bạn phải kiểmtra cờ BF trước khi ghi dữ liệu vào LCD.Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit[AC]. Nó là địa chỉ của CG hay DDRAM là tùy thuộc vàolệnh trước đó

Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = [Write data] (RS=1, R/W=0)Khi thiết lập RS=1, R/W=0, dữ liệu cần ghi được đưa vàocác chân DBx từ mạch ngoài sẽ được LCD chuyển vào trongLCD tại địa chỉ được xác định từ lệnh ghi địa chỉ trước đó(lệnh ghi địa chỉ cũng xác định luôn vùng RAM cần ghi).Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy theothiết lập Entry mode.Lưu ý là thời gian cập nhật AC khôngtính vào thời gian thực thi lệnh.Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = [Read data] (RS=1, R/W=1)Khi thiết lập RS=1, R/W=1,dữ liệu từ CG/DDRAM đượcchuyển ra MPU thông qua các chân DBx (địa chỉ và vùngRAM đã được xác định bằng lệnh ghi địa chỉ trước đó).

Trang 96

Read BFandaddress

Writedata toCG orDDRAM

Readdatafrom CGorDDRAM

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

Page 99: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Sau khi đọc, AC tự động tăng/giảm 1 tùy theo thiết lập Entrymode, tuy nhiên nội dung hiển thị không bị dịch bất chấp chếđộ Entry mode.

5> Giao tiếp giữa LCD và MPU : Đặc tính điện của các chân giao tiếp : LCD sẽ bị hỏng nghiêm trọng, hoặc hoạt động sai lệch nếu bạn vi phạm khoảng đặctính điện sau đây:

Bảng 6 : Maximun Rating

Đặc tính điện làm việc điển hình: (Đo trong điều kiện hoạt động Vcc = 4.5V đến5.5V, T = -30 đến +75C)5.3 Khởi tạo LCD6> Khởi tạo LCD: Khởi tạo là việc thiết lập các thông số làm việc ban đầu. Đối với LCD, khởi tạogiúp ta thiết lập các giao thức làm việc giữa LCD và MPU. Việc khởi tạo chỉ được thựchiện 1 lần duy nhất ở đầu chương trình điều khiển LCD và bao gồm các thiết lập sau :• Display clear : Xóa/không xóa toàn bộ nội dung hiển thị trước đó.• Function set : Kiểu giao tiếp 8bit/4bit, số hàng hiển thị 1hàng/2hàng, kiểu kí tự5x8/5x10.• Display on/off control: Hiển thị/tắt màn hình, hiển thị/tắt con trỏ, nhấp nháy/khôngnhấp nháy.• Entry mode set : các thiết lập kiểu nhập kí tự như: Dịch/không dịch, tự tăng/giảm(Increment). 5.3.1 Mạch khởi tạo bên trong chíp HD44780: Mỗi khi được cấp nguồn, mạch khởi tạo bên trong LCD sẽ tự động khởi tạo cho nó.Và trong thời gian khởi tạo này cờ BF bật lên 1, đến khi việc khởi tạo hoàn tất cờ BF còngiữ trong khoảng 10ms sau khi Vcc đạt đến 4.5V (vì 2.7V thì LCD đã hoạt động). Mạchkhởi tạo nội sẽ thiết lập các thông số làm việc của LCD như sau:• Display clear : Xóa toàn bộ nội dung hiển thị trước đó.• Function set: DL=1 : 8bit; N=0 : 1 hàng; F=0 : 5x8• Display on/off control: D=0 : Display off; C=0 : Cursor off; B=0 : Blinking off.• Entry mode set: I/D =1 : Tăng; S=0 : Không dịch.Như vậy sau khi mở nguồn, bạn sẽ thấy màn hình LCD giống như chưa mở nguồn dotoàn bộ hiển thị tắt. Do đó, ta phải khởi tạo LCD bằng lệnh. 5.3.2 Khởi tạo bằng lệnh: (chuỗi lệnh) Việc khởi tạo bằng lệnh phải tuân theo lưu đồ sau của nhà sản xuất

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 97

Page 100: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 98

Page 101: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Như đã đề cập ở trên, chế độ giao tiếp mặc định của LCD là 8bit (tự khởi tạo lúcmới bật điện lên). Và khi kết nối mạch theo giao thức 4bit, 4 bit thấp từ DB0-DB3 khôngđược kết nối đến LCD, nên lệnh khởi tạo ban đầu (lệnh chọn giao thức giao tiếp –function set 0010****) phải giao tiếp theo chế độ 8 bit (chỉ gởi 4 bit cao một lần, bỏ qua4 bit thấp). Từ lệnh sau trở đi, phải gởi/nhận lệnh theo 2 nibble. Lưu ý là sau khi thiết lập function set, bạn không thể thay đổi function set ngoại trừthay đổi giao thức giao tiếp (4bit/8bit).5.4 Lưu đồ giải thuật:

Bắt đầu

Init LCD

Gởi Data

Hiển thị

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 99

Page 102: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

5.5 Mạch nguyên lý:

VCC

J3 LCD

12345678

2

7 8 91011121314

D0D1D2D3D4D5D6D7

VDD

V0 3 2

1

3VR10K

RSR/WE

AK

456

CON81516

LCDVSS

J4

54321

CON5

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

1

3

Trang 100

Page 103: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG VI : ADC

6.1 Giới thiệu về module ADC. 6.1.1 Cơ bản về ADC. Trong cuộc sống của chúng ta, những tín hiệu mà chúng ta thường tiếp cận là tínhiệu tương tự , ví dụ như tiếng nói, sóng điện thoại, vv... Nếu chúng ta xử lý trực tiếp tínhiệu tương tự này thì rất khó, vì vậy cần thiết phải chuyển đổi chúng sang dạng số. Biến đổi tương tự – số (analog – digital) là thành phần cần thiết trong việc xử lýthông tin và các cách điều khiển sử dụng phương pháp số. Tín hiệu thực ở Analog. Mộthệ thống tiếp nhận dữ liệu phải có các bộ phận giao tiếp Analog – Digital (A/D). Các bộ chuyển đổi tương tự số, viết tắt là ADC thực hiện hai chức năng cơ bản làlượng tử hóa và mã hóa. Lượng tử hóa là gán cho những mã nhị phân cho từng giá trị rờirạc sinh ra trong quá trình lượng tử hóa Biến đổi AD có tính chất tỉ lệ. Tín hiệu vào Analog được biến đổi thành một phânsố X bằng cách so sánh với tín hiệu tham chiếu Vref. Đầu ra của bộ ADC là mã của phânsố này. Bất kỳ một sai số tín hiệu Vref nào cũng sẽ dẫn đến sai số mức ra, vì vậy ngườita cố gắn giữ cho Vref càng ổn định càng tốt. Vref

Vin ADOUTPUT_a(0 B111110);C

Digital output

Hình 2.1 Quan hệ vào ra các khối ADC Nếu bộ ADC xuất mã ra gồm n bit thì số mức ra rời rạc là 2n. Đối với quan hệ tuyếntính, tần vào được lượng tử hóa theo đúng mức này. Mỗi mức như vậy là một tín hiệuAnalog được phân biệt với hai mã kế tiếp nhau, nó chính là kích thước của LSB (LeastSignificant Bit).

Q=LSB=

Trong đó :

FS2n

Q: Lượng tử LSB : Bit có trọng số thấp nhất FS : Giá trị toàn thang Tất cả các giá trị Analog của lượng tử Q được biểu diễn bởi mã số, mà mã nàytương ứng với giá trị trung bình của lượng tử (có thể hiểu là giữa khoảng LSB) gọi làmức ngưỡng. Các giá trị Analog nằm trong khoảng từ mức ngưỡng sai biệt đi ± ½ LSBvẫn được thể hiện bằng cùng một mã, đó là sai số lượng tử hóa. Sai số này có thể sẽ giảmđi bằng cách tăng số bit trong mã ra bộ ADC.

Sau đây tôi sẽ trình bày nguyên tắc chuyển đổi:

- Bước 1 : Lấy mẫu tí hiệu n tương tự ( tức là rời rạc hóa tín hiệu tương tự ) cụ thể làđiều chế biên độ pha (PWM)

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 101

Page 104: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Tần số lẫy mẫu càng cao thì độ chính xác của rời rạc hóa là càng cao và ngược lại,nếu tần số lấy mẫu càng lớn thì cần lượng dữ liệu lớn do đó cần bộ nhớ lớn và khi đó xửlý sẽ rất phức tạp.

Tần số lẫy mẫu >= 2 lần tần số cao nhất của tín hiệu ( tránh hiện tượng gập phổ ) - Bước 2 : Lượng tử hóa các xung được lấy mẫu .( mã hóa ) tức là điều chế xungPCM. Lượng tử hóa ở đây có nghĩa là dùng một thước đo với k bậc nhị phân ( tức là 2^kkhoảng bằng nhau ) để đo các xung được lấy mẫu ví dụ

Từ đó ta được các số tương ứng với xung và nó được thể hiện qua các số nhị phân vídụ với k = 8 ( tức là biểu diễn số này dựa vào 8bit ) ta muốn biểu diễn số 9 số nhị phântương ứng là: 0 0 0 0 1 0 0 1 trong đó bít đầu tiên là MSB làm dấuMáy tính sẽ thu nhận giá trị này rồi thực hiện việc lưu trữ , xử lý.

6.1.2 ADC trong PIC 16F877A Trên VĐK có một bộ biến đổi ADC 10bit, 8 ngõ vào Analog, 8 ngõ vào này đượcnối với ngõ vào của bộ chuyển đổi. Sau đó bộ chuyển đổi sẽ tạo ra một kết quả 10 bittương ứng với giá trị Ananlog đầu vào. Điện thế tham chiếu đầu vào sẽ được lựa chọn

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 102

Page 105: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

bằng phần mềm (từ Vdd, Vss hoặc 2 chân AN2, AN3. Module ADC là module duy nhấtcó khả năng hoạt động trong chế độ ngủ. Để hoạt động trong chế độ ngủ Sleep, xungclock cung cấp cho ADC phải được nhận từ dao động nội RC của ADC. Một bộ ADC cơ bản gồm có: • Ngõ vào VIN. • Điện áp chuẩn VREF.

• Các bit ngõ ra.Quan hệ các đại lượng này có thể mô tả như sau:

N=(VIN / VREF).NMax

Với: N : Chuyển đổi thập phân của các bit ngõ ra NMax :Giá trị thập phân lớn nhât tại ngõ ra .Nmax phụ thuộc vào số lượng bit tại ngõ ra của ADCVí dụ :sử dụng ADC 8 bit thì giá trị Nmax =28 – 1 =255Khi đó : N=(VIN / VREF).255

6.2 Sơ đồ nguyên lý:

L0

VCC 2

L1

2

1

11DX 1R46

10K 1R47

1U1

1 2 3 4 5 6 7 8 91011121314151617181920

MCLR/VPPRB7/PGDRA0/AN0RB6/PGCRA1/AN1RB5RA2/AN2/VRef -/CVRef RB4RA3/AN3/VRef + RB3/PGMRA4/T0CKI/C1OUTRB2RA5/AN4/SS/C2OUTRB1 RB0/INTRE0/RD/AN5 VDDRE1/WR/AN6 GNDRE2/CSAN7VDDRD7/PSP7GNDRD6/PSP6OSC1/CLKIRD5/PSP5 RD4/PSP4OSC2/CLKORC0/T1OSO/T1CKI RC7/RX/DTRC1/T1OSI/CCP2 RC6/TX/CKRC2/CCP1RC5/SDORC3/SCK/SCL RC4/SDI/SDARD0/PSP0RD3/PSP3RD1/PSP1RD2/PSP2

L2VCC

4R2

98765432

1C7

1RS 104

VCC 100

VR 10K

1Y1

1C8

33p

1C9

33p

40393837363534333231 VCC30292827262524232221

2

L3

2

1

1

1

L4

2 1

L5

2

L6

2

1

1330

L7

2 1

Với Vcc = 5V.Biến trở VR=10k

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 103

Page 106: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG VII : BÀN PHÍM GIAO TIẾP LCD

7.1 Keypad Và Nguyên Lý Hoạt Động Một bàn phím số Hex được thành lập từ 16 nút nhấn đơn. Các nút nhấn này đượcnối vào vi điều khiển. Khi thực hiện kiểm tra phím nhấn, vấn đề cần thiết là phải thựchiện chống rung phím và chống nhiễu. Quá trình chống rung phím và chống nhiễu có thểthực hiện bằng phần mềm: Do thời gian rung phím vào khoảng 20ms nên quá trìnhchống rung bằng phần mềm đơn giản là tạo một thời gian chờ đủ lớn để chương trình bỏqua ảnh hưởng khi rung phím và chống nhiễu.5V

R410k

R310k

R210k

R110k

7

4

1

8

5

2

0

9

6

3

#

A

B

C

DJ1

87654321

PORT B

*

Để phát hiện phím nhấn ta sử dụng phương pháp quét hàng. Khi không nhấn phímthì hàng của bàn phím Hex nối với Vcc thông qua điện trở R nên có mức logic 1. Đểphân biệt được trạng thái của phím nhấn thì mức logic khi nhấn phím phải là mức logic 0.Mà khi nhấn một phím nào đó thì tương ứng hàng và cột của bàn phím Hex sẽ kết nốivới nhau. Do đó, để thực hiện kiểm tra một phím thì ta phải cho trước cột chứa phímtương ứng ở mức logic 0, sau đó kiểm tra hàng của phím, nếu hàng = 0 thì có nhấn phímcòn hàng = 1 thì không nhấn phím. Ví dụ như muốn kiểm tra phím 4 thì ta cho cột chứa phím 4 ở mức logic 0(chân 4của J1, các cột khác = 1), sau đó thực hiện kiểm tra chân 7 của J1 (hàng của phím 4), nếuchân này = 0 thì phím 4 được nhấn.7.2 Keypad và giao tiếp với LCD. Trong mạch dưới LCD đựơc nối với Port B còn bàn phím nối với Port D.Chương trình chỉ đơn giản là chờ xem có phím nào nhấn thì hiển thị phím đó lên mànhình LCD.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 104

Page 107: Kilo Book

VCC

R710k

1U1

U1

VCC1DX

1R4610K

1C7 1RS 104

1R47100

VCC

VCC

1234567891011121314 lcd

Đồ Án Tốt Nghiệp Khóa 2005 – 2008

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

1098123456711121314151617182324

RE2/CSAN7 RB7/PGDRE1/WR/AN6 RB6/PGCRE0/RD/AN5 RB5RB4MCLR/VPP RB3/PGMRA0/AN0 RB2RA1/AN1 RB1RA2/AN2/VRef -/CVRef RB0/INTRA3/AN3/VRef + VDDRA4/T0CKI/C1OUTRA5/AN4/SS/C2OUT GNDRD7/PSP7VDD RD6/PSP6GND RD5/PSP5OSC1/CLKI RD4/PSP4OSC2/CLKORC0/T1OSO/T1CKI RD3/PSP3RC1/T1OSI/CCP2 RD2/PSP2RD1/PSP1RC2/CCP1 RD0/PSP0RC3/SCK/SCLRC4/SDI/SDA RC7/RX/DTRC5/SDO RC6/TX/CK

1Y 1

1C8

1C9

33p

33p

4039383736353433323130292827222120192625

SW1

SW1

SW2

SW3

PIC16F877A

SW4

SW5

SW6

SW7

SW8

SW9

SW10

SW11

SW12

SW13

SW14

R6R

SW15

R6R

R5R

R4R

GVHD:Thạc sỹ Lê Đình Kha

VCC

Trang 105

Page 108: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

7.3 Sơ Đồ Giải Thuật

Bắt đầu

Init LCD

Quét phím

Cóphímnhấn

S

Đ

Hiển thị

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 106

Page 109: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG VIII : GIAO TIẾP I2C (GIAO TIẾP EEPROM 24C04)

8.1 Giới Thiệu Chung Về I2C: Ngày nay trong các hệ thống điện tử hiện đại, rất nhiều ICs hay thiết bị ngoại vi cầnphải giao tiếp với các ICs hay thiết bị khác – giao tiếp với thế giới bên ngoài. Với mụctiêu đạt được hiệu quả cho phần cứng tốt nhất với mạch điện đơn giản, Phillips đã pháttriển một chuẩn giao tiếp nối tiếp 2 dây được gọi là I2C. I2C là tên viết tắt của cụm từInter Intergrated Circuit – Bus giao tiếp giữa các IC với nhau. I2C mặc dù được phát triển bởi Philips, nhưng nó đã được rất nhiều nhà sản xuất ICtrên thế giới sử dụng. I2C trở thành một chuẩn công nghiệp cho các giao tiếp điều khiển,có thể kể ra đây một vài tên tuổi ngoài Philips như: Texas Intrument (TI), Maxim-Dallas,analog Device, National Semiconductor … Bus I2C được sử dụng làm bus giao tiếpngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển 8051, PIC, AVR,ARM, chip nhớ như RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự sang số(ADC), số sang tương tự(DAC), IC điểu khiển LCD, LED…

8.1.1 Đặc điểm giao tiếp I2C Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDAlà đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ và chỉ theo mộthướng. Như hình vẽ trên, khi một thiết bị ngoại vi kết nối vào đường I2C thì chân SDA củanó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SCL.

Hình 1.2. Kết nối thiết bị vào bus I2C ở chế độ chuẩn (Standard mode) và chế độ nhanh (Fast mode)

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 107

Page 110: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Mỗi dây SDA hay SCL đều được nối với điện áp dương của nguồn cấp thông quamột điện trở kéo lên (pull-up resistor). Sự cần thiết của các điện trở kéo này là vì chângiao tiếp I2C của các thiết bị ngoại vi thường là dạng cực máng hở (open-drain or open-collector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp,thường dao động trong khoảng 1KΩ đến 4.7KΩ. Trở lại với hình ở mục 8.1, ta thấy có rất nhiều thiết bị (ICs) cùng được kết nối vàomột bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiếtbị sẽ được nhận ra bởi một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thờigian kết nối. Mỗi thiết bị có thể hoạt đông như là thiết bị nhận dữ liệu hay có thể vừatruyền vừa nhận. Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ(master) hay tớ (slave). Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) đểphân biệt, nó còn được cấu hình là thiết bị chủ (master) hay tớ (slave). Tại sao lại có sựphân biệt này ? Đó là vì trên một bus I2C thì quyền điều khiển thuộc về thiết bị chủ(master). Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa hai thiếtbị chủ/tớ giao tiếp thì thiết bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ củathiết bị tớ trong suốt quá trình giao tiếp. Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớgiữ vai trò bị động trong việc giao tiếp.Master truyền dữ liệu

Master nhận dữ liệu Nhìn hình trên ta thấy xung đồng hồ chỉ có một hướng từ chủ đến tớ, còn luồng dữliệu có thể đi theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ. Về dữ liệu truyền trên bus I2C, một bus I2C chuẩn truyền 8bit dữ liệu có hướngtrên đường truyền với tốc độ là 100Kbits/s – Chế độ chuẩn (Standard mode). Tốc độtruyền có thể lên tới 400Kbits/s – Chế độ nhanh (Fast mode) và cao nhất là 3,4Mbits/s– Chế độ cao tốc (Highspeed mode).Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau: Một chủ một tớ (one master – one slave). Một chủ nhiều tớ (one master – multi slave). Nhiều chủ nhiều tớ (Multi master – multi slave).Dù ở chế độ nào, một giao tiếp I2C điều dựa vào quan hệ chủ/tớ. Giả thiết một thiết bị A.muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau: Thiết bị A (Chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việc xác định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ. Thiết bị A gửi dữ liệu tới thiết bị B. Thiết bị A kết thúc quá trình truyền dữ liệu. Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là A sẽ nhận dữliệu từ B. Trong giao tiếp này, A là chủ còn B vẫn là tớ. Chi tiết việc thiết lập một giaotiếp giữa hai thiết bị sẽ được mô tả chi tiết trong các mục dưới đây.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 108

Page 111: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

8.1.2 START and STOP conditions START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốnthiết lập giao tiếp với một thiết bị nào đó trong mạng I2C. START là điều kiện khởi đầu,báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp. Hình dưới đâymô tả điều kiện START và STOP. Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ởmức cao (SDA = SCL = HIGH). Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàngcho một giao tiếp. Hai điều kiện START và STOP là không thể thiếu trong việc giao tiếpgiữa các thiết bị I2C với nhau.

Hình 1.4. Điều kiện START và STOP của bus I2C Điều kiện START: một sự chuyển đổi trạng thái từ cao xuống thấp trên đường SDAtrong khi đường SCL đang ở mức cao (cao = 1; thấp = 0) báo hiệu một điều kiện START. Điều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDAtrong khi đường SCL đang ở mức cao.Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu START,bus I2C coi như đang trong trang thái làm việc (busy). Bus I2C sẽ rỗi, sẵn sàng cho mộtgiao tiếp mới sau tín hiệu STOP từ phía thiết bị chủ. Sau khi có một điều kiện START, trong qua trình giao tiếp, khi có một tín hiệuSTART được lặp lại thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng tháibận. Tín hiệu START và lặp lại START đều có chức năng giống nhau là khởi tạo mộtgiao tiếp. 8.1.3 Định dạng dữ liệu truyền Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗisườn dương của xung đồng hồ trên dây SCL, quá trình thay đổi bit dữ liệu xảy ra khiSCL đang ở mức thấp.

Hình 1.5. Quá trình truyền 1 bit dữ liệu Mỗi byte dữ liệu được truyền có độ dài là 8 bits. Số lượng byte có thể truyền trongmột lần là không hạn chế. Mỗi byte được truyền đi theo sau là một bit ACK để báo hiệuđã nhận dữ liệu. Bit có trọng số cao nhất (MSB) sẽ được truyền đi đầu tiên, các bít sẽ

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 109

Page 112: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

được truyền đi lần lượt. Sau 8 xung clock trên dây SCL, 8 bit dữ liệu đã được truyền đi.Lúc này thiết bị nhận, sau khi đã nhận đủ 8 bít dữ liệu sẽ kéo SDA xuống mức thấp tạomột xung ACK ứng với xung clock thứ 9 trên dây SDA để báo hiệu đã nhận đủ 8 bit.Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình truyền hoặc kếtthúc.

Hình 1.6. Dữ liệu truyền trên bus I2C

Hình 1.7. Bit ACK trên bus I2C

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 110

Page 113: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Một byte truyền đi có kèm theo bit ACK là điều kiên bắt buộc, nhằm đảm bảo choquá trình truyền nhận được diễn ra chính xác. Khi không nhận được đúng địa chỉ hay khimuốn kết thúc quá trình giao tiếp, thiết bị nhận sẽ gửi một xung Not-ACK (SDA ở mứccao) để báo cho thiết bị chủ biết, thiết bị chủ sẽ tạo xung STOP để kết thúc hay lặp lạimột xung START để bắt đầu quá trình mới. 8.1.4 Định dạng địa chỉ thiết bị Mỗi thiết bị ngoại vi tham gia vào bus I2C đều có một địa chỉ duy nhất, nhằm phânbiệt giữa các thiết bị với nhau. Độ dài địa chỉ là 7 – bit, điều đó có nghĩa là trên một busI2C ta có thể phân biệt tối đa 128 thiết bị. Khi thiết bị chủ muốn giao tiếp với ngoại vinào trên bus I2C, nó sẽ gửi 7 bit địa chỉ của thiết bị đó ra bus ngay sau xung START.Byte đầu tiên được gửi sẽ bao gồm 7 bit địa chỉ và một bít thứ 8 điều khiển hướng truyền.

Hình 1.8. Cấu trúc byte dữ liệu đầu tiên Mỗi một thiết bị ngoại vi sẽ có một địa chỉ riêng do nhà sản xuất ra nó quy định.Địa chỉ đó có thể là cố định hay thay đổi. Riêng bit điều khiển hướng sẽ quy định chiềutruyền dữ liệu. Nếu bit này bằng “0” có nghĩa là byte dữ liệu tiếp theo sau sẽ được truyềntừ chủ đến tớ, còn ngược lại nếu bằng “1” thì các byte theo sau byte đầu tiên sẽ là dữ liệutừ con tớ gửi đến con chủ. Việc thiết lập giá trị cho bit này do con chủ thi hành, con tớ sẽtùy theo giá trị đó mà có sự phản hồi tương ứng đến con chủ.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 111

Page 114: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

8.1.5 Truyền dữ liệu trên bus I2C, chế độ Master - Slave Việc truyền dữ liệu diễn ra giữa con chủ và con tớ. Dữ liệu truyền có thể theo 2hướng, từ chủ đến tớ hay ngược lại. Hướng truyền được quy định bởi bit thứ 8 (R\W)trong byte đầu tiên được truyền đi.

Truyền dữ liệu từ chủ đến tớ (ghi dữ liệu): Thiết bị chủ khi muốn ghi dữ liệu đếncon tớ, quá trình thực hiện là: Thiết bị chủ tạo xung START Thiết bị chủ gửi địa chỉ của thiết bị tớ mà nó cần giao tiếp cùng với bit RW = 0 ra bus và đợi xung ACK phản hồi từ con tớ. Khi nhận được xung ACK báo đã nhận diện đúng thiết bị tớ, con chủ bắt đầu gửi dữ liệu đến con tớ theo từng byte một. Theo sau mỗi byte này đều là một xung ACK. Số lượng byte truyền là không hạn chế. Kết thúc quá trình truyền, con chủ sau khi truyền byte cuối sẽ tạo xung STOP báo hiệu kết thúc

• Truyền dữ liệu từ tớ đến chủ (đọc dữ liệu): Thiết bị chủ muốn đọc dữ liệu từ thiếtbị tớ, quá trình thực hiện như sau: Khi bus rỗi, thiết bị chủ tạo xung START, báo hiệu bắt đầu giao tiếp. Thiết bị chủ gửi địa chỉ của thiết bị tớ cần giao tiếp cùng với bit RW = 1 và đợi xung ACK từ phía thiết bị tớ Sau xung ACK dầu tiên, thiết bị tớ sẽ gửi từng byte ra bus, thiết bị chủ sẽ nhận dữ liệu và trả về xung ACK. Số lượng byte không hạn chế. Khi muốn kết thúc quá trình giao tiếp, thiết bị chủ gửi xung Not-ACK và tạo xung STOP để kết thúc.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 112

Page 115: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Quá trình kết hợp ghi và đọc dữ liệu: giữa hai xung START và STOP, thiết bị chủcó thể thực hiện việc đọc hay ghi nhiều lần, với một hay nhiều thiết bị. Để thực hiện việcđó, sau một quá trình ghi hay đọc, thiết bị chủ lặp lại một xung START và lại gửi lại địachỉ của thiết bị tớ và bắt đầu một quá trình mới.

Chế độ giao tiếp Master-Slave là chế độ cơ bản trong một bus I2C, toàn bộ busđược quản lý bởi một master duy nhất. Trong chế độ này sẽ không xảy ra tình trạng xungđột bus hay mất đồng bộ xung clock vì chỉ có một master duy nhất có thể tạo xung clock. 8.1.6 Chế độ Multi-Master Trên bus I2C có thể có nhiều hơn một master điều khiển bus. Khi đó bus I2C sẽhoạt động ở chế độ Multi-Master.8.2 Module I2C Trong Vi Điều Khiển PIC Với những tiện ích đem lại, khối giao tiếp I2C đã được tích hợp cứng trong khánhiều loại Vi điều khiển khác nhau. Trong các loại Vi điều khiển PIC dòng Mid-rangephổ biến tại Việt Nam, chỉ từ 16F88 mới có hỗ trợ phần cứng I2C, còn các loại 16F84,16F628 thì không có. Với những loại Vi điều khiển không có hỗ trợ phần cứng giao tiếpI2C, để sử dụng ta có thể dùng phần mềm lập trình, khi đó ta sẽ viết một chương trinhđiều khiển 2 chân bất kỳ của Vi điều khiển để nó thực hiện giao tiếp I2C (các hàmSTART, STOP, WRITE, READ). Trong bài viết này ta đề cập đến việc sử dụng giao tiếpI2C của các loại PIC có tích hợp khối I2C sẵn trong nó, mà cụ thể là Vi điều khiểnPIC16F877A. 8.2.1 Đặc điểm phần cứng của PIC16F877A Hình dưới đây chỉ ra cấu trúc phần cứng của khối điều khiển giao tiếp nối tiếp đồngbộ (MSSP) hoạt động ở chế độ I2C. Khối I2C có đầy đủ chức năng, hoạt động ở cả 2 chếđộ là MASTER (chủ) và SLAVE (tớ), có ngắt xảy ra khi có điều kiện START hay STOPxảy ra, nhằm định rõ đường I2C có rỗi hay không ( chức năng Multi-master ). Chế độ địachỉ có thể là 7 bit hay 10 bit.Khối I2C có 6 thanh ghi điều khiển hoạt động, đó là: SSPCON: Thanh ghi điều khiển. SSPCON2: Thanh ghi điều khiển thứ 2. SSPSTAT: Thanh ghi trạng thái. SSPBUF: Thanh ghi bộ đệm truyền nhận.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 113

Page 116: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SSPSR: Thanh ghi dịch. SSPADD: Thanh ghi địa chỉ. Các thanh ghi SSPCON, SSPBUF, SSPADD và SSPSON2 có thể truy cập đọc/ghiđược.Thanh ghi SSPSR không thể truy cập trực tiếp, là thanh ghi dich dữ liệu ra hay vào.Các thanh ghi SSPCON, SSPCON2 và SSPSTAT được định địa chỉ bit, mỗi bit có chứcnăng riêng. Ý nghĩa của từng thanh ghi và của mỗi bit trong từng thanh ghi đã được đềcập kỹ trong tài liệu Datasheet của PIC

Hình2.1. Cấu trúc khối I2C trong PIC 8.2.2 Cách thức sử dụng Module I2C trong CCS Trong việc lập trình cho PIC sử dụng giao tiếp I2C của nó trong các ứng dụng,người lập trình có thể thực hiện một cách dễ dàng với trình dịch CCS. Nói dễ dàng ở đâylà chỉ về mặt cú pháp lệnh, ta không cần sử dụng nhiều câu lệnh khó nhớ như trong lậptrình ASM. Việc khởi tạo, chọn chế độ hoạt động và thực hiện giao tiếp của I2C đã có các hàmdựng sẵn của CCS thực hiện. Các hàm liệt kê dưới đây là của phiên bản CCS 3.242, đólà: I2C_isr_state(): Thông báo trạng thái giao tiếp I2C I2C_start(): Tạo điều kiện START I2C_stop(): Tạo điều kiện STOP I2C_read(): Đọc giá trị từ thiết bị I2C, trả về giá trị 8 bit I2C_write(): Ghi giá trị 8 bit đến thiết bị I2C Để sử dụng khối I2C ta sử dụng khai báo sau: #use i2c(chế_độ, tốc độ, sda = PIN_C4, scl=PIN_C3) Chế độ: Master hay Slave

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 114

Page 117: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Tốc độ: Slow (100KHz) hay Fast (400KHz) SDA và SCL là các chân I2C tương ứng của PICSau khai báo trên, ta có thể sử dụng các hàm nêu trên để thực hiện, xử lý các giao tiếpI2C với các thiết bị ngoại vi khác.

8.2.3 EEPROM 24C04 24C04 là loại EEROM 4k, gồm 2 block 256 x 8 bit. Bộ nhớ tương thích với chuẩnI2C với 2 dây SDA và SDL. Bộ nhớ xuất ra 4 bit và một thiết bị duy nhất được nhận ravà đáp ứng lại trên bus I2C.

8.2.3.1 Hình Dạng

8.2.3.2 Sơ đồ cấu tạo:

8.2.3.3 Sơ Đồ Chân

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 115

Page 118: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SCL (Serial clock) : ngõ vào đồng bộ dữ liệu ra vào của bộ nhớ. SDA(Serial Data Address Input/Output): chân này dùng để biến đổi dữ liệu vàtruyền ra hay nhận vào bộ nhớ. E1 – E2 ( chip Enable): là ngõ vào chọn chip và phải sử dụng ít nhất 2 bít quantrọng b2,b3 của 7 bít chọn thiết bị.ngõ vào này được điều khiển tự động và được nối vớiVcc hay Vss thành lập mã chọn thiết bị( Device select Code)

PRE(Protect Enable): dùng bổ xung tình trạng của bit Block Address Pointer MODE: ngõ vào này trên chân 7 của 24c04 và có thể được điều khiển tự động. Nóphải được chọn là VIH hay VIL cho chế độ ghi các Byte. VIH ( Multibyte Write mode ): có thể bắt đầu trên bất cứ địa chỉ nào trên bô nhớ.Master sẽ gởi từ 1 đến 4 byte dữ liệu kèm theo ACK báo nhận. và quá trình truyền chỉkết thúc khi có điều kiện kết thúc phát ra từ Master. VIL ( Page Write mode ): cho phép ghi 8 bit trong 1 chu kỳ. Do 5 bit địa chỉ quantrọng của bộ nhớ ( A3 đến A7) là giống nhau trong 1 block. Vì vậy Master sẽ gởi từ 1đến 8 byte dữ liệu với bit ACK báo nhận sau mỗi byte được truyền. Và địa chỉ Byte bêntrong Couter sẽ tăng trong mỗi byte được truyền.Khi không kết nối mặc định là VIH .

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 116

Page 119: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

WC (Write Control): tín hiệu này dùng để cho phép (WC = VIH) hay không

cho phép (WC = VIL) bảo vệ bộ nhớ ngoài. Khi không kết nối WC =VIL và bộ nhớ không được bảo vệ.8.3 Mạch Nguyên Lý

VCC

U1402

12347

8

6

5

A0A1A2GNDWP

VCC

SCL

SDA

2k2 2K2

DOMINO1401

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

2124C04A

Trang 117

Page 120: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

CHƯƠNG IX :ĐO NHIỆT ĐỘ DÙNG LM35

9.1 Giới thiệu: Đo nhiệt độ là một phương thức đo lường không điện, đo nhiệt độ được chia thànhnhiều dãi: - Đo nhiệt độ thấp - Đo nhiệt độ trung bình - Đo nhiệt độ cao Việc đo nhiệt độ được tiến hành nhờ các dụng cụ hỗ trợ chuyên biệt như: - Cặp nhiệt điện - Nhiệt điện kế kim loại - Nhiệt điện trở kim loại - Nhiệt điện trở bán dẫn - Cảm biến thạch anh Việc sử dụng các IC cảm biến nhiệt độ là một phương pháp thông dụng được nhómsử dụng trong đồ án tốt nghiệp này, nên ở đây chỉ giới thiệu về IC cảm biến nhiệt. Để đo nhiệt độ được chính xác, tất nhiên cần có một đầu dò nhiệt độ thích hợp. Đầudò là một cảm biến nhiệt độ có nhiệm vụ chuyển đổi từ nhiệt độ qua tín hiệu điện, dựavào lý thuyết và thực tế của mạch cần thiết kế ta dùng phương pháp đo bằng IC cảm biếnnhiệt độ. Các IC cảm biến nhiệt độ có độ chính xác cao, dễ tìm và giá thành rẽ. Mộttrong số đó là IC LM35DZ, là loại thông dụng trên thị trường hiện nay, đồng thời nó cónhững đặc tính làm việc phù hợp với thiết kế chi tiết của mạch.9.2 Một số tính chất cơ bản của LM35: - LM35 có độ biến thiên theo nhiệt độ: 10mV / 1oC. - Độ chính xác cao, tính năng cảm biến nhiệt độ rất nhạy, ở nhiệt độ 25oC nó có saisố không quá 1% . Với tầm đo được từ -55oC - 150oC, tín hiệu ngõ ra tuyến tính liên tụcvới những thay đổi của tín hiệu ngõ vào. - Thông số ký thuật: Tiêu tán công suất thấp. Dòng làm việc từ 400uA – 5mA Dòng ngược 15mA Dòng thuận 10mA Độ chính xác: khi làm việc ở nhiệt độ 25oC với dòng làm việc 1mA thì điện áp ngõ ra từ 2.94V-3.04V. - Đặc tính điện: Theo thông số của nhà sản xuất LM35, quan hệ giữa nhiệt độ và điện áp ở ngõ ranhư sau: Vout = 0,01×ToK = 2,73 + 0,01ToC Vậy ứng với tầm hoạt động từ 0oC – 100oC ta có sự biến thiên điện áp ở ngõ ra là: Ở 0oC thì điện áp ngõ ra Vout = 2,73 (V). Ở 5oC thì điện áp ngõ ra Vout = 2, 78 (V). …………………….. Ở 100oC thì điện áp ngõ ra Vout = 3,73 (V).

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 118

Page 121: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

9.3 Mạch Nguyên Lý

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 119

Page 122: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

PHẦN III

CÁC BÀI TẬP THỰC HÀNH

BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN.

BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED VÀ THAY ĐỔI THỜI GIAN DELAY

BÀI 3 : HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7

BÀI 4 : HIỂN THỊ ĐỒNG HỒ TRÊN LED 7

BÀI 5 : CHƯƠNG TRÌNH ĐÈN GIAO THÔNG

BÀI 6 : CHẠY CHỮ TRÊN LED MA TRẬN

BÀI 7 : HIỂN THỊ KÍ TỰ TRÊN LCD

BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD

BÀI 9 : ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN

BÀI 10: ĐO NHIỆT ĐỘ DÙNG LM35

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 120

Page 123: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 3 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED đơn. • Viết các chương trình con tạo thời gian trễ sử dụng trong các ứng dụng VĐK.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED đơn ở các chế độ khác nhau. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED đơn trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED đơn ở các chế độ khác nhau. • Biết cách viết các chương trình tạo thời gian trễ với các khoản thời gian bất kỳ.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. •.ỨNG DỤNG: Viết chương trình cho LED chớp tắt theo nhiều dạng khác nhau.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 121

Page 124: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

VCC

1

4R2

330

98765432

1 1 1 1

L5

1 1 1

L0 L1 L2 L3 L4 L6

1

L7

2 2 2 22 2

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

87654321

LEDDON

2 2

Trang 122

Page 125: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN VÀ THAY ĐỔI THỜI GIAN DELAY

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 3 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED đơn. • Viết các chương trình con tạo thời gian trễ sử dụng trong các ứng dụng VĐK.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED đơn ở các chế độ khác nhau. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED đơn trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED đơn ở các chế độ khác nhau. • Biết cách viết các chương trình tạo thời gian trễ với các khoản thời gian bất kỳ.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. •.ỨNG DỤNG: Viết chương trình cho LED chớp tắt theo nhiều dạng khác nhau và thay đổi thờigian delay sau mỗi lần xuất.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 123

Page 126: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH:

VCC

1

4R2

330

1 1 1

98765432

1 1 1

L0 L1 L2 L3 L4

1 1

L5 L6 L7

2 2 22 2 2

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

87654321

LEDDON

2 2

Trang 124

Page 127: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 4 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED 7 đoạn theo nhiều phương pháp khác nhau. • Điều khiển việc hiển thị các thông tin và số liệu bằng cách sử dụng các bộ hiển thị dùng LED 7 đoạn.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED 7 đoạn. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED 7 đoạn trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED 7 đoạn ở các chế độ khác nhau.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. • ỨNG DỤNG: Sử dụng phương pháp quét thể hiện ngày, tháng , năm ( 2 số cuối) từng số chạy từLED 1 đến LED 6 và hiển thị đầy đủ trên 6 LED.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 125

Page 128: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

60PA

615243342516

6RN3

4.7K

789101112

VCC

Q1A1015

Q2A1015

Q3A1015

Q4A1015

Q5A1015

Q6A1015

6LED1 6LED2 6LED3 6LED4 6LED5 6LED6

VC CVC CVC C VC CVC CVC C VC C VC CVC C

60PC

87654321

12345678

6RN216 h15 g14 f13 e12 d11 c10 b9a

VC C VC C

ABCDEFGH ABCDEFGH ABCDEFGHABCDEFGH ABCDEFGH

330 abcdef gh abcdef gh abcdef gh abcdef gh abcdef gh

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

ABCDEFGH

abcdef gh

VC C

Trang 126

Page 129: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 4 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED 7 đoạn theo nhiều phương pháp khác nhau. • Điều khiển việc hiển thị các thông tin và số liệu bằng cách sử dụng các bộ hiển thị dùng LED 7 đoạn.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED 7 đoạn. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED 7 đoạn trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED 7 đoạn ở các chế độ khác nhau.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. • ỨNG DỤNG: Viết chương trình đồng hồ đơn giản xuất ra led 7(hai led đầu hiển thị giờ, hai ledkế hiển thị phút , hai led cuối hiển thị giây).

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 127

Page 130: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

60PA

615243342516

6RN3

4.7K

789101112

VCC

Q1A1015

Q2A1015

Q3A1015

Q4A1015

Q5A1015

Q6A1015

6LED1

VCC VCC

6LED2

VCC VCC

6LED3

VCC VCC

6LED4

VCC VCC

6LED5

VCC VCC

6LED6

VCC VCC

60PC

87654321

12345678

6RN2161514131211109

hgfedcba

ABCDEFGH ABCDEFGHABCDEFGH ABCDEFGH ABCDEFGH

abcdef gh330 abcdef gh abcdef gh abcdef gh abcdef gh

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

ABCDEFGH

abcdef gh

Trang 128

Page 131: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 5: CHƯƠNG TRÌNH ĐÈN GIAO THÔNG

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 5 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED đơn và LED 7 đoạn.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Nắm được sơ đồ và nguyên lý hoạt động của khối mạch đèn giao thông trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển mạch đèn giao thông.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • trên.ỨNG DỤNG: Viết chương trình điều khiển mạch đèn giao thông có đếm ngược.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 129

Page 132: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

VCC

1

4R2

330

VCCP 8 7 6 5 4 3 2 1

330

654321

VCCPD

ABCDEFGH

330

12345678

ABCDEFGH

D2

98765432

V2 X2 X1 V1 D1

PORTA

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 130

Page 133: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 6 : CHẠY CHỮ TRÊN LED MA TRẬN

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 5 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED ma trận. • Ứng dụng thực hiện việc hiển thị các thông tin tĩnh và động trên LED ma trận dạng quang báo.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED ma trận ở các chế độ khác nhau. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED ma trận trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED ma trận ở các chế độ khác nhau. • Biết cách viết chương trình quang báo để hiển thị các thông tin được yêu cầu (thông tin dạng tĩnh và dạng động).TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 8 nối PortB với hàng của Led Ma Trận. • Dùng dây bus 8 nối PortC với cột của Led Ma Trận 1. • Dùng dây bus 8 nối PortD với cột Led Ma Trận 2.ỨNG DỤNG: Viết chương trình chạy chữ “ KIT THUC TAP PIC KHOA DIEN TU – TINHOC ”.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 131

Page 134: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

VCC

b1 b2Q1A1015

c1

87654321

12345678

c2

b3Q2A1015

b4Q3A1015

c3

b5Q4A1015

c4 c5

b6Q5A1015

Q6 b7A1015

c6 c7

b8Q7A1015

Q8A1015

c8

161514131211109

b16b15b14b13b12b11b10b9

VCC

b9 b10Q9A1015

c9

Q10 b11A1015

c10

Q11 b12A1015

c11

Q12 b13A1015

c12

Q13 b14A1015

c13

Q14 b15A1015

c14

Q15 b16A1015

c15

Q16A1015

c16

4k7

87654321

12345678

9RN2 c1c2c3c4c5c6c7c8

527112814990PB

87654321

12345678

330

9RN3

161514131211109

h8h7h6h5h4h3h2h1

h8h7h6h5h4h3h2h1

13 3 410 6111516

MTRAN1

c11 c13 c15c9c10 c12 c14 c16

5271128149

h8h7h6h5h4h3h2h1

13 3 410 6111516

MTRAN2

161514131211109

b8b7b6b5b4b3b2b1

4k7

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 132

Page 135: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 7: HIỂN THỊ KÍ TỰ TRÊN LCD

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 5 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Khảo sát nguyên lý hoạt động và nguyên lý điều khiển LCD. • Điều khiển để hiển thị các thông tin trên màn hình tinh thể lỏng LCD ( loại 2 hàng x 16 ký tự).YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LCD. • Nắm được sơ đồ và nguyên lý hoạt động của khối LCD trên mô hình thí nghiệm. • Nắm được nguyên lý và các kỹ thuật điều khiển để hiển thị các thông tin trên LCD. • Biết cách viết các chương trình ứng dụng để hiển thị các dạng thông tin khác nhau trên LCD tùy theo nhu cầu sử dụng.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • ỨNG DỤNG: Viết chương trình xuất dữ liệu lên LCD Line 1 : “ DO AN TOT NGHIEP “ Line 2 : “ KIT THUC TAP PIC 16F877A”

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 133

Page 136: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

VCC

J3

12345678

7 8 91011121314

LCD

VDD

V0 3

456

1516

1

2 3VR10K

RSR/WE

AKCON8

VSSLCD

J4

54321

1

CON5

SVTH :Hà Xuân Bình & Vũ Thanh Hưng

3

Trang 134

Page 137: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 8: GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 5 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển thiết bị ngoại vi bằng bàn phím (bàn phím thiết kế theo kiểu ma trận). • Trình bày kỹ thuật quét phím cho dạng bàn phím ma trận 16 phím ( 4 hàng x 4 cột). • Trình bày một số ứng dụng trong kỹ thuật điều khiển bàn phím.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển bàn phím ma trận. • Nắm được sơ đồ và nguyên lý hoạt động của khối bàn phím ma trận trên mô hình thí nghiệm. • Nắm được nguyên lý và kỹ thuật quét phím cho các dạng bàn phím ma trận. • Biết cách viết các chương trình ứng dụng có sử dụng bàn phím ma trận để điều khiển các thiết bị ngoại vi khác nhau.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • ỨNG DỤNG: Viết chương trình mỗi khi có phím nhấn thì hiển thị số đó lên LCD.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 135

Page 138: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

VCC

VCC

1DX 1R4610K

10 9 8 1 2 3 4 5 6 711121314151617182324

R7

10k

1U1

PIC16F877A

4039383736353433323130292827222120192625

U1

1234567891011121314

lcd

1C7

1RS 1041R47

100

VCCVCC

1Y 1

1C8

33p

1C9

33p

SW1 SW1 SW2 SW3

SW4 SW5 SW6 SW7

SW8 SW9 SW10 SW11

R6R

R5R

R4R

R6R

VCC

SW12 SW13 SW14 SW15

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 136

Page 139: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 9: ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 5 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Giả lập tín hiệu tương tự cung cấp cho khối ADC.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển ADC. • Nắm được sơ đồ và nguyên lý hoạt động của khối ADC trên mô hình thí nghiệm.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. • ỨNG DỤNG: Tạo mức điện áp thay đổi liên tục từ 0V đến 5V cho VĐK xử lý sau đó hiển thị raLED đơn.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 137

Page 140: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH :

L0

VCC 2

L1

2

1

11DX 1R46

10K 1R47

1U1

1 2 3 4 5 6 7 8 91011121314151617181920

MCLR/VPPRB7/PGDRA0/AN0RB6/PGCRA1/AN1RB5RA2/AN2/VRef -/CVRef RB4RA3/AN3/VRef + RB3/PGMRA4/T0CKI/C1OUTRB2RA5/AN4/SS/C2OUTRB1RE0/RD/AN5RB0/INT VDDRE1/WR/AN6 GNDRE2/CSAN7VDDRD7/PSP7GNDRD6/PSP6OSC1/CLKIRD5/PSP5 RD4/PSP4OSC2/CLKORC0/T1OSO/T1CKI RC7/RX/DTRC1/T1OSI/CCP2 RC6/TX/CKRC2/CCP1RC5/SDORC3/SCK/SCL RC4/SDI/SDARD0/PSP0RD3/PSP3RD1/PSP1RD2/PSP2

L2VCC

4R2

98765432

1C7

1RS 104

VCC 100

VR 10K

1Y1

1C8

33p

1C9

33p

40393837363534333231 VCC30292827262524232221

2

L3

2

1

1

1

L4

2 1

L5

2

L6

2

1

1330

L7

2 1

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 138

Page 141: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 10: ĐO NHIỆT ĐỘ DÙNG LM35

Ngày …… Tháng…….Năm 2008Thời Gian Thực Hiện : 5 GiờSinh Viên Thực Hiện :

ĐÁNH GIÁ - ĐIỂM Kỹ thuật Thao tác Tổ chức

NHẬN XÉT

MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Đo nhiệt độ môi trương và khống chế nhiệt độ bằng VĐK.YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình ứng dụng có sử dụng LM35 để điều khiển các thiết bị ngoại vi khác nhau. • Nắm được sơ đồ và nguyên lý hoạt động của khối đo nhiệt độ trên mô hình thí nghiệm. • Nắm được nguyên lý nguyên lý hoạt động của LM35.TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 2 nối chân 2 của LM35 với PortA.0 (chân AN0). • Dùng dây bus 3 nối PortE với RS,RW,E ( RS = RE0, RW = RE1, E = RE2 ) • Dùng dây bus 8 nối PortB với D0 đến D7.ỨNG DỤNG: Viết chương trình hiển thị nhiệt độ trên LCD.

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 139

Page 142: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

SƠ ĐỒ MẠCH:

VCC

U1403

VDD

VOUT

GND

1

2

3

J2

1

CON1

LM35

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 140

Page 143: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

PHẦN IV

GIẢI CÁC BÀI TẬP THỰC HÀNH

BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN.

BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED VÀ THAY ĐỔI THỜI GIAN DELAY

BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7

BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7

BÀI 5 : CHƯƠNG TRÌNH ĐÈN GIAO THÔNG

BÀI 6: CHẠY CHỮ TRÊN LED MA TRẬN

BÀI 7 : HIỂN THỊ KÍ TỰ TRÊN LCD

BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD

BÀI 9 : ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN

BÀI 10: ĐỘ NHIỆT ĐỘ DÙNG LM35

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 141

Page 144: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN

//***********CHUONG TRINH LED DON **********//***************XUAT RA PORTB ***************//***********************************************#include <16f877A.h>#fuses nowdt,noprotect,nolvp,xt,put#use delay(clock=4000000)#use fast_io(b)void main() set_tris_b(0); output_b(0); while(true) output_b(0b11111110); delay_ms(250); output_b(0b11111101); delay_ms(250); output_b(0b11111011); delay_ms(250); output_b(0b11110111); delay_ms(250); output_b(0b11101111); delay_ms(250); output_b(0b11011111); delay_ms(250); output_b(0b10111111); delay_ms(250); output_b(0b01111111); delay_ms(250); output_b(0b10111111); delay_ms(250); output_b(0b11011111); delay_ms(250); output_b(0b11101111); delay_ms(250); output_b(0b11110111); delay_ms(250); output_b(0b11110111); delay_ms(250); output_b(0b11111011); delay_ms(250);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 142

Page 145: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

output_b(0b11111101);delay_ms(250);output_b(0b11111110);delay_ms(250);output_b(0b01111110);delay_ms(250);output_b(0b10111101);delay_ms(250);output_b(0b11011011);delay_ms(250);output_b(0b11100111);delay_ms(250);output_b(0b11011011);delay_ms(250);output_b(0b10111101);delay_ms(250);output_b(0b01111110);delay_ms(250);output_b(0b11111111);output_b(0b00000000);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 143

Page 146: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED VÀ THAY ĐỔI THỜI GIAN DELAY

//********CHUONG TRINH LED DON******//**********CO THAY DOI DELAY*********//*********XUAT DU LIEU RA PORTC*****//***************************************#include <16f877a.h>#fuses XT,NOWDT#use delay(clock = 4000000)#use fast_io(c)int i;void main() set_tris_c(0); output_c(255); while (true) for(i=10;i>=1;i--) output_c(0b11111110); delay_ms(a); output_c(0b11111100); delay_ms(a); output_c(0b11111000); delay_ms(a); output_c(0b11110000); delay_ms(a); output_c(0b11100000); delay_ms(a); output_c(0b11000000); delay_ms(a); output_c(0b10000000); delay_ms(a); output_c(0x00); delay_ms(a); for(i=10;i>=1;i--)

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 144

Page 147: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

output_c(0b01111111); delay_ms(a); output_c(0b00111111); delay_ms(a); output_c(0b00011111); delay_ms(a); output_c(0b00001111); delay_ms(a); output_c(0b00000111); delay_ms(a); output_c(0b00000011); delay_ms(a); output_c(0b00000001); delay_ms(a); output_c(0x00); delay_ms(a); for(i=10;i>=1;i--) output_c(0b01010101); delay_ms(a); output_c(0b10101010); delay_ms(a);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 145

Page 148: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7

//********CHUONG TRINH LED 7***********//*****PORTA QUET, PORTB DU LIEU*******//*************************************#include<16f877.h>#fuses xt,nowdt#use delay (clock =4000000)#use fast_io(a)#use fast_io(b)int so[] =int a,b,c,d=1,e,f;void main() set_tris_b(0); set_tris_a(0); while (true) a=0; //*****kieu_1, nhap nhay 5 lan***** while(a<5) for (b=0;b<=150;b++) d=1; for (c=0;c<=5;c++) e=63; output_b(so[c+6]); output_a(e); delay_us(500); output_b(255); d=d*2; output_b(255); delay_ms(300); a++; //*****kieu_2; dich so sang trai*****

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 146

Page 149: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

a=0; f=0; while(a<13) for (b=0;b<=200;b++) d=1; for (c=0;c<=5;c++) e=63; output_b(so[c+f]); output_a(e); delay_us(500); output_b(255); d=d*2; a++; f++; output_b(255); delay_ms(300); //*****kieu_3; nhap nhay 3 lan***** a=0; while(a<5) for (b=0;b<=150;b++) d=1; for (c=0;c<=5;c++) e=63; output_b(so[c+6]); output_a(e); delay_us(500); output_b(255); d=d*2; output_b(255); delay_ms(300); a++; //******kieu_3; dich so sang phai***** a=0; f=12;

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 147

Page 150: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

while(a<13)

for (b=0;b<=200;b++) d=1; for (c=0;c<=5;c++) e=63; output_b(so[c+f]); output_a(e); delay_us(500); output_b(255); ; a++; f--;

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 148

Page 151: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7

//***********CHUONG TRINH DONG HO**********//*************HIEN THI TREN LED 7*************//*********QUET PORTA, DU LIEU PORTC*********//***********************************************#include <16f877A.h>#use delay (clock=4000000)#fuses xt,nowdt#use fast_io(a)#use fast_io( b)void main ()set_tris_b(0);set_tris_a(0);while(true)for (a=0;a<=2;b++)//h for (b=0;b<=h;a++)//h for (c=0;c<=5;f++)//m for (d=0;d<=9;e++)//m for (e=0;e<=5;g++)//s for (f=0;f<=9;h++)//s for (g=0;j<=100;g++) output_b(so[f]); output_a(0b011111); delay_us(1500); output_b(255); output_b(so[e]); output_a(0b101111); delay_us(1500); output_b(255); output_b(so[d]); output_a(0b110111);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 149

Page 152: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

delay_us(1500);output_b(255);output_b(so[c]);output_a(0b111011);delay_us(1500);output_b(255);output_b(so[b]);output_a(0b111101);delay_us(1500);output_b(255);output_b(so[a]);output_a(0b111110);delay_us(1500);output_b(255);if (a==2)h=3;elseh=9;

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 150

Page 153: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 5 : CHƯƠNG TRÌNH ĐÈN GIAO THÔNG

//******CHUONG TRINH DEN GIAO THONG ********//******QUET PORTA, DU LIEU RTB,PORTD********//*************************************************#include <16f877.h>#fuses NOWDT,XT#use delay(clock=4000000)#use fast_io(b)#use fast_io(A)#use fast_io(d)int8 i; set_tris_A(0);output_A(255); set_tris_b(0);output_b(255); set_tris_d(0);output_d(255); while(true) output_a(0b11011011); for (i=9;i>=3;i--) output_b(led_duoi[i-10]); output_d(led_tren[j-k]); delay_ms(1500); //xanh1 + do2 output_a(0b11011101); for (i=3;i>=1;i--) output_b(led_duoi[i-1]); output_d(led_tren[i-1]); delay_ms(1500); output_b(255); output_d(255); //vang1 + do2

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 151

Page 154: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

if (i=0) i=9; output_a(0b11110110);for (i=9;i>=3;i--) output_b(led_duoi[6]); output_d(led_tren[i-10]); delay_ms(1500); output_b(255); output_d(255); //xanh2 + do1output_a(0b11101110);for (i=3;i>=1;i--) output_b(led_duoi[i-10]); output_d(led_tren[i-10]); delay_ms(1500); output_b(255); output_d(255); //vang2 + do1

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 152

Page 155: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 6: CHẠY CHỮ TRÊN LED MA TRẬN

//******CHAY CHU TREN LED MA TRAN*******//***************PORTB DU LIEU**************//************PORTD,PORTC QUET*************#include <16f877.h>#fuses xt,nowdt#use delay(clock = 4000000)#use fast_io(c)#use fast_io(b)#use fast_io(d)int8 const kytu[] = 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XE1,0XDE,0XDE,0XED,0XFF 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF 0XE1,0XDE,0XDE,0XE1,0XFF 0XFF,0XFF,0XFF,0XFF 0XDF,0XDF,0XC0,0XDF,0XDF,0XFF 0XC0,0XF7,0XF7,0XC0,0XFF 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF 0XC0,0XEF,0XF7,0XC0,0XFF 0XE1,0XDE,0XDA,0XC8,0XFB,0XFF 0XFF,0XFF,0XFF,0XFF 0XC0,0XD6,0XD6,0XE9,0XFF 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF 0XC0,0XEF,0XF7,0XC0,0XFF 0XFF,0XFF,0XFF,0XFF 0XC0,0XF7,0XF7,0XC0,0XFF 0XC1,0XFE,0XFE,0XC1,0XFF 0XC0,0XEF,0XF7,0XC0,0XFF 0XE1,0XDE,0XDA,0XC8,0XFB,0XFF 0XFF,0XFF,0XFF,0XFF 0XE1,0XDE,0XDE,0XED,0XFF, 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF 0XFF,0XFF,0XFF,0XFF 0XC0,0XEF,0XF7,0XEF,0XC0,0XFF 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF 0XC1,0XFE,0XFE,0XC1,0XFF 0XFF,0XFF,0XFF,0XFF 0XCE,0XF5,0XFB,0XF5,0XCE,0XFF 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 153

Page 156: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

0XC0,0XEF,0XF7,0XC0,0XFF 0XC0,0XF7,0XF7,0XC0,0XFF 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF;void hienthi();void main()set_tris_b(0); output_b(0);set_tris_d(0);output_d(0);set_tris_c(0);output_c(0); while (true) for (i =0;i<17;i++) hienthi(); if (b==170) b=0; else b++; void hienthi() e=255-c; f=255-d; output_b(kytu[]); output_d(e); output_c(f); if (c>=1) d=0; if (c==256) c=0; d=1; if (d>=1) c=0; if (d==256) d=0; c=1; a=b; if (a==170) a=0; else

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 154

Page 157: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

delay_us(1500);output_d(255);output_c(255);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 155

Page 158: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 7 : HIỂN THỊ KÍ TỰ TRÊN LCD

//*********CHUONG TRINH CHAY CHU TREN LCD*********//*******PORTB XUAT DU LIEU, PORTD,PORTC QUET******//********************************************************#include <16F877A.h>#include <DEFS_16F877A.h>#fuses XT,NOWDT#use delay(clock=4000000)#define RS RE0#define RW RE1#define E RE2#define LCD PORTBconst unsigned char line1[]='D','O',' ','A','N' ,' ','T','O','T',' ', 'N','G','H','I','E','P',;const unsigned char line2[]='K','I','T',' ','T','H','U','C' ,' ','T','A','P', ' ','P','I','C',' ', '1','6','F','8','7','7','A',;const unsigned char line3[]=' ',' ','K','H','O','A' ,' ','D','T',' ','-',' ','T','H',;const unsigned char line4[]=' ',' ','G','V','H','D',':' ,' ','L','E',' ','D','I','N','H',' ','K','H','A', ;const unsigned char line5[]= 'S','V',' ','T','H','U','C' ,' ','H','I','E','N',';const unsigned char line6[]='H','A',' ','X','U','A','N' ,' ','B','I','N','H',' ','&' ;const unsigned char line7[]='V','U',' ,'T','H','A','N','H' ,' ','H','U','N','G',;/**************************/void command(void) RS = 0; RW = 0; E = 1; E = 0; delay_ms(6);/**************************/void send(void) RS = 1 RW = 0; E = 1;

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 156

Page 159: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

E = 0;delay_ms(6);

/*************************/void main(void) while(true) set_tris_B(0); set_tris_E(0); delay_ms(100); LCD = 0x38; command(); LCD = 0x0C; command(); LCD = 0x80; command(); while (line1[y]!) LCD=line1[y]; send(); delay_ms(100); y++; lcd=0xC0; command(); while(i<16) lcd=line2[i]; send(); i++; delay_ms(200); i=2; while (line2[z]!) LCD = 0x38; command(); LCD = 0x0C; command(); LCD = 0x80; command(); y=0; while (line1[y]!=) lcd=line1[y];

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 157

Page 160: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

send();y++;

lcd=0xc0;command();k=i+16;for(z=i;z<k;z++) lcd=line2[z]; send();delay_ms(100);i++;delay_ms(500);lcd=0x01;command();LCD = 0x82;command();

while (line3[d]!) LCD=line3[d]; send(); delay_ms(100); d++; i=0; while (line4[e]!) LCD = 0x80; command(); a=0; while (line3[d]!) lcd=line3[d]; send(); d++; lcd=0xc0; command(); k=i+16; for(e=i;e<k;e++) lcd=line4[e]; send(); delay_ms(100);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 158

Page 161: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

i++;delay_ms(500);

lcd=0x01;command();lcd=0x0e;command();LCD = 0x82;command();while (line5[a]!) LCD=line5[a]; send(); delay_ms(100); a++; lcd=0xC2;command();while(b<12) lcd=line6[b]; send(); b++; delay_ms(100); lcd=0x01;command();lcd=0x38;command();LCD = 0x0C;command();LCD = 0x88;command();lcd=line6[b+1];send();delay_ms(200);lcd=0x38;command();LCD = 0x0C;command();lcd=0xc2;command();while (line7[c]!) LCD=line7[c]; send();

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 159

Page 162: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

delay_ms(200);c++;

delay_ms(500);lcd=0x01;command();

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 160

Page 163: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD

// ******GIAO TIEP BAN PHIM VOI LCD******// *********RS,RW,E POTRE*****************// ***********LCD PORT B******************// **********KEYPAD PORT D***************//*****************************************#include "16F877A.h"#include <DEFS_16f877a.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#byte portD=0x08#byte portB=0x06#byte portE=0x09const unsigned char dig[]= 'X','I','N',' ','N','H','A','P',' ','S','O','#';int8 i,j,a=0;void lenh(void) output_low(pin_e0); output_low(pin_e1); output_high(pin_e2); output_low(pin_e2); delay_ms(6);void du_lieu(void) output_high(pin_e0); output_low(pin_e1); output_high(pin_e2); output_low(pin_e2); delay_ms(6);

void main(void) output_b(0x38); lenh(); output_b(0x0E); lenh(); output_b(0x80); lenh(); While (dig[a]!='#')

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 161

Page 164: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

portb=dig[a];du_lieu();delay_ms(100);a++;

output_b(0XC0); lenh(); delay_ms(100); output_d(0b11111111); while(1) //**************************************************** output_d(0b11111110); delay_ms(10); if( input(pin_D1)==0 ) output_b(0x37); //ghi 7 du_lieu(); delay_ms(150); if( input(PIN_D3)==0 ) output_b(0x38); //ghi 8 du_lieu(); delay_ms(150); if( input(PIN_D5)==0 ) output_b(0x39); //ghi 9 du_lieu(); delay_ms(150); if( input(PIN_D7)==0 ) output_b('A'); // ghi a du_lieu(); delay_ms(150); //**************************************************** output_D(0b11111101); delay_ms(10); if( input(PIN_D4)==0 ) output_b(0x34); //ghi 4 du_lieu(); delay_ms(150);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 162

Page 165: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 output_b(0x35); //ghi 5 du_lieu(); delay_ms(150); if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 output_b(0x36); //ghi 6 du_lieu(); delay_ms(150); if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 output_b('B'); //ghi b du_lieu(); delay_ms(150); //**************************************************** output_D(0b11111011); delay_ms(10); if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 output_b(0x31); //ghi 1 du_lieu(); delay_ms(150); if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 output_b(0x32); //ghi 2 du_lieu(); delay_ms(150); if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 output_b(0x33); //ghi 3 du_lieu(); delay_ms(150); if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 output_b('C'); //ghi c du_lieu(); delay_ms(150);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 163

Page 166: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

//**************************************************** output_D(0b11110111); delay_ms(10); if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 output_b('*'); //ghi * du_lieu(); delay_ms(150); if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 output_b(0x30); //ghi 0 du_lieu(); delay_ms(150); if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 output_b(0X01); //CLEAR lenh(); delay_ms(150); if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 portb='D'; //ghi d du_lieu(); delay_ms(150);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 164

Page 167: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 9 : ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN

//***********ADC Hien Thi Led Don*************//*********** Led noi voi portB******************//**** ********AN0 lay mau tin hieu**************#include <16F877.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#device 16F877*=16 ADC=8#use delay(clock=4000000)Int8 adc;main() setup_adc(adc_clock_internal); setup_adc_ports(AN7); set_adc_channel(0); delay_ms(10); while(true) adc=read_adc(); output_B(adc);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 165

Page 168: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

BÀI 10: ĐO NHIỆT ĐỘ DÙNG LM35

//*****CHUONG TRINH DO NHIET DO DUNG LM35*********//*****************HIEN THI LCD*************************//***PORTB DU LIEU,PORTE DIEU KHIEN,AN0 LAY MAU***//********************************************************#include <16f877.h>#fuses xt,nowdt#device *=16 adc =8#use delay (clock=4000000)#use fast_io(e)#use fast_io(b)#bit rs = 0x09.0#bit rw = 0x09.1#bit e = 0x09.2#byte LCD = 0X06const char line_1[ ]="CHUONG TRINH DO NHIET DO SU DUNG LM35 ";const char line_2[ ]="0001020304050607080910111213141516 17181920212223242526272829303132333435363738394041424344454647484950";const char line_3[]="NHIET DO:";const char line_4[]=" DO C";int i,b,a,adc;//**********************************************void command() rs = 0; rw =0; e=1; e=0; delay_ms(1); //**********************************************void write_data() rs =1; RW = 0; e=1; e=0; delay_ms(1); //**********************************************void main()

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 166

Page 169: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

Setup_ADC ( ADC_clock_internal ) ;Setup_ADC_ports (AN0);Set_ADC_channel ( 0 ) ;Delay_us (10 ); // delay 10 usset_tris_e(0);output_e(0);set_tris_b(0);output_b(0);set_tris_c(0);output_c(0);WHILE(TRUE) lcd=0x38; command(); lcd =0x0e; command(); lcd=0X01; command(); LCD =0x80; command(); a=0; LCD =0xc0; command(); while(line_3[a]!=) lcd = line_3[a]; write_data(); delay_ms(50); adc =4* read_adc ( ) ;//doc gia tri adc lcd=0xc9; command(); for (i=1;i<=2;i++) lcd = line_2[]; write_data(); delay_us(50); adc++; lcd=0xcb; command(); a=0; while(line_4[a] lcd = line_4[a]; write_data(); delay_ms(100);

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 167

Page 170: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

lcd=0x80;command();a=0; while (a<=16) LCD = line_1[]; write_data(); delay_ms(100); a++; b=0;LCD =0xc0;command(); while (line_1[a]) a=0; while(line_3[a]) lcd = line_3[a]; write_data(); a++; adc = 4*read_adc ( ) ; lcd=0xc9; command(); for (i=1;i<=2;i++) lcd = line_2[adc]; write_data(); adc++; lcd=0xcb; command(); while(line_4[a]!) lcd = line_4[a]; write_data(); a++; i=0; LCD =0X80;

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 168

Page 171: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

command(); while (I<=16) LCD = line_1[a]; write_data(); delay_ms(300); a=0;

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 169

Page 172: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

PHẦN V

PHỤ LỤC

Phụ lục 1 : 16F877A.HPhụ lục 2 : DEFS_16F877A.H

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 170

Page 173: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

16FF877A.H

//////// Standard Header file for the PIC16F877 device ////////////////#device PIC16F877#nolist//////// Program memory: 8192x14 Data RAM: 367 Stack: 8//////// I/O: 33 Analog Pins: 8//////// Data EEPROM: 256//////// C Scratch area: 77 ID Location: 2000//////// Fuses: LP,XT,HS,RC,NOWDT,WDT,NOPUT,PUT,PROTECT,PROTECT_5%//////// Fuses:PROTECT_50%,NOPROTECT,NOBROWNOUT,BROWNOUT,LVP,NOLVP,CPD//////// Fuses: NOCPD,WRT,NOWRT,DEBUG,NODEBUG////////////////////////////////////////////////////////////////////////// I/O// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),//PORT_x_PULLUPS(), INPUT(),//OUTPUT_LOW(), OUTPUT_HIGH(),//OUTPUT_FLOAT(), OUTPUT_BIT()// Constants used to identify pins in the above are: #define PIN_A0 40 #define PIN_A1 41 #define PIN_A2 42 #define PIN_A3 43 #define PIN_A4 44 #define PIN_A5 45 #define PIN_B0 48 #define PIN_B1 49 #define PIN_B2 50 #define PIN_B3 51 #define PIN_B4 52 #define PIN_B5 53 #define PIN_B6 54 #define PIN_B7 55 #define PIN_C0 56 #define PIN_C1 57 #define PIN_C2 58 #define PIN_C3 59 #define PIN_C4 60 #define PIN_C5 61 #define PIN_C6 62 #define PIN_C7 63 #define PIN_D0 64

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 171

Page 174: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

#define PIN_D1 65#define PIN_D2 66#define PIN_D3 67#define PIN_D4 68#define PIN_D5 69#define PIN_D6 70#define PIN_D7 71#define PIN_E0 72#define PIN_E1 73#define PIN_E2 74////////////////////////////////////////////////////////////////// Useful defines#define FALSE 0#define TRUE 1#define BYTE int#define BOOLEAN short int#define getc getch#define fgetc getch#define getchar getch#define putc putchar#define fputc putchar#define fgets gets#define fputs puts////////////////////////////////////////////////////////////////// Control// Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE()// Constants returned from RESTART_CAUSE() are:#define WDT_FROM_SLEEP 3#define WDT_TIMEOUT 11#define MCLR_FROM_SLEEP 19#define MCLR_FROM_RUN 27#define NORMAL_POWER_UP 24#define BROWNOUT_RESTART 26////////////////////////////////////////////////////////////////// Timer 0// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() orSETUP_TIMER_0(),//SET_TIMER0() or SET_RTCC(),// GET_TIMER0() or GET_RTCC()// Constants used for SETUP_TIMER_0() are:#define RTCC_INTERNAL 0#define RTCC_EXT_L_TO_H 32#define RTCC_EXT_H_TO_L 48#define RTCC_DIV_1 8#define RTCC_DIV_2 0#define RTCC_DIV_4 1#define RTCC_DIV_8 2#define RTCC_DIV_16 3#define RTCC_DIV_32 4

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 172

Page 175: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

#define RTCC_DIV_64 5#define RTCC_DIV_128 6#define RTCC_DIV_256 7#define RTCC_8_BIT 0// Constants used for SETUP_COUNTERS() are the above// constants for the 1st param and the following for// the 2nd param:////////////////////////////////////////////////////////////////// WDT// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS()(see above)//RESTART_WDT()#define WDT_18MS0x8008#define WDT_36MS9#define WDT_72MS10#define WDT_144MS 11#define WDT_288MS 12#define WDT_576MS 13#define WDT_1152MS 14#define WDT_2304MS 15////////////////////////////////////////////////////////////////// Timer 1// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1// Constants used for SETUP_TIMER_1() are:// (or (via |) together constants from each group)#define T1_DISABLED0#define T1_INTERNAL0x85#define T1_EXTERNAL0x87#define T1_EXTERNAL_SYNC 0x83#define T1_CLK_OUT8#define T1_DIV_BY_10#define T1_DIV_BY_20x10#define T1_DIV_BY_40x20#define T1_DIV_BY_80x30////////////////////////////////////////////////////////////////// Timer 2// Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2// Constants used for SETUP_TIMER_2() are:#define T2_DISABLED0#define T2_DIV_BY_14#define T2_DIV_BY_45#define T2_DIV_BY_166////////////////////////////////////////////////////////////////// CCP// CCP Functions: SETUP_CCPx, SET_PWMx_DUTY// CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH// Constants used for SETUP_CCPx() are:#define CCP_OFF0#define CCP_CAPTURE_FE4#define CCP_CAPTURE_RE5

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 173

Page 176: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

#define CCP_CAPTURE_DIV_46#define CCP_CAPTURE_DIV_167#define CCP_COMPARE_SET_ON_MATCH8#define CCP_COMPARE_CLR_ON_MATCH9#define CCP_COMPARE_INT0xA#define CCP_COMPARE_RESET_TIMER0xB#define CCP_PWM0xC#define CCP_PWM_PLUS_10x1c#define CCP_PWM_PLUS_20x2c#define CCP_PWM_PLUS_30x3clong CCP_1;#byte CCP_1 =0x15#byte CCP_1_LOW=0x15#byte CCP_1_HIGH=0x16long CCP_2;#byte CCP_2 =0x1B#byte CCP_2_LOW=0x1B#byte CCP_2_HIGH=0x1C////////////////////////////////////////////////////////////////// PSP// PSP Functions: SETUP_PSP, PSP_INPUT_FULL(),PSP_OUTPUT_FULL(),//PSP_OVERFLOW(), INPUT_D(), OUTPUT_D()// PSP Variables: PSP_DATA// Constants used in SETUP_PSP() are:#define PSP_ENABLED0x10#define PSP_DISABLED0#byte PSP_DATA=8////////////////////////////////////////////////////////////////// SPI// SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN// Constants used in SETUP_SPI() are:#define SPI_MASTER0x20#define SPI_SLAVE0x24#define SPI_L_TO_H0#define SPI_H_TO_L0x10#define SPI_CLK_DIV_4 0#define SPI_CLK_DIV_16 1#define SPI_CLK_DIV_64 2#define SPI_CLK_T23#define SPI_SS_DISABLED 1#define SPI_SAMPLE_AT_END 0x8000#define SPI_XMIT_L_TO_H 0x4000////////////////////////////////////////////////////////////////// UART// Constants used in setup_uart() are:// FALSE - Turn UART off// TRUE - Turn UART on#define UART_ADDRESS2

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 174

Page 177: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

#define UART_DATA4////////////////////////////////////////////////////////////////// ADC// ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (akaSETUP_PORT_A),//SET_ADC_CHANNEL(), READ_ADC()// Constants used for SETUP_ADC() are:#define ADC_OFF0// ADC Off#define ADC_CLOCK_DIV_2 0x100#define ADC_CLOCK_DIV_8 0x40#define ADC_CLOCK_DIV_32 0x80#define ADC_CLOCK_INTERNAL 0xc0// Internal 2-6us// Constants used in SETUP_ADC_PORTS() are:#define NO_ANALOGS7 // None#define ALL_ANALOG0 // A0 A1 A2 A3 A5 E0 E1 E2#define AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF 1 // A0A1 A2 A5 E0 E1 E2 VRefh=A3#define AN0_AN1_AN2_AN3_AN42 // A0 A1 A2 A3 A5#define AN0_AN1_AN2_AN4_VSS_VREF3 // A0 A1 A2 A4VRefh=A3#define AN0_AN1_AN34 // A0 A1 A3#define AN0_AN1_VSS_VREF5 // A0 A1 VRefh=A3#define AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF 0x08 // A0 A1A5 E0 E1 E2 VRefh=A3 VRefl=A2#define AN0_AN1_AN2_AN3_AN4_AN50x09 // A0 A1 A2 A3A5 E0#define AN0_AN1_AN2_AN4_AN5_VSS_VREF 0x0A // A0 A1 A2A5 E0 VRefh=A3#define AN0_AN1_AN4_AN5_VREF_VREF0x0B // A0 A1 A5E0 VRefh=A3 VRefl=A2#define AN0_AN1_AN4_VREF_VREF0x0C // A0 A1 A4VRefh=A3 VRefl=A2#define AN0_AN1_VREF_VREF0x0D // A0 A1 VRefh=A3VRefl=A2#define AN00x0E // A0#define AN0_VREF_VREF0x0F // A0 VRefh=A3VRefl=A2#define ANALOG_RA3_REF0x1//!old only provided forcompatibility#define A_ANALOG0x2//!old only provided forcompatibility#define A_ANALOG_RA3_REF0x3//!old only provided forcompatibility#define RA0_RA1_RA3_ANALOG 0x4//!old only provided forcompatibility#define RA0_RA1_ANALOG_RA3_REF 0x5//!old only providedfor compatibility

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 175

Page 178: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

#define ANALOG_RA3_RA2_REF0x8 //!old only provided forcompatibility#define ANALOG_NOT_RE1_RE20x9 //!old only provided forcompatibility#define ANALOG_NOT_RE1_RE2_REF_RA3 0xA //!old onlyprovided for compatibility#define ANALOG_NOT_RE1_RE2_REF_RA3_RA2 0xB //!old onlyprovided for compatibility#define A_ANALOG_RA3_RA2_REF0xC //!old only providedfor compatibility#define RA0_RA1_ANALOG_RA3_RA2_REF 0xD //!old onlyprovided for compatibility#define RA0_ANALOG0xE //!old only provided forcompatibility#define RA0_ANALOG_RA3_RA2_REF0xF //!old only providedfor compatibility// Constants used in READ_ADC() are:#define ADC_START_AND_READ 7 // This is the default if nothingis specified#define ADC_START_ONLY1#define ADC_READ_ONLY6////////////////////////////////////////////////////////////////// INT// Interrupt Functions: ENABLE_INTERRUPTS(),DISABLE_INTERRUPTS(),//EXT_INT_EDGE()// Constants used in EXT_INT_EDGE() are:#define L_TO_H0x40#define H_TO_L0// Constants used in ENABLE/DISABLE_INTERRUPTS() are:#define GLOBAL0x0BC0#define INT_RTCC0x0B20#define INT_RB0xFF0B08#define INT_EXT0x0B10#define INT_AD0x8C40#define INT_TBE0x8C10#define INT_RDA0x8C20#define INT_TIMER10x8C01#define INT_TIMER20x8C02#define INT_CCP10x8C04#define INT_CCP20x8D01#define INT_SSP0x8C08#define INT_PSP0x8C80#define INT_BUSCOL0x8D08#define INT_EEPROM0x8D10#define INT_TIMER00x0B20#list

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 176

Page 179: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

DEFS_16F877A.H

//======== Register Definitions =============//-----Register Files----------------------------------------#byte PORTA = 0x05#byte PORTB = 0x06#byte PORTC = 0x07#byte PORTD = 0x08#byte PORTE = 0x09#byte EEDATA = 0x10C#byte EEADR = 0x10D#byte EEDATH = 0x10E#byte EEADRH = 0x10F#byte EECON1 = 0x18C#byte EECON2 = 0x18D#byte PR2 = 0x92#bit RA4= 0x05.4#bit RA3= 0x05.3#bit RA2= 0x05.2#bit RA1= 0x05.1#bit RA0= 0x05.0#bit RB7= 0x06.7#bit RB6= 0x06.6#bit RB5= 0x06.5#bit RB4= 0x06.4#bit RB3= 0x06.3#bit RB2= 0x06.2#bit RB1= 0x06.1#bit RB0= 0x06.0#bit RC7= 0x07.7#bit RC6= 0x07.6#bit RC5= 0x07.5#bit RC4= 0x07.4#bit RC3= 0x07.3#bit RC2= 0x07.2#bit RC1= 0x07.1#bit RC0= 0x07.0#bit RD7= 0x08.7#bit RD6= 0x08.6#bit RD5= 0x08.5#bit RD4= 0x08.4#bit RD3= 0x08.3#bit RD2= 0x08.2#bit RD1= 0x08.1

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 177

Page 180: Kilo Book

Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha

#bit RD0= 0x08.0#bit RE2= 0x09.2#bit RE1= 0x09.1#bit RE0= 0x09.0//----- INTCON ------------------------------------------#bit GIE = 0x0b.7#bit PEIE = 0x0b.6#bit TMR0IE = 0x0b.5#bit INTE = 0x0b.4#bit RBIE = 0x0b.3#bit TMR0IF = 0x0b.2#bit INTF = 0x0b.1#bit RBIF = 0x0b.0//----- PIR1 -------------------------------------------------#bit PSPIF = 0x0c.7#bit ADIF = 0x0c.6#bit RCIF = 0x0c.5#bit TXIF = 0x0c.4#bit SSPIF = 0x0c.3#bit CCP1IF = 0x0c.2#bit TMR2IF = 0x0c.1#bit TMR1IF = 0x0c.0//----- PIR2 ------------------------------------------#bit CMIF = 0x0d.6#bit EEIF = 0x0d.4#bit BCLIF = 0x0d.3#bit CCP2IF = 0x0d.0//----- PIE1 ------------------------------------------#bit PSPIE = 0x8c.7#bit ADIE = 0x8c.6#bit RCIE = 0x8c.5#bit TXIE = 0x8c.4#bit SSPIE = 0x8c.3#bit CCP1IE = 0x8c.2#bit TMR2IE = 0x8c.1#bit TMR1IE = 0x8c.0

//----- PIE2 -------------------------------------------

#bit CMIE#bit EEIE#bit BCLIE#bit CCP2IE

= 0x8d.6= 0x8d.4 = 0x8d.3 = 0x8d.0

SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 178