kilo book
TRANSCRIPT
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
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
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
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 .
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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
Đồ Á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