Chương 1 .1 VI ĐIỀU KHIỂN PIC 16F887: ĐẶT TÍNH, CẤU TRÚC, CHỨC NĂNG CÁC PORT .2 KHẢO SÁT VI ĐIỀU KHIỂN MICROCHIP .3 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM – BÀI TẬP .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm .21 VI ĐIỀU KHIỂN PIC 16F887:.21 TỔ CHỨC BỘ NHỚ, THANH GHI .2 KIẾN TRÚC BỘ NHỚ .3 TỔ CHỨC BỘ NHỚ CỦA VI ĐIỀU KHIỂN PIC 16F887.1 Tổ chức bộ nhớ chương trình và ngăn xếp .3 Cấu trúc Pipeline .4 Khảo sát bộ nhớ dữ liệu và thanh ghi trạng thái .5 Bộ nhớ dữ liệu Eeprom .4 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM - BÀI TẬP .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm .39 xvii Chương 3 .43 VI ĐIỀU KHIỂN PIC 16F887: LỆNH HỢP NGỮ .2 NGÔN NGỮ LẬP TRÌNH HỢP NGỮ .1 Phần mềm lập trình hợp ngữ.2 Chương trình hợp ngữ cơ bản .3 Trình biên dịch cho hợp ngữ .3 LỆNH HỢP NGỮ CỦA VI ĐIỀU KHIỂN PIC 16F887 .2 Khảo sát tập lệnh tóm tắt vi điều khiển PIC 16F887 .3 Tập lệnh chi tiết .4 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM – BÀI TẬP .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm .67 VI ĐIỀU KHIỂN PIC 16F887:.67 NGÔN NGỮ LỆNH TRÌNH C .2 CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ C .1 Các kiểu dữ liệu của biến .4 Cấu trúc của chương trình C.5 Các thành phần của chương trình C .6 Con trỏ dữ liệu .3 TRÌNH BIÊN DỊCH C, THƯ VIỆN .1 Trình biên dịch C .2 Thư viện PIC16F887 của trình biên dịch C .4 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM - BÀI TẬP .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm .99 VI ĐIỀU KHIỂN PIC 16F887: GIAO TIẾP LED, LCD, PHÍM ĐƠN, MA TRẬN PHÍM .2 CHỨC NĂNG CÁC PORT CỦA VI ĐIỀU KHIỂN .3 CÁC PORT CỦA PIC 16F887.1 Port A và thanh ghi trisa .2 Port B và thanh ghi TRISB.3 Port C và thanh ghi TRISC .4 Port D và thanh ghi TRISD .5 Port E và thanh ghi TRISE.4 LỆNH TRUY XUẤT PORT DÙNG NGÔN NGỮ CCS-C .1 Lệnh set_tris_x() .3 Lệnh output_high(pin) .4 Lệnh output_low(pin) .5 Lệnh output_toggle(pin) .6 Lệnh output_bit(pin,value) .7 Lệnh value = get_tris_x() .8 Lệnh value = input(pin) .9 Lệnh input_state() .11 Lệnh output_drive(pin).12 Lệnh output_float(pin).13 Lệnh port_b_pullup( ).5 CẤU HÌNH ĐẶC BIỆT CỦA CPU .1 Cấu hình reset CPU .2 Cấu hình các ngắt đánh thức CPU .3 Cấu hình các dạng dao động của CPU .4 Cấu hình bảo vệ code .5 Bộ định thời giám sát (Watch dog timer) .6 Mạch nạp nối tiếp bên trong .6 CÁC ỨNG DỤNG ĐIỀU KHIỂN LED ĐƠN .7 CÁC ỨNG DỤNG ĐIỀU KHIỂN LED 7 ĐOẠN TRỰC TIẾP 143 5.8 CÁC ỨNG DỤNG ĐIỀU KHIỂN LED 7 ĐOẠN QUÉT .9 CÁC ỨNG DỤNG GIAO TIẾP VỚI NÚT NHẤN, BÀN PHÍM 157 5.1 Hệ thống ít phím .2 Hệ thống nhiều phím.10 CÁC ỨNG DỤNG ĐIỀU KHIỂN LCD .1 Giới thiệu LCD.2 Sơ đồ chân của LCD .3 Bộ điều khiển LCD và các vùng nhớ .4 Các lệnh điều khiển LCD .5 Các hoạt động đọc ghi LCD .7 Vùng nhớ hiển thị DDRAM .8 Lưu đồ khởi tạo LCD .9 Các chương trình hiển thị trên LCD dùng bus dữ liệu 8 bit 193 xx 5.10 Các chương trình hiển thị trên LCD dùng bus dữ liệu 4 bit 200 5.11 CÂU HỎI ÔN TẬP – BÀI TẬP – TRẮC NGHIỆM .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm. 214 VI ĐIỀU KHIỂN PIC 16F887:.1 Ngắt của Timer0.2 Timer0 đếm xung ngoại .3 Bộ chia trước .3 KHẢO SÁT TIMER1 CỦA PIC 16F887 .1 Timer1 ở chế độ định thời .2 Timer1 ở chế độ đếm xung ngoại .3 Hoạt động của timer1 ở chế độ counter đồng bộ .4 Hoạt động của timer1 ở chế độ counter bất đồng bộ .5 Đọc và ghi timer1 trong chế độ đếm không đồng bộ .6 Bộ dao động của timer1 .7 Reset timer1 sử dụng ngõ ra CCP trigger .8 Reset cặp thanh ghi TMR1H, TMR1L của timer1 .4 KHẢO SÁT TIMER2 CỦA PIC16F887 .1 Bộ chia trước và chia sau của timer2 .2 Ngõ ra của Timer2 .5 CÁC LỆNH CỦA TIMER – COUNTER TRONG NGÔN NGỮ PIC-C .1 Lệnh setup_timer_0(MODE) .2 Lệnh setup_timer_1(mode) .3 Lệnh setup_timer_2(mode) .4 Lệnh set_timerx(value) .5 Lệnh get_timerx().6 Lệnh setup_wdt() .7 Lệnh restart_wdt() .6 CÁC ỨNG DỤNG ĐỊNH THỜI DÙNG TIMER.1 Định thời dùng timer T1 .2 Định thời dùng timer T0 .3 Định thời dùng timer T2 .7 CÁC ỨNG DỤNG ĐẾM XUNG NGOẠI DÙNG COUNTER 242 6.1 Đếm xung ngoại dùng counter T0 .2 Đếm xung ngoại dùng counter T1 .8 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng. 256 VI ĐIỀU KHIỂN PIC 16F887:. 256 CHUYỂN ĐỔI TƯƠNG TỰ SANG SỐ .2 ADC CỦA VI ĐIỀU KHIỂN PIC 16F887 .1 Khảo sát ADC của PIC 16F887 .2 Khảo sát các thanh ghi của PIC 16F887.
258 xxii Cặp thanh ghi 16 bit ADRESH: ADRESL dùng để lưu kết quả chuyển đổi 10 bit của ADC sau khi chuyển đổi xong. Do kết quả chỉ có 10 bit nhưng lưu trong cặp thanh ghi 16 bit nên có 2 kiểu định dạng tùy thuộc vào bit ADFM (ADC Format). 260 Hình sau trình bày 2 kiểu định dạng của cặp thanh ghi kết quả:. 260 Chức năng của canh lề phục vụ cho 2 khả năng xử lý kết quả: nếu lấy kết quả 10 bit để xử lý thì nên chọn chế độ canh lề phải, còn nếu lấy kết quả 8 bit thì chọn chế độ canh lề trái và chỉ lấy kết quả của thanh ghi byte cao ADRESH, bỏ đi 2 bit có trọng số thấp nhất của thanh ghi ADRESL và chú ý đến tính toán giá trị, trong chương trình C nếu không khai báo thuộc tính ADC 10 bit thì phần mềm tự động lấy giá trị 8 bit cao.3 Trình tự thực hiện chuyển đổi ADC.
261 Để thực hiện chuyển đổi ADC thì phải thực hiện các bước sau:. 261 Bước 1: Cấu hình cho port:. 261 Bước 2: Cấu hình cho module ADC:. 261 Bước 3: Thiết lập cấu hình ngắt ADC nếu sử dụng:.
261 Bước 7: Đọc cặp thanh ghi kết quả (ADRESH: ADRESL), xóa bit ADIF nếu dùng ngắt. 261 Bước 8: Thực hiện chuyển đổi kế tiếp.4 Lựa chọn nguồn xung cho chuyển đổi ADC.3 CÁC LỆNH CỦA ADC TRONG NGÔN NGỮ CCS-C .1 Lệnh setup_adc(mode) .2 Lệnh setup_adc_port(value) .3 Lệnh set_adc_channel(chan) .4 Lệnh value=read_adc(mode) .4 ỨNG DỤNG ADC CỦA PIC 16F887 .1 Đo nhiệt độ dùng cảm biến LM35 .2 Đo nhiệt độ có điều khiển tái bóng đèn bằng relay .3 Đo nhiệt độ hiển thị trên led 7 đoạn quét .5 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM - BÀI TẬP .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm. 280 VI ĐIỀU KHIỂN PIC16F887: NGẮT .2 TỔNG QUAN VỀ NGẮT .3 NGẮT CỦA VI ĐIỀU KHIỂN PIC16F887 .1 Các nguồn ngắt của PIC16F887 .2 Cấu trúc mạch điện ngắt của PIC16F887 .3 Các thanh ghi ngắt của PIC16F887 .4 CÁC LỆNH NGẮT CỦA PIC16F887 TRONG NGÔN NGỮ PIC-C .1 Lệnh enable_interrupts(level) .2 Lệnh disable_interrupts(level) .3 Viết chương trình con phục vụ ngắt .5 CÁC ỨNG DỤNG NGẮT CỦA PIC 16F887 .1 Ứng dụng ngắt của timer T1.2 Ứng dụng ngắt của ADC .3 Ứng dụng 2 ngắt của timer và ADC .6 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng. 312 VI ĐIỀU KHIỂN PIC 16F887:.
312 ĐIỀU CHẾ ĐỘ RỘNG XUNG PWM .1 Nguyên lý điều chế độ rộng xung PWM .2 Cấu trúc khối điều chế độ rộng xung PWM .3 Tính chu kỳ xung PWM.4 Tính hệ số chu kỳ xung PWM .3 KHẢO SÁT PWM NÂNG CAO.1 Cấu trúc khối PWM nâng cao .2 Các chế độ hoạt động khối PWM nâng cao .4 CÁC LỆNH ĐIỀU KHIỂN .1 Lệnh định cấu hình khối CCP .2 Lệnh thiết lập hệ số chu kỳ .3 Lệnh setup_timer_2 – lệnh định cấu hình cho timer_2 .4 Lệnh set_timerx(value) – lệnh thiết lập giá trị cho timer 323 9.5 CÁC CHƯƠNG TRÌNH ỨNG DỤNG PWM – BÀI TẬP .1 Điều khiển độ sáng của đèn cấp 1/10 dùng PWM .2 Điều khiển độ sáng của đèn 10 cấp dùng PWM .3 Điều khiển thay đổi tốc độ động cơ DC dùng PWM .6 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng. 344 VI ĐIỀU KHIỂN PIC 16F887:. 344 TRUYỀN DỮ LIỆU .2 TỔNG QUAN VỀ CÁC KIỂU TRUYỀN DỮ LIỆU .3 TRUYỀN DỮ LIỆU NỐI TIẾP ĐỒNG BỘ VÀ KHÔNG ĐỒNG BỘ .4 TRUYỀN DỮ LIỆU CỦA VI ĐIỀU KHIỂN PIC 16F887.1 Giới thiệu truyền dữ liệu EUSART .2 Khối phát dữ liệu ESUART của PIC16F887.3 Các thanh ghi TXSTA và RCSTA của PIC16F887 .4 Khối nhận dữ liệu ESUART của PIC16F887 .5 Thanh ghi tạo tốc độ baud của PIC16F887 .5 CÁC LỆNH TRUYỀN DỮ LIỆU EUSART CỦA PIC16F887 358 10.1 Lệnh setup_uart(BAUD, STREAM) .3 Lệnh Value = Getc(),Value = Fgetc(Stream), Value = Getch(), Value = Getchar() .4 Lệnh value = KBHIT() .6 ỨNG DỤNG TRUYỀN DỮ LIỆU EUSART CỦA PIC16F887 359 10.1 Truyền dữ liệu giữa PIC16F887 và máy tính điều khiển led 359 10.2 Phần mềm truyền dữ liệu terminal trên máy tính .3 Truyền dữ liệu giữa PIC16F887 và máy tính hiển thị LCD 363 10.4 Truyền và nhận dữ liệu giữa PIC16F887 và máy tính.5 Truyền và nhận dữ liệu giữa PIC16F887 và máy tính dùng ngắt để nhận dữ liệu .2 Tổng quan về truyền dữ liệu chuẩn I2C .3 Dạng sóng truyền dữ liệu chuẩn I2C .4 Quy trình truyền dữ liệu chuẩn I2C.8 KHẢO SÁT VÀ LẬP TRÌNH GIAO TIẾP IC REALTIME DS1307 .1 Khảo sát IC DS1307 .2 Giao tiếp PIC 16F887 với DS1307 .3 Lập trình giao tiếp PIC 16F887 với DS1307 .9 CÂU HỎI ÔN TẬP – TRẮC NGHIỆM .1 Câu hỏi ôn tập .2 Câu hỏi mở rộng .3 Câu hỏi trắc nghiệm. 384 TÀI LIỆU THAM KHẢO.
386 xxvii Chương 1 VI ĐIỀU KHIỂN PIC 16F887: ĐẶT TÍNH, CẤU TRÚC, CHỨC NĂNG CÁC PORT 1.1 GIỚI THIỆU Vi xử lý có rất nhiều loại bắt đầu từ 4 bit cho đến 32 bit, vi xử lý 4 bit hiện nay không còn nhưng vi xử lý 8 bit vẫn còn mặc dù đã có vi xử lý 64 bit. Lý do sự tồn tại của vi xử lý 8 bit là phù hợp với một số yêu cầu điều khiển trong công nghiệp. Các vi xử lý 32 bit, 64 bit thường sử dụng cho các máy tính vì khối lượng dữ liệu của máy tính rất lớn nên cần các vi xử lý càng mạnh càng tốt. Các hệ thống điều khiển trong công nghiệp sử dụng các vi xử lý 8 bit hay 16 bit như hệ thống điện của xe hơi, hệ thống điều hòa, hệ thống điều khiển các dây chuyền sản xuất, … Hình 1- 1.
Các thiết bị sử dụng vi xử lý Khi sử dụng vi xử lý thì phải thiết kế một hệ thống gồm có: Vi xử lý, có bộ nhớ, các ngoại vi.