1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài giảng vi xử lí lập trình pic16f887

25 315 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 1,66 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

TỔNG QUAN LẬP TRÌNH CHO VI ĐIỀU KHIỂN • Vi điều khiển truyền thông với con người thông qua ngôn ngữ lập trình • Ngôn ngữ lập trình: cấp thấp hoặc cấp cao • Ngôn ngữ lập trình được sử dụn

Trang 1

CHƯƠNG 3 NGÔN NGỮ LẬP TRÌNH

VI ðIỀU KHIỂN

GV: Vũ Thị Hồng Nga Khoa Công Nghệ Điện Tử

1 TỔNG QUAN LẬP TRÌNH CHO VI ĐIỀU KHIỂN

• Vi điều khiển truyền thông với con người thông qua ngôn ngữ lập trình

• Ngôn ngữ lập trình: cấp thấp hoặc cấp cao

• Ngôn ngữ lập trình được sử dụng trong bài học này là ngôn ngữ C

2

Trang 2

• Hợp ngữ là một tập các qui luật (lệnh) được dùng để viết

chương trình cho vi điều khiển

• Để vi điều khiển có thể hiểu một chương trình được viết bằng

hợp ngữ thì nó cần phải được biên dịch thành ngôn ngữ máy.

• Assembly: là một tập các qui luật (lệnh) được dùng để viết

chương trình cho vi điều khiển

• Assembler: là một chương trình trên máy tính dùng để dịch các

phát biểu hợp ngữ sang ngôn ngữ của các con số 0 hoặc 1.

3

1 TỔNG QUAN LẬP TRÌNH CHO VI ĐIỀU KHIỂN

• Chương trình (Program) / Mã nguồn (Source Code):

• Là tập tin dữ liệu được lưu trên máy tính

• Được thể hiện bằng hợp ngữ (hoặc các ngôn ngữ khác: ngôn ngữ C)

• Định dạng tập tin là ASM và C( ngôn ngữ C)

Trang 3

• Thực thi ( Executive ) / Mã máy ( Machine Code ):

• Là tập tin dữ liệu được lưu trên máy tính hoặc nạp PIC

• Được thể hiện bằng các con số 0 hoặc 1

• Định dạng tập tin là HEX (Ví dụ: Program.hex)

5

• Chương trình sau khi biên dịch sẽ được nạp vào vi điều khiển

bằng các bộ lập trình (Programmer) chuyên dụng dành cho PIC.

6

Trang 4

• Vi điều khiển sau khi được lập trình sẽ được gắn vào bo mạch

chủ để điều khiển toàn hệ thống hoạt động theo chương trình

mà không cần sự can thiệp của con người.

7

2 Nhắc lại kiến thức ngôn ngữ lập trình C

Các thành phần chính của chương trình

Trang 5

Kiểu số nguyên có dấu

• Miền giá trị (số n-bit): -2 n-1 +2 n-1 – 1

9

Kiểu

(Type)

ðộ lớn (Byte)

Miền giá trị (Range)

4

–32.768 … +32.767 –2.147.483.648 … +2.147.483.647

long 4 –2.147.483.648 … +2.147.483.647

long long 8 –9,223,372,036,854,775,808

… 9,223,372,036,854,775,807

Một số môi trường lập trình ñồng nhất kiểu long long với kiểu long

cho nên kiểu này ít ñược sử dụng trong lập trình ứng dụng.

Kiểu số nguyên không dấu

• Miền giá trị (số n-bit): 0 2 n – 1

10

Kiểu

(Type)

ðộ lớn (Byte)

Miền giá trị (Range)

Một số môi trường lập trình ñồng nhất kiểu unsigned long long với kiểu

unsigned long cho nên kiểu này ít ñược sử dụng trong lập trình ứng dụng.

Trang 6

• Hằng số nguyên có thể biểu diễn ở 4 dạng

• Bát phân: viết bắt đầu bằng số0

• Nhị phân: viết bắt đầu bằng số0B

• Thập phân: viết bắt đầu bằng số từ1đến9

• Thập lục phân: viết đầu bằng0x

VD: PORTA = 0X4A = 0B01001010

• Các phép toán số học

• Phép cộng: +, phép trừ: –, phép nhân: *

• Phép chia lấy phần nguyên: /

• Phép chia lấy phần dư: %

11

Toán tử trên bit

