Microsoft Word Document1 GIÁO TRÌNH THỰC HÀNH VI XỬ LÝ KỸ THUẬT VI XỬ LÝ BỘ MÔN ĐIỆN TỬ MÁY TÍNH KHOA CÔNG NGHỆ ĐIỆN TỬ BÀI GIẢNG THỰC HÀNH VI XỬ LÝ PIC December 22, 2012 Biên soạn Phạm Quang Trí pqtri2002gmail com 1 BÀI 1 LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LED ĐƠN 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 chương trình vào vi điều khiển và sử dụng Mô hình thí nghiệm PIC để kiểm chứng � Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển PIC.
Trang 1GIÁO TRÌNH THỰC HÀNH
VI XỬ LÝ/ KỸ THUẬT VI XỬ LÝ
BỘ MÔN ĐIỆN TỬ MÁY TÍNH _ KHOA CÔNG NGHỆ ĐIỆN TỬ
Trang 2BÀI 1 LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN:
LED ĐƠN
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 chương trình vào vi điều khiển và sử dụng Mô hình thí nghiệm PIC để kiểm chứng
Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển PIC
Điều khiển xuất nhập cơ bản sử dụng LED đơn
YÊU CẦU:
Nắm vững cấu trúc và tập lệnh của vi điều khiển PIC
Nắm vững cấu trúc của LED đơn
Nắm được sơ đồ và nguyên lý hoạt động của Modul LED đơn trên Mô hình thí nghiệm PIC
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 điều khiển LED đơn ở hoạt động theo nhiều kiểu khác nhau
Trang 71.2.2.1 Sơ đồ nguyên lý:
Bước 1: Thiết kế sơ đồ nguyên lý của mạch điều khiển
Hình 1.10: Sơ đồ nguyên lý của mạch điều khiển.
1.2.2.2 Lưu đồ giải thuật:
Bước 2: Thiết kế lưu đồ giải thuật của chương trình điều khiển
Hình 1.11: Lưu đồ giải thuật của chương trình điều khiển.
1.2.2.3 Chương trình điều khiển:
Bước 3: Sử dụng phần mềm MPLAB và công cụ biên dịch Hi-Tech, dựa vào lưu đồ giải thuật
của chương trình điều khiển đã thiết kế để thực hiện việc viết chương trình, biên dịch và kiểm tra lỗi
cú pháp của chương trình
Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì mới thực hiện tiếp theo các phần nội dung dưới đây
Trang 8Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// Chuong trinh chinh
void main (void)
Bước 4: Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng
quá trình hoạt động của hệ thống vi điều khiển
Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học
Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính.Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính
Trang 9xác, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây
Sơ đồ mô phỏng mạch điều khiển như sau:
Hình 1.12: Sơ đồ mô phỏng của mạch điều khiển.
1.2.2.5 Sơ đồ kết nối:
Bước 5: Sử dụng các Modul có sẵn trên Mô hình thí nghiệm PIC, đã giới thiệu ở phần đầu của bài thực hành, để lắp ráp mạch theo thiết kế bên trên Lưu ý chiều cắm của các dây cáp dữ liệu
(có dấu ký hiệu ô vuông màu trắng trong hình vẽ)
Thực hiện qui trình kết nối các Modul theo sơ đồ dưới đây:
Tắt nguồn AC cấp cho Mô hình thí nghiệm PIC
Dùng dây cáp USB kết nối giữa cổng USB của máy tính với đầu nối USB của Modul lập trình PICkit2
Dùng dây cáp 6 kết nối giữa đầu nối ICSP của Modul lập trình PICkit2 với đầu nối ICSP của Modul vi điều khiển
Dùng dây cáp 8 kết nối giữa đầu nối PORT D của Modul vi điều khiển với đầu nối INPUT 1 của Modul đệm – đảo
Dùng dây cáp 8 kết nối giữa đầu nối OUTPUT 1 của Modul đệm – đảo với đầu nối BARLED 1 của Modul LED đơn
Dùng 3 dây cáp 3 kết nối giữa đầu nối POWER của Modul vi điều khiển, Modul LED đơn và Modul đệm – đảo với đầu nối +5V của Modul nguồn cung cấp
D0
D7 D5 D3
D1 D0D2 D4 D6
RD7
RB2
RD6 RD4 RD2 RD0
RD0 RB4 RD1RB5 RD2RB6 RD3RB7 RD4RC0 RD6RC1 RD7RC2
RC7 RC5 RC3
RB3 RB0
D2
R3 330 +5V
D3
R4 330 +5V
D4
R5 330 +5V
D5
R6 330 +5V
D6
R7 330 +5V
D7
R8 330 +5V
D8
R9 330 +5V
1B 1 2B 2 3B 3 4B 4 5B 5 6B 6 7B 7 8B 8
1C 182C 173C 164C 155C 146C 137C 128C 11
COM 10U2
ULN2803
+5V
2 4 6 8
1
RP2 10K +5V
R1
100R
R10 10k
C3 0.1uF
2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4
RA4/T0CKI/C1OUT 6
RA5/AN4/SS/C2OUT 7
RE0/AN5/RD 8
RE1/AN6/WR 9
RE2/AN7/CS 10
OSC1/CLKIN 13
OSC2/CLKOUT 14
RC1/T1OSI/CCP2 16RC2/CCP1 17RC3/SCK/SCL 18
RD0/PSP0 19RD1/PSP1 20
RB7/PGD 40RB6/PGCRB5 3938 RB4 37RB3/PGMRB2 3635 RB1 34RB0/INT 33
RD7/PSP7 30RD6/PSP6 29RD5/PSP5 28RD4/PSP4 27RD3/PSP3 22RD2/PSP2 21
RC7/RX/DTRC6/TX/CK 2625 RC5/SDO 24RC4/SDI/SDA 23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI 15
MCLR/Vpp/THV 1
U1
PIC16F877A
Trang 10Hình 1.13: Sơ đồ kết nối của mạch điều khiển.
Bước 6: Sử dụng phần mềm MPLAB hoặc PICkit2 để thực hiện việc nạp chương trình cho vi
điều khiển PIC16F877A trên Mô hình thí nghiệm PIC
Thực hiện qui trình nạp chương trình cho PIC:
Bật nguồn AC cấp cho Mô hình thí nghiệm PIC
Khởi động phần mềm nạp chương trình (MPLAB hoặc PICkit2)
Chọn tập tin của chương trình điều khiển cần nạp
Reset lại mạch nạp PICkit2
Nạp chương trình vào vi điều khiển
Reset lại vi điều khiển để chạy chương trình và quan sát trực tiếp kết quả trên Mô hình thí nghiệm PIC
Quan sát trực tiếp kết quả trên Mô hình thí nghiệm PIC Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành
Trang 111.3 Bài tập:
1.3.1 Câu hỏi thảo luận:
Xem và trả lời các câu hỏi lý thuyết trong phần “Ex1: Point LED Lab” của quyển “Câu hỏi
chuẩn bị kiến thức bài thực hành”
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Điều khiển 8 LED đơn được nối với Port D (có sử dụng bộ đệm đảo) đếm lên nhị phân 8 bit
Thời gian thay đổi trạng thái là 500ms với tần số dao động thạch anh là 4MHz
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// Chuong trinh chinh
void main (void)
delay_ms(100);
delay_ms(100);
Trang 12delay_ms(100);
delay_ms(100);
} }
}
1.3.3.2 Bài số 2:
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Điều khiển 8 LED đơn được nối với Port D (có sử dụng bộ đệm đảo) sáng dần lên và tắt hết
Thời gian thay đổi trạng thái là 500ms với tần số dao động thạch anh là 4MHz
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// Chuong trinh chinh
void main (void)
{
// Khai bao bien
unsigned char i,dat_D;
Trang 13}
1.3.3.3 Bài số 3:
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Điều khiển 8 LED đơn được nối với Port D (có sử dụng bộ đệm đảo) sáng đuổi
Thời gian thay đổi trạng thái là 500ms với tần số dao động thạch anh là 4MHz
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// Chuong trinh chinh
void main (void)
{
// Khai bao bien
unsigned char i,dat_D;
// Chuong trinh
init_PORTD();
while(1)
{
Trang 14}
1.3.3.4 Bài số 4:
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Điều khiển 8 LED đơn được nối với Port D (có sử dụng bộ đệm đảo) sáng dồn và tắt hết
Thời gian thay đổi trạng thái là 500ms với tần số dao động thạch anh là 4MHz
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// Chuong trinh chinh
void main (void)
{
// Khai bao bien
unsigned char i;
// Khai bao hang
const unsigned char a[] = {0x00,
Trang 150xF9,0xFA,0xFC,
0xFD,0xFE, 0xFF};
}
1.3.3.5 Bài số 5:
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Điều khiển 8 LED đơn được nối với Port D (có sử dụng bộ đệm đảo) thực hiện liên tục lần lượt các hoạt động:
Thời gian thay đổi trạng thái là 500ms với tần số dao động thạch anh là 4MHz
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
Trang 16// Ten CTC: choptat(n)
// Thong so dau vao: n - So lan lap lai cua chuong trinh
// Thong so dau ra:
// Cong dung: Thuc hien hoat dong chop tat 8 LED noi voi Port0
// ***************************************************
void choptat(unsigned char n)
{
// Khai bao bien
// Dinh nghia ham
while(n ) // Vong lap thuc hien
// Thong so dau vao: n - So lan lap lai cua chuong trinh
// Thong so dau ra:
// Cong dung: Thuc hien hoat dong dem len nhi phan 8 LED noi voi Port0
Trang 17// Ten CTC: sangduoi(n)
// Thong so dau vao: n - So lan lap lai cua chuong trinh
// Thong so dau ra:
// Cong dung: Thuc hien hoat dong sang duoi 8 LED noi voi Port0
// ***************************************************
void sangduoi(unsigned char n)
{
// Khai bao bien
unsigned char i,dat_D;
// Thong so dau vao: n - So lan lap lai cua chuong trinh
// Thong so dau ra:
// Cong dung: Thuc hien hoat dong sang dan 8 LED noi voi Port0
// ***************************************************
void sangdan(unsigned char n)
{
// Khai bao bien
unsigned char i,dat_D;
// Dinh nghia ham
Trang 18// Thong so dau vao: n - So lan lap lai cua chuong trinh
// Thong so dau ra:
// Cong dung: Thuc hien hoat dong sang don 8 LED noi voi Port0
// ***************************************************
void sangdon(unsigned char n)
{
// Khai bao bien
unsigned char i,tempo,dat_D;
// Chuong trinh chinh
void main (void)
Trang 19BÀI 2 LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN:
LED 7 ĐOẠN
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 chương trình vào vi điều khiển và sử dụng Mô hình thí nghiệm PIC để kiểm chứng
Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển PIC
Điều khiển xuất nhập cơ bản sử dụng LED 7 đoạn được kết nối theo nhiều phương pháp khác nhau
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ấu trúc và tập lệnh của vi điều khiển PIC
Nắm vững cấu trúc của LED 7 đoạn
Nắm được sơ đồ và nguyên lý hoạt động của Modul LED 7 đoạn trên Mô hình thí nghiệm PIC
Nắm được nguyên lý điều khiển LED 7 đoạn ở các chế độ khác nhau:
Không đa hợp và ngõ vào dữ liệu kiểu BCD (Non Multiplexed displays with BCD inputs)
Không đa hợp và ngõ vào dữ liệu kiểu 7 đoạn (Non Multiplexed displays with 7 segment inputs)
Đa hợp và ngõ vào dữ liệu kiểu BCD (Multiplexed BCD input displays)
Đa hợp và ngõ vào dữ liệu kiểu 7 đoạn (Multiplexed 7 segment input displays)
Biết cách viết các chương trình điều khiển LED 7 đoạn ở hoạt động theo nhiều kiểu khác nhau
Biết cách viết các chương trình điều khiển để hiển thị thông tin và số liệu trên các bộ hiển thị dùng LED 7 đoạn
Trang 242.2.1.3 Các hư hỏng thường gặp:
Đèn chỉ báo nguồn AC không sáng Ö Kiểm tra lại nguồn điện AC220V, dây nguồn AC, công tắc nguồn AC
Đèn chỉ báo nguồn DC không sáng Ö Kiểm tra lại cầu chì, công tắc nguồn DC
Vi điều khiển bị nóng quá mức Ö Kiểm tra lại chiều cắm vi điều khiển trên mạch
Cầu chì đứt liên tục khi bật nguồn Ö Kiểm tra lại cắm cáp POWER có bị lệch hay không
Hình 2.10: Cách cắm cáp nguồn (POWER) trên mô hình thí nghiệm PIC.
Không nạp được chương trình cho vi điều khiển Ö Kiểm tra mạch nạp, dây cáp USB, dây cáp ICSP, vi điều khiển
Mạch hoạt động (thường là không hoạt động) nhưng không như ý muốn Ö Kiểm tra lại chiều cắm của các cáp dữ liệu
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Sử dụng cấu hình “Bộ hiển thị không đa hợp – Ngõ vào dữ liệu kiểu 7 đoạn”
Điều khiển 2 LED 7 đoạn được kết nối với Port C (LED hàng chục) và Port D (LED hàng đơn vị)
Hiển thị tăng dần các giá trị số thập phân từ 00 đến 99
Thời gian thay đổi giá trị 500ms với tần số dao động thạch anh là 4MHz
Trang 252.2.2.1 Sơ đồ nguyên lý:
Bước 1: Thiết kế sơ đồ nguyên lý của mạch điều khiển
Hình 2.11: Sơ đồ nguyên lý của mạch điều khiển.
Trang 262.2.2.2 Lưu đồ giải thuật:
Bước 2: Thiết kế lưu đồ giải thuật của chương trình điều khiển
Hình 2.12: Lưu đồ giải thuật của chương trình điều khiển.
Trang 272.2.2.3 Chương trình điều khiển:
Bước 3: Sử dụng phần mềm MPLAB và công cụ biên dịch Hi-Tech, dựa vào lưu đồ giải thuật
của chương trình điều khiển đã thiết kế để thực hiện việc viết chương trình, biên dịch và kiểm tra lỗi
cú pháp của chương trình
Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì mới thực hiện tiếp theo các phần nội dung dưới đây
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port C
// Chuong trinh chinh
void main (void)
{
// Khai bao bien
unsigned char i,j;
// Khai bao hang
const unsigned char a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
Trang 28{ for(j=0;j<=9;j++)
}
Bước 4: Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mơ phỏng
quá trình hoạt động của hệ thống vi điều khiển
Mạch mơ phỏng này đã được thiết kế sẵn và lưu trong máy tính Vì thế người học cĩ thể tự vẽ thiết kế mạch mơ phỏng hoặc lấy mạch mơ phỏng cĩ sẵn trong cơ sở dữ liệu của mơn học
Thực hiện chạy mơ phỏng và quan sát trực tiếp kết quả trên màn hình máy tính.Nếu cĩ bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thơng thường do giải thuật chương trình khơng chính xác hoặc do mạch mơ phỏng vẽ khơng chính xác, cần phải được kiểm tra lại Nếu khơng cĩ lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây
Sơ đồ mơ phỏng mạch điều khiển như sau:
Hình 2.13: Sơ đồ mơ phỏng của mạch điều khiển.
Bước 5: Sử dụng các Modul cĩ sẵn trên Mơ hình thí nghiệm PIC, đã giới thiệu ở phần đầu của bài thực hành, để lắp ráp mạch theo thiết kế bên trên Lưu ý chiều cắm của các dây cáp dữ liệu
(cĩ dấu ký hiệu ơ vuơng màu trắng trong hình vẽ)
Thực hiện qui trình kết nối các Modul theo sơ đồ dưới đây:
A2 C2 E2 F2 G2
A1 C1 E1 G1 A1
G1
B1 D1 F1 RD7
A2 C2 E2 F2 G2 56 56 56 56
56 56 56 56
RA4/T0CKI/C1OUT 6
RA5/AN4/SS/C2OUT 7
RE0/AN5/RD 8
RE1/AN6/WR 9
RE2/AN7/CS 10
OSC1/CLKIN 13
OSC2/CLKOUT 14
RB3/PGMRB2 3635
U1
PIC16F877A
(CẤU HÌNH KHÔNG ĐA HỢP, NGÕ VÀO 7 ĐOẠN)
Trang 29Tắt nguồn AC cấp cho Mô hình thí nghiệm PIC
Dùng dây cáp USB kết nối giữa cổng USB của máy tính với đầu nối USB của Modul lập trình PICkit2
Dùng dây cáp 6 kết nối giữa đầu nối ICSP của Modul lập trình PICkit2 với đầu nối ICSP của Modul vi điều khiển
Dùng dây cáp 8 kết nối giữa đầu nối PORT C của Modul vi điều khiển với đầu nối 7SEG5 IN của Modul LED 7 đoạn
Dùng dây cáp 8 kết nối giữa đầu nối PORT D của Modul vi điều khiển với đầu nối 7SEG4 IN của Modul LED 7 đoạn
Dùng dây cáp 8 kết nối giữa đầu nối SEL LED IN của Modul LED 7 đoạn với đầu nối
SWITCH của Modul công tắc Các công tắc phải đặt ở vị trí ON
Dùng 2 dây cáp 3 kết nối giữa đầu nối POWER của Modul vi điều khiển và Modul LED 7 đoạn với đầu nối +5V của Modul nguồn cung cấp
Hình 2.14: Sơ đồ kết nối của mạch điều khiển.
Bước 6: Sử dụng phần mềm MPLAB hoặc PICkit2 để thực hiện việc nạp chương trình cho vi
điều khiển PIC16F877A trên Mô hình thí nghiệm PIC
Thực hiện qui trình nạp chương trình cho PIC:
Bật nguồn AC cấp cho Mô hình thí nghiệm PIC
Khởi động phần mềm nạp chương trình (MPLAB hoặc PICkit2)
Chọn tập tin của chương trình điều khiển cần nạp
Reset lại mạch nạp PICkit2
Nạp chương trình vào vi điều khiển
Reset lại vi điều khiển để chạy chương trình và quan sát trực tiếp kết quả trên Mô hình thí nghiệm PIC
Trang 30Quan sát trực tiếp kết quả trên Mô hình thí nghiệm PIC Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Sử dụng cấu hình “Bộ hiển thị không đa hợp – Ngõ vào dữ liệu kiểu BCD”
Điều khiển 2 LED 7 đoạn được kết nối với Port D
Hiển thị tăng dần các giá trị số thập phân từ 00 đến 99
Thời gian thay đổi giá trị 500ms với tần số dao động thạch anh là 4MHz
Bước 1: Thiết kế sơ đồ nguyên lý của mạch điều khiển
Hình 2.15: Sơ đồ nguyên lý của mạch điều khiển.
Bước 2: Thiết kế lưu đồ giải thuật của chương trình điều khiển
Trang 31Hình 2.16: Lưu đồ giải thuật của chương trình điều khiển.
Bước 3: Sử dụng phần mềm MPLAB và công cụ biên dịch Hi-Tech, dựa vào lưu đồ giải thuật
của chương trình điều khiển đã thiết kế để thực hiện việc viết chương trình, biên dịch và kiểm tra lỗi
cú pháp của chương trình
Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì mới thực hiện tiếp theo các phần nội dung dưới đây
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
// ***************************************************
void init_PORTD(void)
{
PORTD = 0X00;
Trang 32// Dau vao: x = Gia tri HEX (00 - 99)
// Dau ra: y = Gia tri BCD nen (00 - 99)
// Chuong trinh chinh
void main (void)
{
// Khai bao bien
unsigned char i,dat_D;
}
Bước 4: Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng
quá trình hoạt động của hệ thống vi điều khiển
Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học
Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính.Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây
Trang 33Sơ đồ mơ phỏng mạch điều khiển như sau:
Hình 2.17: Sơ đồ mơ phỏng của mạch điều khiển.
Bước 5: Sử dụng các Modul cĩ sẵn trên Mơ hình thí nghiệm PIC, đã giới thiệu ở phần đầu của bài thực hành, để lắp ráp mạch theo thiết kế bên trên Lưu ý chiều cắm của các dây cáp dữ liệu
(cĩ dấu ký hiệu ơ vuơng màu trắng trong hình vẽ)
Thực hiện qui trình kết nối các Modul theo sơ đồ dưới đây:
Tắt nguồn AC cấp cho Mơ hình thí nghiệm PIC
Dùng dây cáp USB kết nối giữa cổng USB của máy tính với đầu nối USB của Modul lập trình PICkit2
Dùng dây cáp 6 kết nối giữa đầu nối ICSP của Modul lập trình PICkit2 với đầu nối ICSP của Modul vi điều khiển
Dùng dây cáp 8 kết nối giữa đầu nối PORT D của Modul vi điều khiển với đầu nối BCD IN 1-2 của Modul giải mã 7 đoạn
Dùng dây cáp 8 kết nối giữa đầu nối 7SEG OUT 1 của Modul giải mã 7 đoạn với đầu nối 7SEG IN 4 của Modul LED 7 đoạn
Dùng dây cáp 8 kết nối giữa đầu nối 7SEG OUT 2 của Modul giải mã 7 đoạn với đầu nối 7SEG IN 5 của Modul LED 7 đoạn
Dùng dây cáp 8 kết nối giữa đầu nối SEL LED IN của Modul LED 7 đoạn với đầu nối
SWITCH của Modul cơng tắc Các cơng tắc phải đặt ở vị trí ON
Dùng 3 dây cáp 3 kết nối giữa đầu nối POWER của Modul vi điều khiển, Modul giải
mã 7 đoạn và Modul LED 7 đoạn với đầu nối +5V của Modul nguồn cung cấp
A1 C1 E1 G1
A1 C1 E1 G1
A2 C2 E2 G2
A2 C2 E2 G2
RD7
RB2
RD6 RD4 RD2
RD3 RD0 RD2
RB4 RB6 RD4 RB7 RD5
RC0 RD7 RC1
RC7
RD0 RC6 RC4
RB3 RB0
RA4/T0CKI/C1OUT 6
RA5/AN4/SS/C2OUT 7
RE0/AN5/RD 8 RE1/AN6/WR 9 RE2/AN7/CS 10
OSC1/CLKIN 13 OSC2/CLKOUT 14
RC1/T1OSI/CCP2 16RC2/CCP1 17RC3/SCK/SCL 18
RD0/PSP0 19RD1/PSP1 20
RB7/PGD 40RB6/PGCRB5 3938 RB4 37RB3/PGMRB2 3635 RB1 34RB0/INT 33
RD7/PSP7 30RD6/PSP6 29RD5/PSP5 28RD4/PSP4 27RD3/PSP3 22RD2/PSP2 21RC7/RX/DTRC6/TX/CK 2625 RC5/SDO 24RC4/SDI/SDA 23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI 15
MCLR/Vpp/THV 1
U1
PIC16F877A (CẤU HÌNH KHÔNG ĐA HỢP, NGÕ VÀO BCD)
Trang 34Hình 2.18: Sơ đồ kết nối của mạch điều khiển.
Bước 6: Sử dụng phần mềm MPLAB hoặc PICkit2 để thực hiện việc nạp chương trình cho vi
điều khiển PIC16F877A trên Mô hình thí nghiệm PIC
Thực hiện qui trình nạp chương trình cho PIC:
Bật nguồn AC cấp cho Mô hình thí nghiệm PIC
Khởi động phần mềm nạp chương trình (MPLAB hoặc PICkit2)
Chọn tập tin của chương trình điều khiển cần nạp
Trang 35Reset lại mạch nạp PICkit2
Nạp chương trình vào vi điều khiển
Reset lại vi điều khiển để chạy chương trình và quan sát trực tiếp kết quả trên Mô hình thí nghiệm PIC
Quan sát trực tiếp kết quả trên Mô hình thí nghiệm PIC Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch sử dụng PIC16F877A để thực hiện
các yêu cầu sau:
Sử dụng cấu hình “Bộ hiển thị đa hợp – Ngõ vào dữ liệu kiểu 7 đoạn”
Điều khiển 2 LED 7 đoạn được kết nối với Port B (Port chọn LED) và Port D (Port hiển thị)
Hiển thị tăng dần các giá trị số thập phân từ 00 đến 99
Thời gian thay đổi giá trị 500ms với tần số dao động thạch anh là 4MHz
Bước 1: Thiết kế sơ đồ nguyên lý của mạch điều khiển
Hình 2.19: Sơ đồ nguyên lý của mạch điều khiển.
Trang 362.2.4.2 Lưu đồ giải thuật:
Bước 2: Thiết kế lưu đồ giải thuật của chương trình điều khiển
BEGIN Main:
Cấu hình cho Port B Init_PORTB() Cấu hình cho Port D Init_PORTD()
Loop:
Tạo trễ 500ms (time_del = 500) delayscan(time_del)
Đặt giá trị ban đầu số đếm dat_disp = 0
Tăng giá trị số đếm dat_disp = dat_disp + 1
Số đếm 99 ?
Đ S
Đổi giá trị số đếm sang số BCD bcd1_dig = hex8tobcd99(dat_disp) Loop_Inc:
Đổi giá trị BCD sang mã 7 đoạn bcd2to7seg(bcd1_dig)
Hình 2.20: Lưu đồ giải thuật của chương trình điều khiển (Phần 1)
Trang 37Hình 2.21: Lưu đồ giải thuật của chương trình điều khiển (Phần 2)
Trang 38Xác định giá trị hàng CHỤC của
số HEX (X) CHỤC = X / 10 Xác định giá trị hàng ĐƠN VỊ của số HEX (X) ĐƠN VỊ = X % 10
END
Ghép hàng CHỤC và ĐƠN VỊ thành số BCD nén (Y)
Y = (CHỤC << 4) | ĐƠN VỊ
Hex8toBcd99
Input: X = Gia tri HEX.
Output: Y = Gia tri BCD nen.
Hình 2.22: Lưu đồ giải thuật của chương trình điều khiển (Phần 3).
Bước 3: Sử dụng phần mềm MPLAB và công cụ biên dịch Hi-Tech, dựa vào lưu đồ giải thuật
của chương trình điều khiển đã thiết kế để thực hiện việc viết chương trình, biên dịch và kiểm tra lỗi
cú pháp của chương trình
Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại Nếu không có lỗi xuất hiện thì mới thực hiện tiếp theo các phần nội dung dưới đây
Mã nguồn (Source Code) của chương trình điều khiển hệ thống như sau:
// ***************************************************
#include <htc.h>
#include <math.h>
// Cau hinh su dung dao dong noi 4MHz
CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000
// Khai bao bien
unsigned char ch_dig,dv_dig;
// ***************************************************
// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port D
Trang 39// Thong so dau vao:
// Thong so dau ra:
// Cong dung: Khoi tao Port B
// LED: Anode chung, kich hoat muc 0, 7 doan: DP (MSB) -> A (LSB)
// Du lieu hien thi chua trong o nho
// ***************************************************
// Dau vao: ch_dig,dv_dig = Gia tri hien thi (CHUC - DON VI)
// Dau ra: PortD = 7 doan LED - DP (MSB) -> A (LSB)
// ***************************************************
void disp7segmul2()
{
// Khai bao bien
unsigned char scancode,i;
unsigned char a[2];
// Dinh nghia ham
// LED: Anode chung, kich hoat muc 0, 7 doan: DP (MSB) -> A (LSB)
// Gia tri giai ma: 0 -> 9
// ***************************************************
Trang 40unsigned char i;
// Khai bao hang
const char a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
// Dinh nghia ham
// Dau vao: time_del: Thoi gian tre (ms)
// Dau vao: x = Gia tri HEX (00 - 99)
// Dau ra: y = Gia tri BCD nen (00 - 99)
// Khai bao bien
unsigned char bcd1_dig,dat_disp;
unsigned int time_del;
// Chuong trinh