Академический Документы
Профессиональный Документы
Культура Документы
I. Tài liệu:
1. Giáo trình Vi xử lý – Vi điều khiển PIC 16F887 (8/2016)
2. www.microchip.com (NSX – datasheet)
3. www.picvietnam.com (diễn đàn)
4. Trang LMS.
20 10
40 45
40 45
II. Thi:
- Chuyên cần: 10% (điểm danh, nộp bài tập)
- Giữa kỳ 1: 20% (50-60 phút, đề đóng, không dùng máy tính)
- Giữa kỳ 2: 20% (60-75 phút, tk 1 tờ A4 viết tay) hoặc bài
tập lớn (quay video clip các thao tác).
- Cuối kỳ: 50% (90 phút, tk 1 tờ A4 viết tay)
VD: Giữa kỳ: 4 và 4 CC: 20% = 2đ, GK: 40% - 40%
1.6 (40% của 4) + 1.6 + 2 = 5.2
2 (40% của 5) + 2 + 2 =6
20/40/40 10/45/45
10 - 2 1
3- 1.2 1.35
* Nội dung thi: 10 - 4 4.5
= 7.2 6.85
- Giữa kỳ đợt 1: 2 câu 3 ý
Câu 1a (3đ): Viết kết quả từ đoạn lệnh cho sẵn.
VD 4_13/58 (không dùng máy tính)
Trang 001
Ôn lại đổi số hex nhị phân.
phép logic AND, OR, EXOR, chương 4.
Câu 1b (3đ): Viết lệnh từ lưu đồ cho sẵn.
VD Trang 93.
Câu 2 (4đ): Viết chương trình hoàn chỉnh điều khiển led đơn
(sáng dần, tắt dần, sáng dồn, chớp tắt, xen kẻ…) Có thể mô
phỏng được. (VD Tr. 77)
Trang 002
CHƯƠNG 1
KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F887
I. GIỚI THIỆU:
- Phân biệt Vi xử lý và Vi điều khiển ?
Micro_processor – Micro_controller
MPU – MCU
Trang 003
Vi điều khiển khác VXL ở chỗ là 3 khối trên tích hợp
chung 1 chip.
Tiêu chí lựa chọn VXL hay VĐK:
- Nhu cầu nâng cấp.
- Tốc độ xử lý, số lượng dữ liệu cần xử lý.
VD: Hình 1_1/2
Trang 004
Tốc độ: ≤ 20MHz (dùng dao động thạch anh bên ngoài)
fLàm_việc = ¼ fThạch_Anh
( /4 là do 1 lệnh cần phải có 4 xung dao động của thạch
anh)
fthạch_anh = 20Mhz fLV = 5 MHz T = 200ns
VĐK thực hiện được 5 triệu lệnh/1s.
Dao động nội: 31kHz 8MHz (2 triệu lệnh/1s)
Điện áp cung cấp: 2V – 5.5V
Có mạch reset bên trong khi mới cấp nguồn.
PUT PWRT
BOR
WDT (trang 74) Watchdog timer – Bộ định thời giám sát thời
gian tự động reset VĐK khi bị treo (có công việc xử lý nhưng
không kết thúc)
- 16xxx ? Xem bảng 1-1/7.
- Tiêu chí lựa chọn Vi điều khiển:
+ Program Memory: Bộ nhớ chương trình (Flash ROM)
Đơn vị: words 2 bytes = 16 bit
Trong trường hợp này: 14 bit
VĐK có: 8192 ô nhớ x 14 bit (PIC16F887)
Ta có: 1 lệnh cần 1 ô nhớ để lưu
ta có thể lưu 8192 lệnh.
160 trang A4 (50 lệnh/1 trang A4)
+ Data memory: Bộ nhớ dữ liệu (8 bit = 1 byte)
- RAM: 368 ô nhớ x 8 bit
- EEPROM: 256 ô nhớ x 8 bit (đếm s.phẩm)
+ I/O: 35 (xem trang 8, hình 1-6)
Port A,B,C,D (8 bit) x 4 = 32
Trang 005
Port E = 3
NX: Do VĐK 8 bit nên các port ≤ 8 bit, bộ nhớ dữ liệu lưu
được cũng 8 bit.
+ ADC: chuyển đổi tương tự số (Analog to Digital Converter)
Giao tiếp với cảm biến (temperature, humidity,
pressure...)
+ PWM (CCP): Pulse Width Modulation – Điều chế độ rộng xung
Điều khiển tốc độ động cơ DC (thay đổi điện áp DC)
Điều khiển độ sáng của led đơn
+ UART: Truyền dữ liệu nối tiếp bất đồng bộ
Kết nối: VĐK VĐK hoặc VĐK PC
Tiết kiệm chân kết nối khi truyền đi xa
+ Timer/Counter: Bộ định thời/Bộ đếm xung
Timer dùng để tạo thời gian chính xác (đếm xung tính
thời gian, 1 xung = 1 T (s)), đếm xung bên trong lấy từ
bộ dao động.
Counter dùng để đếm xung bên ngoài (đếm sản
phẩm, đo tần số - đếm xung trong 1s, đo tốc độ - đếm
số vòng quay / 1s)
Timer/Counter là 1 module phần cứng độc lập được
điều khiển bởi phần mềm, khi có xung đến thì counter
tự động tăng giá trị (không phụ thuộc vào vi điều khiển
khi đang xử lý công việc khác) tránh trường hợp đếm
thiếu xung (mất xung).
Trang 006
Nguồn, dao động (đồng bộ), reset
(Linh kiện nói chung: Vào, Ra, Điều khiển)
Nguồn: VDD (VCC), VSS (GND) CMOS (TTL) (11,12,31,32)
Dao động: Thạch anh OSC1, OSC2 (13,14) (XTAL1, XTAL2)
Reset: MCLR\ (1) – Master Clear
Lưu ý: Nếu không thấy dao động thạch anh và mạch reset thì ta
ngầm hiểu là đang sử dụng bên trong.
VD: Tr.77
* Tóm tắt:
1. Phân biệt VXL, HT VXL, VĐK.
2. Khảo sát VĐK
Họ VĐK 8 bit.
Họ VĐK 8 bit của Microchip (PIC 10,12,14,16,18)
i. Chọn lựa (CPU, Mem., I/O, module tích hợp)
ii. ADC, UART, PWM, Timer/Counter,…
Sơ đồ chân và chức năng chân
Kết nối (3 tín hiệu cơ bản: nguồn, dao động, reset)
Dao động, reset tích hợp bên trong hoặc kết nối bên
ngoài.
Trang 007
Trang 008
CHƯƠNG 2
TỔ CHỨC BỘ NHỚ, THANH GHI
Trang 009
CHƯƠNG 3
LỆNH HỢP NGỮ
I. GIỚI THIỆU:
- Phân biệt lệnh hợp ngữ và ngôn ngữ C.
II. LỆNH HỢP NGỮ:
- Mã lệnh. Trang 41
- Lệnh hợp ngữ. Trang 42
Trang 010
CHƯƠNG 4
NGÔN NGỮ LẬP TRÌNH C
Trang 011
Câu 1:
A = 0xB7;
B = 0x5C;
X = A | B;
B = ~A;
Y = A^B;
Z = X & Y;
FOR(I=0; I<3; I=I+2)
{
B++;
A = (A<<2) | 0x32;
}
Câu 2:
A = 0xD8;
B = 0x6A;
X = A^B;
A = ~A;
Y = X & A;
Z = B | Y;
WHILE(B < 0x6C)
{
B++;
Z = (A>>2) + 0x03;
}
Câu 3:
A = 0x4D;
B = 0XE3;
X = A & B;
B = ~(B^0X3F);
Y = X | B;
IF(Y < X ) Z = A<<4;
ELSE Z = A>>4;
DO
{
A++;
X = (X>>2) | 0XC0;
}
WHILE(A < 0X4F);
Câu 4:
A = 0x05;
B = 0xBD;
X = A^B;
FOR(K = 2; K>0; K--)
{
FOR(J = 0; J<K; J++)
{
A = (A<<2) | 0x03;
B = (B>>2) & 0xFC;
}
}
IF(A != B) { Z = (A & B) >> 3; }
ELSE { Z = (A | B) << 3; }
Trang 012
GỢI Ý GIẢI
Câu 1:
8421 8421
A=
B=
X=
B=
Y=
Z=
Lặp: I = 0: I <3: đúng thực hiện nội dung lặp
B =
A<<2 =
| 0x32 =
A =
I++ =
_______________________
Lặp: I = …: I < 3: đúng (tiếp tục)
sai (kết thúc vòng lặp for)
Câu 2:
…
So sánh: B < 0x : đúng thực hiện nd lặp của while
B++ =
A >> 2 =
+ 0x03 =
Z =
Quay lại so sánh tiếp: B < 0x : đúng thực hiện tiếp
sai kết thúc vòng lặp while
Câu 3:
…
So sánh (Y < X): đúng thực hiện nội dung của IF bỏi ELSE
sai thực hiện nội dung của ELSE bỏ IF
Thực hiện (*): (Do/While)
A =
X >> 2 =
| 0xC0 =
X =
So sánh (A < 0x ): đúng quay lại (*) thực hiện tiếp lần kế
sai kết thúc vòng lặp Do/While
Câu 4:
…
Lặp: K = 0: K > 0: đúng
Lặp: J = 0: J < K: đúng
A=
B=
J++ =
Lặp: J = … : J < K: đúng tiếp tục, sai kết thúc
_____________
K-- =
Lặp: K = …: K > 0: đúng tiếp tục, sai kết thúc
Trang 013
CHƯƠNG 5: GIAO TIẾP NGOẠI VI
Trang 014
• Nếu không thấy dao động thạch anh
và mạch Reset là ngầm hiểu ở bên
trong (tr. 5).
2. Phần mềm:
- Cấu trúc chương trình C – bài giảng.
- Giải thuật
Trang 015
TRƯỜNG HỢP ĐẦU
TIÊN
Trang 016
- Sáng dần 1 lần 2 led.
- Sáng dần 5 led, mỗi lần 2 led
Dịch trái
FOR (3 LẦN)
2 bit
Y = ((Y<<2) | 0X03) & 0x1F;
OR 0x03
Lặp 3 lần x 2 led/mỗi lần
Trang 017
0000 0000 - RD7 .. RD0
0000 0100 - bắt đầu từ RD2
FOR (6 LẦN)
0000 1100
0001 1100 << 1 Y = (Y<<1) | 0X04;
… OR 0x04
1111 1100 Lặp 6 lần
BÀI TẬP:
SÁNG DẦN 7 LED TỪ RD0 - RD6, 2 LẦN, MỖI LẦN SÁNG 2 LED
RỒI
SÁNG DẦN 6 LED TỪ RD5-RD0, 2 LẦN, MỖI LẦN SÁNG 1 LED
0000 0000
0000 0011
...
0111 1111
0000 0000
0010 0000
FOR (4 LẦN)
Trang 019
Di chuyển vị trí 8 bit cao qua vị trí của 8 bit thấp, sau
đó gán giá trị.
• LỆNH:
Y = (Y<<1) | 0X0001;
OUTPUT_D(Y);
OUTPUT_C(Y>>8);
DELAY_MS(500);
TỔNG KẾT:
- SÁNG DẦN 1 LED/1 LẦN.
- SÁNG DẦN NHIỀU LED/1 LẦN.
- SÁNG DẦN CÓ SỬ DỤNG PP CHE BIT.
- SÁNG DẦN CÓ SỐ LED > 8.
- SÁNG DẦN VỊ TRÍ BẤT KỲ.
Trang 020
• TẮT DẦN:
1111 1111 Y = Y<<1;
1111 1110
1111 1100
…
* Qui trình:
Ban đầu: sáng hết – Y = 0xFF;
Xuất ra port
Delay
Vòng lặp theo số led:
Dịch trái, phải (không cần OR,…)
Xuất
Delay
Dịch >>
1 bit
AND để tạo ra mức 0 - and với giá trị đầu tiên có bit bắt đầu = 0
1011 1111
>>1 0101 1111
&0XBF 1011 1111
0001 1111 --> LED ĐẦU TIÊN BỊ ẢNH HƯỞNG, TA MUỐN LUÔN = 1 (SÁNG)
OR 1000 0000 = 0x80
1001 1111 Trang 021
CHƯƠNG 5: GIAO TIẾP NGOẠI VI
T T S S S S S S
Trang 022
Trang 023
+ LƯU MÃ – BT MẪU TRANG 82
CONST: HẰNG SỐ - LƯU VÀO ROM (CỐ ĐỊNH), TIẾT KIỆM RAM
Trang 024
VOID GIAI_MA()
{
DV = MA7DOAN [DEM%10]; // TÁCH SỐ + LẤY MÃ
CH = MA7DOAN [DEM/10%10];
TR = MA7DOAN [DEM/100];
VOID HIEN_THI()
{
//TÙY VÀO PHẦN CỨNG: PORT D,C,B (DV,CH,TR)
OUTPUT_D(DV);
OUTPUT_C(CH); đọc đề
OUTPUT_B(TR);
}
Trang 025
KHỞI TẠO CÁC PORT B,D,C LÀ NGÕ RA
TD: VÒNG LẶP DEM = 0-9 FOR(DEM = 0; DEM<10; DEM++)
GIẢI MÃ
HIỂN THỊ
DELAY (QUAN SÁT)
QUAY LẠI TỪ ĐẦU – VỊ TRÍ TD
* VIẾT LỆNH:
//KHAI BAO THU VIEN
#INCLUDE<TV_16F887.C>
//XÓA SỐ 0 VÔ NGHĨA
IF(TR == 0XC0) // LẤY MÃ 7 ĐOẠN SO SÁNH VỚI MÃ 7Đ SỐ 0
{
TR = 0XFF; //MÃ TẮT LED – 1: TẮT (ANODE CHUNG)
IF(CH == 0XC0)
CH = 0XFF;
}
}
VOID HIEN_THI()
{
//TÙY VÀO PHẦN CỨNG: PORT D,C,B (DV,CH,TR)
OUTPUT_D(DV);
OUTPUT_C(CH);
OUTPUT_B(TR);
}
Trang 026
//VONG LAP TUAN HOAN
WHILE(TRUE) // VOID LOOP()
{
DEM = 0;
GIAI_MA();
HIEN_THI();
DELAY_MS(1000);
WHILE(DEM<9)
{
DEM++;
GIAI_MA();
HIEN_THI();
DELAY_MS(1000);
}
}
}
Trang 027
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
{
//KHỞI TẠO BAN ĐẦU
SET_TRIS…
//KHỞI TẠO LCD, ADC, PWM, TIMER, COUNTER, NGẮT
//TRẠNG THÁI BAN ĐẦU CỦA HT – khi mới cấp điện
//VÒNG LẶP TUẦN HOÀN
WHILE(TRUE)
{
//CÔNG VIỆC THỰC HIỆN LIÊN TỤC
}
}
Trang 028
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
* LCD:
I. Phần cứng:
- Trang 106, 107.
- Những ô đen là ma trận điểm 5x7 hoặc 5x8 hoặc 5x10 (cột x
hàng)
VD:
- LCD có 2 hàng, 16 cột LCD 16x2 (cột x hàng)
- Bên trong module LCD có IC LCD Controller – Hitachi.
- Alphanumeric (chữ và số theo mã ASCII)
Kết nối và lập trình để gửi dữ liệu (yêu cầu) cho LCD (không
điều khiển các ma trận điểm)
- Sơ đồ chân và chức năng chân: Bảng 5-3/106
+ Nguồn, Vào, Ra, Điều khiển (phân loại tín hiệu)
+ Nguồn:
VDD: 5V, VSS: 0V (CMOS)
VCC GND (TTL)
(Mạch số - Nguyễn Hữu Phương)
Trang 029
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Trang 030
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Trang 031
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
VOID HT_LCD()
{ // HÀNG 1: DO NHIET DO
// HÀNG 2: XXOC (CUỐI HÀNG) – XX: N.ĐỘ
LCD_COMMAND(0X80); //HÀNG 1
LCD_DATA(“DO NHIET DO”); //CHUỖI – DẤU NHÁY KÉP
Trang 032
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Trang 033
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
%03u 018
%u 18
- lcd_send_byte(thanh ghi, dữ liệu);
o thanh ghi =0: mã lệnh, =1: mã hiển thị
o dữ liệu 8 bit
Trang 107: mã lệnh
0x08 : Tắt màn hình
0x0C: hiển thị màn hình
0x0F: bật con trỏ, nhấp nháy con trỏ
0x01: Xóa màn hình
Trang 034
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Trang 035
BÀI TẬP 5_9:
* Nhận xét:
- Dùng biến trạng thái thay thế cho cách dùng while bằng if.
- Nhấn giữ ON, OFF cho 1 kết quả sáng hoặc tắt led (đạt yêu cầu).
- Nhấn giữ INV đảo trạng thái nhiều lần thêm chờ nhã phím để
tránh trường chưa kịp nhã phím chương trình kiểm tra nhiều lần nhấn.
chống dội cho phím (kiểm tra phím 2 lần + chờ nhã phím)
(Qui trình chống dội trang 94)
• Viết lệnh cho hàm chống dội: THI ghi vào tờ A4
VOID CD_PHIM()
{
IF(!INPUT(PHIM))
{
DELAY_MS(20); //CHỜ HẾT XUNG DỘI
IF(!INPUT(PHIM)) //KIỂM TRA LẦN 2 CHỐNG NHIỄU
{
//XỬ LÝ CHỨC NĂNG PHÍM
//ĐỌC ĐỀ
//CHỜ NHÃ
WHILE(!INPUT(PHIM));
}
}
}
VD: Nút nhấn UP: tăng biến DEM 1 đơn vị và khi lớn hơn 60 thì cho về 0.
VOID CD_UP()
{
IF(!INPUT(UP))
{
DELAY_MS(20); //CHỜ HẾT XUNG DỘI
IF(!INPUT(UP)) //KIỂM TRA LẦN 2 CHỐNG NHIỄU
{
//XỬ LÝ CHỨC NĂNG PHÍM
//ĐỌC ĐỀ
DEM++;
IF(DEM > 60 ) DEM = 0;
//CHỜ NHÃ
Trang 036
WHILE(!INPUT(UP));
}
}
}
VD: Nút nhấn truyền dữ liệu nối tiếp UART (TRUYEN): khi nhấn truyền giá trị
biến DEM.
VOID CD_TRUYEN()
{
IF(!INPUT(TRUYEN))
{
DELAY_MS(20); //CHỜ HẾT XUNG DỘI
IF(!INPUT(TRUYEN)) //KIỂM TRA LẦN 2 CHỐNG NHIỄU
{
//XỬ LÝ CHỨC NĂNG PHÍM
//ĐỌC ĐỀ
PUTC(DEM);
//CHỜ NHÃ
WHILE(!INPUT(TRUYEN));
}
}
}
Trang 037
INT8 CHEDO;
CHEDO++;
IF(CHEDO == 4) CHEDO = 0;
- Nút nhấn yêu cầu có nhấn thì xử lý, không nhấn thì không thực hiện gì
xử lý trực tiếp trong hàm con.
VD: Nút nhấn UP, nhấn thì tăng DEM 1 đơn vị, không nhấn thì không
thực hiện gì.
//xử lý chức năng phím (trong hàm con chống dội)
DEM++;
- Nút nhấn yêu cầu nhớ trạng thái (chế độ) khi nhấn dùng biến trạng thái.
VD: Nút nhấn UP, chọn chế độ đếm lên tự động, sau đó mặc dù không
còn nhấn nhưng số đếm vẫn tăng tự động.
//xử lý chức năng phím (trong hàm con chống dội)
TT_UD = 1; //chọn chế độ đếm lên
IF(TT_UD == 1)
{
DEM++;
IF(DEM > 60) DEM = 0;
}
IF(TT_UD == 0)
{
DEM--;
IF(DEM == -1) DEM = 60; // SIGNED INT8 DEM;
}
Trang 038
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
CHƯƠNG 6
TIMER/COUNTER
I. GIỚI THIỆU:
Timer là bộ định thời: tạo thời gian chính xác.
Vào: f T (s)
Ra: Số xung đếm được x T = thời gian cụ thể.
Hình 6-1/118
fTIMER = fTA / 4.
Counter là bộ đếm xung bên ngoài (đếm sản phẩm, đo
tần số, đo tốc độ động cơ – vòng/s)
Timer/Counter là 1 module phần cứng độc lập được
điều khiển bởi phần mềm, khi có xung đến thì counter tự
động tăng giá trị (không phụ thuộc vào vi điều khiển khi
đang xử lý công việc khác) tránh trường hợp đếm thiếu
xung (mất xung).
II. CẤU TRÚC: Hình 6-1/118
- Chế độ Timer 0:
T0CS = 0 (timer)
PSA = 1: Xung vào trực tiếp bộ đếm (1:1 – vào:ra)
PSA = 0: Xung đi qua bộ chia trước
VD: 2:1 – vào 2 xung : ra 1 xung
Timer 0 – 8 bit: đếm được 255 xung
xung ngõ vào = 255 x 2
Timer đếm được nhiều xung (tạo ra nhiều thời
gian khác nhau) khi dùng bộ chia.
Trang 039
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Chế độ Counter 0:
T0CS = 1 (Counter)
T0SE = 0 (chọn xung cạnh lên – để tăng bộ đếm)
PSA = 1 (Xung vào trực tiếp – 1:1)
Điều khiển các bit trong thanh ghi OPTION_REG (trang 119).
III. CÁC LỆNH HỖ TRỢ CỦA PHẦN MỀM CCS:
1. SETUP_TIMER_X( ): external
SETUP_TIMER_0(T0_EXT_L_TO_H | T0_DIV_1);
T0CS = 1, T0SE = 0 PSA = 1(1:1)
Thiết lập thông số cho Timer ở chế độ Counter.
2. SET_TIMERX( ):
SET_TIMER0(0);
Thiết lập giá trị cho Counter/Timer (ban đầu counter =
0 vì chưa có sản phẩm nào)
Tùy theo Timer 0,2 (giá trị thiết lập là 8 bit <=255),
Timer 1 (16 bit <=65535)
3. GET_TIMERX( ):
Đọc giá trị của Counter/Timer.
Trang 040
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
TAM = GET_TIMER0( );
IF (TAM == 1)
{ SET_TIMER0(0);
KQ_T0 ++;
IF(KQ_T0 == 1000) KQ_T0 = 0;
}
TAM = GET_TIMER0( );
IF (TAM == 1)
{ SET_TIMER0(0);
KQ_T0 --;
IF(KQ_T0 == 0) KQ_T0 = 999;
}
* Counter 1:
- Phần cứng: 6-8/139 nối vào T1CKI (T0 T0CKI)
- Phần mềm: T.tự counter 0.
T1 = GET_TIMER1( ); //khởi tạo counter 1
IF(T1 == 100) SET_TIMER1(0); SETUP_TIMER_1(T1_EXTERNAL | T1_DIV_BY_1 );
SET_TIMER1(0);
Trang 041
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
TS_GM( );
HIEN_THI( );
* TIMER:
1. Xác định chu kỳ T của ngõ vào xung của Timer.
T = 1 / ((fTA/4) / Tỷ lệ chia trước)
TRANG 122, H6-7
/4: theo cấu trúc của Timer
Tỷ lệ chia trước: 1,2,4,8 (Timer 1)
VD: fTA = 20 MHz, tỷ lệ chia trước = 8
T = 1.6 uS
2. Xác định số xung cần đếm = thời gian cần tạo / T
VD: Tạo 1s 1s / 1.6uS = 1.000.000 / 1.6 = 625 000 xung
Ta có: Timer 1 đếm tối đa <= 65.535 xung (16 bit)
Timer đếm nhiều lần ( 62.500 xung x 10 lần)
3. X.định giá trị bắt đầu của Timer = số tràn – số xung cần đếm
- Số tràn = số đếm lớn nhất + 1 = 65535 + 1 = 65.536
- Timer bắt đầu = 65.536 – 62.500 = 3036
4. Kiểm tra cờ tràn để xác định Timer đếm xong 1 chu kỳ.
- Định nghĩa cờ tràn: #bit TMR1IF = 0x0C.0
(Trang 131) vùng nhớ bank thanh
ghi - trang 30
- Kiểm tra cờ tràn:
IF(TMR1IF == 1) //Timer tràn
{
TMR1IF = 0; //XÓA CỜ TRÀN
SET_TIMER1(3036); //THIẾT LẬP LẠI GIÁ TRỊ CHO CHU KỲ MỚI
BDT++; //QUẢN LÝ SỐ LẦN TIMER ĐẾM
}
Trang 042
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
GỢI Ý:
IF(BDT < 10) LED SÁNG; //1s
IF(BDT > 10) LED TẮT; //2s
IF(BDT >= 30) BDT = 0;
TÍNH TỔNG TG CỦA 1 CHU KỲ ĐIỀU KHIỂN.
SO SÁNH TỪNG KHOẢNG THỜI GIAN.
TL
TH
T = 1 ms 100%
TH (duty cycle) = 70 %
--> 0,7 ms = 700 uS
TL = 1 - 0,7 ms = 0,3 ms = 300 uS
--> Cho Timer đếm 1 lần 0,1ms --> 7 lần (0,7ms) + 3 lần (0,3ms) = 10 lần (1ms)
Trang 043
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
CHƯƠNG 7 – ADC
8 bit
10 bit = 2^10 = 1024
Trang 044
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
N: Ngõ ra số
Vin: điện áp tương tự ngõ vào
256: 28 (ADC 8 bit)
VREF(+): chọn 5V (VDD)
VREF(-): chọn 0V (VSS)
N = 1 đơn vị
VIN = (5V*1)/256 = 19.6 mV
5V/1023 = 4.887mV
Trang 046
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Trang 047
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
CHƯƠNG 8
NGẮT
Trang 048
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Trang 049
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
10-4/214,
IV. BT MẪU: 8-2/168
Trang 050
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
CHƯƠNG 9
PWM
Trang 051
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
2. SETUP_TIMER_2(T2_DIV_
BY_16, 249, 1);
Thiết lập chu kỳ T của ngõ
ra xung (tần số ngõ ra f) –
period. Trang 181 – Hình
9-5
Lệnh 1,2 //khởi tạo PWM
3. SET_PWM1_DUTY(Value);
Thiết lập độ rộng xung (Duty
Cycle)
Chuyển thông số dạng %
giá trị số
VD:
100% độ rộng 1000
50% ? (500)
SET_PWM1_DUTY((INT16) VALUE);
ÉP KIỂU DỮ LIỆU
--> SET_PWM1_DUTY((INT16) 200); // LUÔN ĐỦ 10BIT
**************************
INT16 DORONG;
DORONG = 200;
SET_PWM1_DUTY(DORONG);
Trang 052
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Công thức 2:
Trang 053
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Công thức 3:
Duty_Cycle = PeriodPWM_MAX
(100% độ rộng xung)
=
PeriodPWM : đề cho
TOSC: C.thức 1
PVTMR2: chọn 16
100% độ rộng xung 1000
50% ? (500)
Đưa vào lệnh số 3.
IV. BT MẪU:
Bài 9-1/187
1. Phần cứng: CCP1
2. Phần mềm: Cấu trúc CT C
Trang 054
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
Bài 9-3/192
1. Phần cứng:
ENA – PIN_C0
CCP1
CCP2
IC L298 – KHỐI CÔNG SUẤT
BẢNG 9-2
- 3 CÁCH DỪNG
- CẤP ĐIỆN ĐỂ ĐK Đ.CƠ
(2 DÂY) ĐẢO CHIỀU
CẤP NGUỒN QUAY
NGƯỢC LẠI.
VẼ VÀO TỜ A4 – NGUYÊN LÝ
2. Phần mềm:
- Cấu trúc CT C
Trang 055
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
9-2/195
SET_PWM1_DUTY(VALUE);
SET_PWM2_DUTY(0);
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(VALUE);
NÚT DAO_CHIEU
HÀM KT_DC
IF(TT_DC == 1)
{
THUẬN
}
ELSE
{
NGHỊCH
}
Trang 056
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
CHƯƠNG 10
TRUYỀN DỮ LIỆU NỐI TIẾP
I. GIỚI THIỆU:
II. CẤU TRÚC:
III. CÁC LỆNH HỖ TRỢ CỦA CCS:
IV. BT MẪU:
1. PHẦN CỨNG:
2. PHẦN MỀM:
Tr. 198
Trang 057
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
2. NHẬN DỮ LIỆU:
IF(KBHIT())
{
DL_NHAN = GETCH();
//XỬ LÝ DỮ LIỆU SAU KHI NHẬN
//NẾU CẦN
IF(DL_NHAN == 1) TT_SS = 1;
IF(DL_NHAN == 0) TT_SS = 0;
//IF(TT_SS == 1)
}
HOẶC XỬ LÝ DL NHẬN BÊN NGOÀI
(các biến trạng thái – VD: TT_SS = 1)
IF(TT_SS == 1)
Trang 058
Bài giảng tóm tắt Vi xử lý – Trương Ngọc Anh – UTE – ver 1 - 2016
3. TRUYỀN DỮ LIỆU:
PUTC(VALUE);
0,1
0X30
‘A’
(8 BIT)
IV. BT MẪU:
BÀI 10-1/208
1. PHẦN CỨNG: VẼ VÀO TỜ A4
Trang 059
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT ĐỀ THI CUỐI KỲ HỌC KỲ 1 - NĂM HỌC 2016-2017
THÀNH PHỐ HỒ CHÍ MINH Môn: VI XỬ LÝ
KHOA ĐIỆN-ĐIỆN TỬ Mã môn học: MICR330363
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Đề số/Mã đề: 01 Đề thi có: 02 trang
------------------------- Thời gian: 90 phút.
Sinh viên chỉ được tham khảo một tờ giấy A4 viết tay
Câu 1: (3 điểm)
Cho hệ thống điều khiển động cơ DC 2 cấp tốc độ dùng vi điều khiển PIC16F887 và
IC L298, động cơ dùng nguồn 12VDC, dòng 2A, có 3 nút nhấn CD_1, CD_2, CD_3. Vi điều
khiển sử dụng tần số dao động 8 Mhz.
a. Vẽ sơ đồ nguyên lý kết nối (1 điểm)
b. Viết chương trình thực hiện các yêu cầu sau: (2 điểm)
Dùng PWM của PIC để điều khiển thay đổi tốc độ động cơ DC, 3 nút nhấn tương ứng
với 3 cấp độ 0%, 50%, 100%. Chu kỳ tín hiệu PWM là 1ms.
Ghi chú: Cán bộ coi thi không được giải thích đề thi.
Chuẩn đầu ra của học phần (về kiến thức) Nội dung kiểm tra
[G 4.1]: Hiểu và ứng dụng được hệ thống vi điều khiển vào thực tế. Câu 1
[G 1.3]: Thiết kế và lập trình điều khiển dùng ngôn ngữ C cho các hệ thống Câu 2
điều khiển.
[G 2.3]: Có kỹ năng thiết kế và xây dựng qui trình điều khiển cho hệ thống Câu 3
dùng vi điều khiển PIC 16F887.
Câu 1: (3 điểm)
//KHAI BAO THU VIEN VOID KT_PHIM_100()
#INCLUDE <TV_16F887.C> {
IF(INPUT(PHIM_100) == 0)
//DINH NGHIA - NUT NHAN {
#DEFINE PHIM_0 PIN_E0 SET_PWM1_DUTY((INT16)500);
#DEFINE PHIM_50 PIN_E1 }
#DEFINE PHIM_100 PIN_E2 }
LCD_COMMAND(0XC0);
// VIET HAM CON
LCD_DATA("GT cai =");
VOID KT_CDOI()
LCD_COMMAND(0XC0+8);
{
LCD_DATA(TR_GT_CAI);
IF(INPUT(C_DOI) == 0)
LCD_DATA(CH_GT_CAI);
{
LCD_DATA(DV_GT_CAI);
DELAY_MS(20);
IF(TT_CDOI == 0) LCD_DATA(" do C");
IF(INPUT(C_DOI) == 0)
ELSE LCD_DATA(" do K");
{
}
TT_CDOI = ~TT_CDOI;
}
VOID DO_K4()
WHILE(INPUT(C_DOI) == 0);
{
}
SET_ADC_CHANNEL(4);
}
DELAY_MS(1);
ND_K4 = 0;
VOID GM_K4()
FOR(I=0; I<100; I++)
{
{
DV_K4 = ND_K4%10 + 0X30;
ND_K4 = ND_K4 + READ_ADC();
CH_K4 = ND_K4/10%10 + 0X30;
DELAY_MS(1);
TR_K4 = ND_K4/100 + 0X30;
}
ND_K4 = ND_K4/100/2.046;
DV_GT_CAI = GT_CAI%10 + 0X30;
}
CH_GT_CAI = GT_CAI/10%10 + 0X30;
TR_GT_CAI = GT_CAI/100 + 0X30;
}