Trang 7

VD: phép toán trên bit cho số nguyên không dấu

Trang 8

Phép toán luận lý

Có 3 kiểu phép toán luận lý trong ngôn ngữ C, ñó là AND, OR và

NOT Phép toán logic trả về kết quả true (1) nếu kết quả của biểu thức

khác 0, trả về kết quả false (0) nếu kết quả của biểu thức bằng 0

Phép gán

• Việc tính toán trong chương trình được thực hiện bằng cách

tính toán và chép kết quả tính toán vào một biến nằm bên

trái của phép gán

• Ví dụ:

Trang 9

Định dạng dạng dạng dữ dữ dữ liệu liệu liệu nhập nhập nhập xuất xuất

•Đối với NNLT C

•Nhập xuất số nguyên (kiểu char , int )

• Có dấu dạng thập phân: %d hay %i

• short(16-bit): %hd, %hi, %ho, %hu, %hx, %hX

• long: %ld, %li, %lo, %lu, %lx, %lX

• Về việc quy ñịnh ñộng rộng và ñộ chính xác (nếu là

số thực) cho dữ liệu xuất ñược ghi ngay sau dấu %

với dạng wid.pre, ví dụ %9.2f nghĩa là ñộ rộng ít nhất

9 ký tự (thêm khoảng trống vào nếu thiếu) và nhiều

nhất là 2 ký tự cho phần lẻ sau dấu chấm thập phân

18

Trang 10

Biến toàn cục & biến cục bộ

• Biến toàn cục (Global variables): vị trí biến đặt bên ngoài tất

cả các hàm, cấu trúc Các biến này có ảnh hưởng đến toàn

bộ chương trình Chu trình sống của nó là bắt đầu chạy

chương trình đến lúc kết thúc chương trình

• Biến cục bộ (Local variables): Vị trí biến đặt bên trong hàm,

cấu trúc… Chỉ ảnh hưởng nội bộ bên trong hàm, cấu trúc

đó… Chu trình sống của nó bắt đầu từ lúc hàm, cấu trúc

được gọi thực hiện đến lúc thực hiện xong

19

Cấu trúc điều khiển có 2 loại:

Cấu trúc điều khiển rẽ nhánh:

Trang 11

(biểu_thức_ñiều_kiện) {

Lệnh 1;

Lệnh 2;

… Lệnh n;

Trang 12

Lệnh 1;

Lệnh 2;

…Lệnh n;

}

Cấu trúc điều khiển vòng lặp:

Câu

Câu lệnh lệnh lệnh return return

• Trả về dòng điều khiển mà nơi nó gọi, khi lệnh return được

theo sau bởi một biểu thức thì biểu thức đó sẽ được đánh

giá và giá trị này sẽ được trả về cho nơi đã gọi hàm Khi

return được gọi mà không có biểu thức đi kèm thì giá trị trả

về là không xác định

• Câu lệnh return không chỉ thoát khỏi vòng lặp mà nó còn

thoát luôn khỏi hàm mà đang chứa nó

Trang 13

Định nghĩa hàm

