Tải bản đầy đủ (.pptx) (33 trang)

Bài giảng về Vi điều khiển PIC 16F877A

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (236.05 KB, 33 trang )

CHƯƠNG 1
TỔNG QUAN VỀ PIC
1.1 Tổng quan về PIC
1.2 Vi điều khiển PIC 16f877A
1.3 Ngôn ngữ lập trình ASM

PIC 16F877A

1


1.1 Tổng quan về PIC

PIC là họ vi điều khiển được sản xuất bởi công ty Microchip Technology
Một số đặc tính của PIC:
- Có các cổng xuất nhập (I/O pin)
- Có timer 8/16 bit
- Có các bộ chuyển đổi ADC 10/12 bit
- Có khối tạo xung PWM
- Tất cả các lệnh được thực thi trong 1 chu kỳ máy, trừ lệnh gọi chương trình con là 2 chu kỳ
- Tần số thạch anh tối đa 20MHz. Công thức tính chu kỳ máy:

PIC 16F877A

2


1.2 Vi điều khiển PIC 16F877A

a. Tổng quan:


PIC 16F877A

3


1.2 Vi điều khiển PIC 16F877A

PIC 16F877A có 40 chân với cấu trúc như sau:
- Có 5 port xuất nhập: A, B, C, D, E
- Có 3 Timer
- Có 15 nguồn ngắt
- Có 2 kênh tạo xung PWM
- Có 8 kênh chuyển đổi A/D

PIC 16F877A

4


1.2 Vi điều khiển PIC 16F877A

Chức năng của các chân như sau:
- Các chân nguồn:
+ Chân 11 và 32 (chân Vdd): cấp nguồn +5V
+ Chân 12 và 31 (chân Vss): cấp nguồn 0V

PIC 16F877A

5



1.2 Vi điều khiển PIC 16F877A

- Mạch dao động: 2 chân 13 và 14 có nhiệm vụ tạo dao động cho 16F877A

PIC 16F877A

6


1.2 Vi điều khiển PIC 16F877A

- Chân reset: chân 1, được tác động mức thấp (ngược với 8051)

PIC 16F877A

7


1.2 Vi điều khiển PIC 16F877A

- Cổng xuất nhập:
+ Port A và thanh ghi TRISA:
* Cổng A có 6 bit thực hiện chức năng xuất nhập 2 chiều, việc xác định hướng vào ra được thực hiện
thông qua thanh ghi TRISA
* Việc đặt 1 bit trong TRISA lên 1 đồng nghĩa với việc đặt chân tương ứng của cổng A là chân nhập
dữ liệu
* Việc đặt 1 bit trong TRISA về 0 đồng nghĩa với việc đặt chân tương ứng của cổng A là chân xuất dữ
liệu


PIC 16F877A

8


1.2 Vi điều khiển PIC 16F877A

+ Port B và thanh ghi TRISB:
Cổng B có 8 bit thực hiện chức năng xuất nhập 2 chiều, việc xác định hướng vào ra được thực hiện
thông qua thanh ghi TRISB
+ Port C và thanh ghi TRISC:
Cổng C có 8 bit thực hiện chức năng xuất nhập 2 chiều, việc xác định hướng vào ra được thực hiện
thông qua thanh ghi TRISC

PIC 16F877A

9


1.2 Vi điều khiển PIC 16F877A

+ Port D và thanh ghi TRISD:
Cổng D có 8 bit thực hiện chức năng xuất nhập 2 chiều, việc xác định hướng vào ra được thực hiện
thông qua thanh ghi TRISD
+ Port E và thanh ghi TRISE:
Cổng E có 3 bit thực hiện chức năng xuất nhập 2 chiều, việc xác định hướng vào ra được thực hiện
thông qua thanh ghi TRISE

PIC 16F877A


10


1.2 Vi điều khiển PIC 16F877A

PIC 16F877A

11


1.2 Vi điều khiển PIC 16F877A

b. Tổ chức bộ nhớ
- Bộ nhớ chương trình:
Khi PIC bị reset thì chương trình sẽ được thực hiện từ vùng nhớ 0000H

PIC 16F877A

12


1.2 Vi điều khiển PIC 16F877A

- Bộ nhớ dữ liệu:
Bộ nhớ dữ liệu được chia thành nhiều Bank. Hai bit RP0 và RP1 được dùng để chọn Bank

RP0 – RP1

Bank


00

0

01

1

10

2

11

3

Mỗi Bank có 128 byte: các ô địa chỉ thấp là các thanh ghi chức năng đặc biệt, còn lại là các thanh ghi
đa dụng – được xem là bộ nhớ RAM

PIC 16F877A

13


1.2 Vi điều khiển PIC 16F877A

PIC 16F877A

14



1.2 Vi điều khiển PIC 16F877A

Thanh ghi W: là thanh ghi công tác (rất quan trọng của PIC), lưu trữ dữ liệu và các kết quả tính toán

PIC 16F877A

15


1.3 Ngôn ngữ lập trình ASM

a. Các quy ước:
Một dòng lệnh ASM gồm các thành phần như sau:
[nhãn]

LỆNH tham_số_1,tham_số_2

- Nhãn: để đánh dấu một vị trí nào đó trong chương trình, sẽ được gọi lại bằng lệnh GOTO hoặc
CALL. Câu lệnh có thể có hoặc không có nhãn.
- Lệnh: ta sẽ học tập lệnh ở phần sau. Tùy theo lệnh mà có 1 hoặc 2 tham số, hoặc không có tham số

PIC 16F877A

16


1.3 Ngôn ngữ lập trình ASM

- Quy ước các ký hiệu trong tập lệnh

Ký hiệu

Chức năng

f

Địa chỉ của thanh ghi từ 0x00 đến 0x7F

w

Thanh ghi W

b

Là vị trí của bit trong thanh ghi

k

Hằng số hoặc nhãn

x

Không quan tâm là 0 hay 1

d

Lựa chọn nơi nhận dữ liệu
- d = 0: lưu kết quả vào thanh ghi W
- d = 1: lưu kết quả vào thanh ghi f
Mặc định d = 1


PIC 16F877A

17


1.3 Ngôn ngữ lập trình ASM

b. Tập lệnh:
- Lệnh :

ADDLW k

+ Thực thi: cộng giá trị trong thanh ghi W với k, kết

quả lưu vào W

+ 0 ≤ k ≤ 255
- Lệnh:

ADDWF f,d

+ Thực thi: cộng giá trị trong thanh ghi W với giá trị
lưu vào W,

trong thanh ghi f. Nếu d = 0 thì kết quả

nếu d = 1 thì kết quả lưu vào f

+ 0 ≤ f ≤ 127, d = [0,1]


PIC 16F877A

18


1.3 Ngôn ngữ lập trình ASM

- Lệnh:

ANDLW k

+ Thực thi: giá trị trong thanh ghi W được AND với hằng số k 8 bit, kết quả lưu vào W
+ 0 ≤ k ≤ 255
- Lệnh:

ANDWF f,d

+ Thực thi: AND giá trị trong thanh ghi W với giá trị trong thanh ghi f. Nếu d = 0 thì kết quả
lưu vào W,

nếu d = 1 thì kết quả lưu vào f

+ 0 ≤ f ≤ 127, d = [0,1]

PIC 16F877A

19



1.3 Ngôn ngữ lập trình ASM

- Lệnh:

BCF f,b

+ Thực thi: bit b trong thanh ghi f bị xóa về 0
+ 0 ≤ f ≤ 127, 0 ≤ b ≤ 7
- Lệnh:

BSF f,b

+ Thực thi: bit b trong thanh ghi f được đưa lên 1
+ 0 ≤ f ≤ 127, 0 ≤ b ≤ 7

PIC 16F877A

20


1.3 Ngôn ngữ lập trình ASM

- Lệnh:

BTFSS

f,b

+ Thực thi: nếu bit b trong thanh ghi f bằng 1 thì lệnh kế bị bỏ qua và thay bằng lệnh NOP
+ 0 ≤ f ≤ 127, 0 ≤ b ≤ 7

- Lệnh:

BTFSC

f,b

+ Thực thi: nếu bit b trong thanh ghi f bằng 0 thì lệnh kế bị bỏ qua và thay bằng lệnh NOP
+ 0 ≤ f ≤ 127, 0 ≤ b ≤ 7

PIC 16F877A

21


1.3 Ngôn ngữ lập trình ASM

- Lệnh:

CLRF f

+ Thực thi: xóa thanh ghi f và bit Z được set lên 1
+ 0 ≤ f ≤ 127
- Lệnh:

CLRW

+ Thực thi: xóa thanh ghi W và bit Z được set lên 1
- Lệnh:

COMF f,d


+ Thực thi: bù nội dung của thanh ghi f. Nếu d = 0

thì kết quả lưu vào W, d = 1 thì kết quả

lưu vào f
+ 0 ≤ f ≤ 127, d = [0,1]

PIC 16F877A

22


1.3 Ngôn ngữ lập trình ASM

- Lệnh:

DECF f,d

+ Thực thi: giảm giá trị thanh ghi f đi 1. Nếu d = 0

thì kết quả lưu vào W, d = 1 thì kết quả

lưu vào f
+ 0 ≤ f ≤ 127, d = [0,1]
- Lệnh:

DECFSZ f,d

+ Thực thi: giảm giá trị thanh ghi f đi 1. Nếu kết quả

lệnh NOP.

bằng 0 thì bỏ qua lệnh kế và thay bằng

Nếu d = 0 thì kết quả lưu vào W, d = 1 thì kết quả

lưu vào f

+ 0 ≤ f ≤ 127, d = [0,1]

PIC 16F877A

23


1.3 Ngôn ngữ lập trình ASM

- Lệnh:

INCF f,d

+ Thực thi: tăng giá trị thanh ghi f lên 1. Nếu d = 0

thì kết quả lưu vào W, d = 1 thì kết quả

lưu vào f
+ 0 ≤ f ≤ 127, d = [0,1]
- Lệnh:

INCFSZ f,d


+ Thực thi: tăng giá trị thanh ghi f lên 1. Nếu kết quả bằng 0 thì bỏ qua lệnh kế và thay bằng
lệnh NOP.

Nếu d = 0 thì kết quả lưu vào W, d = 1 thì kết quả

lưu vào f

+ 0 ≤ f ≤ 127, d = [0,1]

PIC 16F877A

24


1.3 Ngôn ngữ lập trình ASM

- Lệnh:

IORLW

k

+ Thực thi: OR hằng số k 8 bit với W. Kết quả được

lưu vào W

+ 0 ≤ k ≤ 255
- Lệnh:


IORWF

f,d

+ Thực thi: OR thanh ghi W với thanh ghi f. Nếu d = 0 thì kết quả lưu vào W, d = 1 thì kết quả
lưu vào f
+ 0 ≤ f ≤ 127, d = [0,1]

PIC 16F877A

25


×