return-typefunction_name(param-typeparam_name,

…, param-typeparam_name){

• Tiếp theo là thân hàm (đặt trong {}) chứa các câu lệnh hàm sẽ

thực hiện (phải có ít nhất một lệnhreturnnếu kiểu trả về

3 Lưu đồ giải thuật

Trang 14

VD: Giải và biện luận phương trình bậc nhất: ax + b = 0

SV chuẩn bị các phần mềm và tài liệu sau

- phần mềm viết code: MPLAB

- phần mềm mô phỏng : PROTEUS

- Sách Thực hành vi xử lý

Trang 15

Phần mềm viết code MPLAB

Phần mềm mô phỏng proteus

Trang 16

Bộ nạp chip PICKIT 2 KIT RP hoặc mô hình thí nghiệm vi xử lý

VD1: lập trình điều khiển led đơn D4 và D5 chớp tắt với

Ton = Toff = 500ms

RE2

RE1 RE1

MCLR

OSC2

MCLR

OSC2 OSC1

3

RA1/AN1/C12IN1-RA2/AN2/VREF-/CVREF/C2IN+

4 RA4/T0CKI/C1OUT 6

RA5/AN4/SS/C2OUT 7

RB0/AN12/INT 33

34

RB1/AN10/C12IN3-RB2/AN8 35

RA7/OSC1/CLKIN

13 RA6/OSC2/CLKOUT14

RD5/P1B 28RD6/P1C 29RD7/P1D 30

RC4/SDI/SDA 23RC5/SDO 24RC3/SCK/SCL 18RC2/P1A/CCP1 17RC1/T1OSI/CCP2 16RC0/T1OSO/T1CKI 15

RB7/ICSPDAT

40 RB6/ICSPCLK

39 RB5/AN13/T1G

38 RB4/AN1137

RD3 22RD2 21RD1 20RD0 19RC7/RX/DT 26RC6/TX/CK 25

10 RE1/AN6 9RE0/AN5 8

RA3/AN3/VREF+/C1IN+

5

RD4 27RB3/AN9/PGM/C12IN2-

36

RA0/AN0/ULPW 2

U/C12IN0-U2 BAI TAP UNG DUNG DIEU KHIEN XUAT/NHAP CO BAN

Trang 17

Cấu hình tất cả Analog Input → Digital I/O

Start

Cấu hình Port E Output Loop ðiều khiển LED D4, D5 = OFF

CONFIG (FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF &

BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);

Trang 18

Bài tập 1: lập trình điều khiển 8 led đơn D1 và D7 nối với PORTD

chớp tắt với Ton = Toff = 300ms

Ví dụ 2: Dựa vào sơ đồ, viết chương trình điều khiển LED sáng dần

D1 → D8 Led nối với port C

Trang 19

• Giải thuật:

37

Begin

Cấu hình tất cả Analog Input → Digital I/O Start

Cấu hình Port C Output Loop Xóa giá trị ñộ lệch (vị trí) của

dữ liệu trong bảng Table Loop_1

Lấy giá trị ñộ lệch của

dữ liệu ðọc dữ liệu nhận ñược từ bảng Table (tùy thuộc vào giá trị ñộ lệch) Xuất dữ liệu nhận ñược ra Port C

Delay 500ms

Tăng giá trị ñộ lệch

Kiểm tra

ñã lấy ñủ 9 byte từ bảng Table ?

S

ð

Bảng dữ liệu Table

b'00000000 b'00000001 b'00000011 b'00000111 b'00001111 b'00011111 b'00111111 b'01111111 b'11111111

• #include <htc.h>

• #include <math.h>

• CONFIG (FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF &

CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);

• #define _XTAL_FREQ 4000000

38

temp = 0x01;

for(j=1;j<=8;j++) {

PORTC = temp;

delay_ms(500);

temp = temp | (temp << 1);

} } }

void main (void)

Trang 20

• Ví dụ 4: Dựa vào sơ đồ, viết chương trình hiển thị số 3 chớp

tắt trên 1 led7SEG (LED4)

39

Hướng dẫn:

- Tìm mà led 7 đoạn cho số 3

- Chọn Ton = ? Toff =?

- Xác định led hien thị nối với port nào?

- Cấu hình port: digital, output

- Xuất dữ liệu ra port

Trang 21

- led 7 đoạn dùng loại anode chung  0 sang, 1 tắt

- mã led 7 đoạn cho số 3 là 10110000 = 0XB0

- Chọn Ton = Toff = 500ms

- led hien thị nối với PORTD

- Cấu hình PORTD: digital, output

- Xuất dữ liệu ra portD

Lưu đồ giải thuật

Trang 22

#include <htc.h>

#include <math.h>

CONFIG (FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF &

BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);

VD 5: viết chương trình điều khiển nút nhấn

Nhấn nút 1 (RB0) : led7seg hiển thị số 12 trong 1s

Nhấn nút 2 (RB1) : led7seg hiển thị số 24 trong 1s

Trang 23

#include <htc.h>

#include <math.h>

CONFIG (FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF &

BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);

for (i=0;i<10;i++) {

delay_ms(100);

} } void so_12 (void) {

PORTC = 0XA4;

delay_1s();

}

Trang 24

void main (void)

{

khai_bao_port();

while (1) {

if(!sw0) { delay_ms(10);

}

Ví dụ 5: viết chương trình hiển thị hình “trái tim” trên led

matrix

Trang 25

#include <htc.h>

#include <math.h>

CONFIG (FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF &

BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);

for(i=0;i<=7;i++) {

}

Ngày đăng: 19/08/2018, 13:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm