Tải bản đầy đủ (.docx) (84 trang)

hiển thị tốc độ động cơ lên led 7 đoạn

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 (2.07 MB, 84 trang )

HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

CHƯƠNG 1: CHƯƠNG DẪN NHẬP
I) ĐẶT VẤN ĐỀ :
Trong công nghiệp và trong đời sống có rất nhiều yếu tố ảnh hưởng đến
quá trình sản xuất và ảnh hưởng đến con người, mà con người muốn sản xuất
nhanh chóng thì cần có động cơ hỗ trợ. Trong động cơ tốc độ là yếu tố thường
được đề cập đến nhiều nhất của động cơ. Vì vậy sự ra đời của các mạch đo tốc
độ động cơ là rất cần thiết. Với sự phát triển của khoa học kỹ thuật, vi điều
khiển ra đời đã giúp cho chúng ta có thể dễ dàng thiết kế mạch đo tốc độ động cơ
với độ chính xác cao, đáng tin cậy… mà chi phí có thể chấp nhận được.
II) GIỚI HẠN ĐỀ TÀI :
Với quy mô là đồ án tốt môn học, nên nhóm chúng em đã cố gắng hết sức
làm những gì mà giảng viên yêu cầu, nhưng do kiến thức còn hạn chế nên chúng
em chỉ thực hiện được những yêu cầu sau :
1.

Hiển thị được tốc độ động cơ lên led 7 đoạn

2.

Tốc độ còn hạn chế và có sự sai số do thiếu kinh nghiệm

III) MỤC ĐÍCH NGHIÊN CỨU :
Mục đích trước hết khi thực hiện đề tài này là để hoàn tất chương trình
môn học để đủ điều kiện hoàn thành yêu cầu của môn học. Cụ thể khi nghiên
cứu đề tài là chúng em muốn phát huy những thành quả ứng dụng của vi điều
khiển vào một mạch thực tế. Nó còn là kinh nghiệm cho chúng em tiến đên đồ án
tốt nghiệp sắp tới. Ngoài ra quá trình thực hiện đề tài là một cơ hội để chúng em


SVTH: NHÓM 3

1


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

tự kiểm tra lại những kiến thức đã học ở trường. Đồng thời phát huy tính sáng
tạo, khả năng giải quyết những vấn đề do nhu cầu đặt ra.
IV) ĐỐI TƯỢNG NGHIÊN CỨU:
1. Các phương án điều khiển và xử lý dữ liệu
2. Tìm hiểu về vi xử lý PIC16F877A
3. Tìm hiểu về led 7 đoạn và động cơ xoay thuận nghịch
4. Tìm hiểu về Encoder
5. Ứng dụng viết chương trình xử lí

SVTH: NHÓM 3

2


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

CHƯƠNG 2 : GIỚI THIỆU VỀ CÁC LINH KIỆN
2.1) Giới thiệu về PIC:
2.1.1) Sơ lược về vi điều khiển PIC 16F877A:
Sơ đồ chân :




Hình 2.1 Sơ đồ chân PIC 16F877A
SVTH: NHÓM 3

3


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA



Sơ đồ nguyên lý:

Hình 2.2 Sơ đồ nguyên lý PIC 16F877A

SVTH: NHÓM 3

4


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA



Nhận xét:
Từ sơ đồ chân và sơ đồ nguyên lý ở trên, ta rút ra các nhận xét ban đầu như
sau :



PIC16F877A có tất cả 40 chân



40 chân trên được chia thành 5 PORT, 2 chân cấp nguồn, 2 chân GND, 2
chân thạch anh và một chân dùng để RESET vi điều khiển.



5 port của PIC16F877A bao gồm :


PORTB : 8 chân



PORTC : 8 chân



PORTD : 8 chân



PORTA : 6 chân




PORT E : 3 chân.

Mỗi chân của vi điều khiển PIC 16F877A có một chức năng khác nhau. Trong
đó có một số chân đa công dụng: mỗi chân có thể hoạt động như một đường xuất
nhập hoặc là một chân chức năng đặc biệt dùng để giao tiếp với các thiết bị
ngoại vi.
2.1.2) Cấu trúc phần cứng của PIC 16F877A:
PIC là tên viết tắt của “ Programmable Intelligent computer” do hãng
General Instrument đặt tên cho con vi điều khiển đầu tiên của họ. Hãng
Microchip tiếp tục phát triển sản phầm này và cho đến hiện nay đã tạo ra gần
100 loại sản phẩm khác nhau.

SVTH: NHÓM 3

5


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

PIC16F887A là dòng PIC khá phổ biến, khá đầy đủ tính năng phục vụ cho
hầu hết tất cả các ứng dụng thực tế. Đây là dòng PIC khá dễ cho người mới làm
quen với PIC có thể học tập và tạo nền tản về họ vi điều khiển PIC của mình.


Cấu trúc tổng quát của PIC16F877A như sau :



8K Flash Rom




368x8 bytes Ram



256 bytes EFPROM



5 port vào ra với tín hiệu điều khiển độc lập



2 bộ định thời Timer0 và Timer2 8 bit



1 bộ định thời Timer1 16 bit có thể hoạt động ở cả chế độ tiết kiệm
năng lượng với nguồn xung clock ngoài



2 bộ Capture/ Compare/ PWM



1 bộ biến đổi Analog -> Digital 10 bit, 8 ngõ vào




2 bộ so sánh tương tự



1 bộ định thời giám sát (Watch Dog Timer)



1 cổng song song 8 bit với các tín hiệu điều khiển



1 cổng nối tiếp



15 nguồn ngắt

SVTH: NHÓM 3

6


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA




Sơ đồ khối

Hình 2.3 Sơ đồ khối bên trong của vi điều khiển 16F877A

SVTH: NHÓM 3

7


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

2.1.3) Một số chế độ đặt biệt của vi điều khiển PIC 16F877A:
2.1.3.1) Dao động:
PIC16F877A có thể hoạt động trong bốn chế độ dao động khác nhau:


LP low-power crystal



XT crystal/resonatpor



HS high-speed crystal/resonatpor



RC resistor/capacitor


Hình 2.4 Các chế độ dao động
Trong các chế độ LP, XT và HS chúng ta sử dụng thạch anh dao động nối
vào các chân OSC1 và OSC2 để tạo dao động.
Việc lựa chọn tụ trong dao động thạch anh được lựa chọn dựa vào bảng
sau:
SVTH: NHÓM 3

8


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

Hình 2.5 Giá trị tụ trong dao động thạch anh
Tụ có giá trị lớn sẽ mang tính ổn định của dao động nhưng làm tăng thời
gian khởi động.
Cách tính chu kỳ máy: Ví dụ ta sử dụng thạch anh 10Mhz. Khi đó: Tần số
dao động của thạch anh là Fosc = 10Mhz thì chu kỳ dao động của thạch anh là
Tosc = 1/Fosc= 1/10*106(s).
Chu kỳ máy:
T_instruction = 4*Tosc = 4/10*106(s) = 0.4 µs = 400 ns
2.1.3.2) Reset:
PIC16F877A có thể bị reset bởi nhiều nguyên nhân khác nhau:


Power-on Reset (POR)




MCLR Reset during sleep



MCLR Reset during normal operation



WDT Reset (during normal operation)

SVTH: NHÓM 3

9


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA



WDT Wake-up (during sleep)



Brown-out Reset (BOR)

Hình 2.6 Các chế độ reset

2.1.3.3) Interrupts:
PIC16F877A có nhiều nguồn ngắt khác nhau. Đây là một số ngắt tiêu

biểu:
-

Ngắt ngoài xảy ra trên chân INT.

-

Ngắt do Timer0.

-

Ngắt do Timer1.

-

Ngắt do Timer2.

-

Ngắt do thay đổi trạng thái trên các chân PortB.

SVTH: NHÓM 3

10


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

-


Ngắt so sánh điện thế.

-

Ngắt do Port song song.

-

Ngắt USART.

-

Ngắt nhận dữ liệu.

-

Ngắt truyền dữ liệu .

-

Ngắt chuyển đổi ADC.

-

Ngắt màn hình LCD.

-

Ngắt hoàn tất ghi EEPROM.


-

Ngắt module CCP.

-

Ngắt Module SSP.

*

Các thanh ghi chức năng ngắt: INTCON, PIE1, PIR1, PIE2, PIR2 (các
thanh ghi này sẽ được nghiên cứu ở các phần sau).

SVTH: NHÓM 3

11


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

Hình 2.7 Các chế độ ngắt
2.1.3.4) Bộ định thời giám sát (Watch Dog Timer – WDT):

Hình 2.8 Bộ định thời giám sát WDT
SVTH: NHÓM 3

12



HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

2.1.3.5) Tổ chức bộ nhớ:
Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương
trình (Program memory) và bộ nhớ dữ liệu (Data Memory).
2.1.3.5.1) Bộ nhớ chương trình:

Hình 2.9 Bộ nhớ chương trình PIC 16F877A
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ Flash, dung
lượng 8K word (1 word chứa 14bit) và được phân thành nhiều trang như hình
trên.
Để mã hóa được địa chỉ 8K word bộ nhớ chương trình, thanh ghi đếm
chương trình PC có dung lượng 13 bit.

SVTH: NHÓM 3

13


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

Khi vi điều khiển reset, bộ đếm chương trình sẽ trỏ về địa chỉ 0000h. Khi
có ngắt xảy ra thì thanh ghi PC sẽ trỏ đến địa chỉ 0004h.
Bộ nhớ chương trình không bao gồm bộ nhớ Stack và không được địa chỉ
hóa bởi bộ đếm chương trình.
2.1.3.5.2) Bộ nhớ dữ liệu:
Bộ nhớ dữ liệu của PIC l bộ nhớ EEPROM được chia ra làm nhiều bank.

Bộ nhớ dữ liệu của PIC16F877A được chia thành 4 bank. Mỗi bank có
dụng lượng 128 byte. Nếu như 2 bank bộ nhớ dữ liệu của 8051 phân chia riêng
biệt :
128 byte đầu tiên thuộc bank1 là vùng Ram nội chỉ để chứa dữ liệu, 128
byte còn lại thuộc bank 2 là cùng các thanh ghi có chức năng đặc biệt SFR mà
người dùng không được chứa dữ liệu khác trong đây thì 4 bank bộ nhớ dữ liệu
của PIC16F877A được tổ chức theo cách khác.
Mỗi bank của bộ nhớ dữ liệu PIC16F877A bao gồm cả các thanh ghi có
chức năng đặc biệt SFR nằm ở các các ô nhớ địa chỉ thấp và các thanh ghi mục
đích dùng chung GPR nằm ở vùng địa chỉ còn lại của mỗi bank thanh ghi. Vùng
ô nhớ các thanh ghi mục đích dùng chung này chính là nơi người dùng sẽ lưu dữ
liệu trong quá trình viết chương trình. Tất cả các biến dữ liệu nên được khai báo
chứa trong vùng địa chỉ này.
Trong cấu trúc bộ nhớ dữ liệu của PIC16F877A, các thanh ghi SFR nào
mà thường xuyên được sử dụng (như thanh ghi STATUS) sẽ được đặt ở tất cả
các bank để thuận tiện trong việc truy xuất. Sở dĩ như vậy là vì, để truy xuất một
SVTH: NHÓM 3

14


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

thanh ghi nào đó trong bộ nhớ của 16F877A ta cần phải khai báo đúng bank
chứa thanh ghi đó, việc đặt các thanh ghi sử dụng thường xuyên giúp ta thuận
tiên hơn rất nhiều trong quá trình truy xuất, làm giảm lệnh chương trình.

Hình 2.10 Bộ nhớ dữ liệu PIC 16F877A
SVTH: NHÓM 3


15


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

Dựa trên sơ đồ 4 bank bộ nhớ dữ liệu PIC16F877A ta rút ra các nhận xét
như sau :
- Bank 0 gồm các ô nhớ có địa chỉ từ 00h đến 77h, trong đó các thanh ghi
dùng chung để chứa dữ liệu của người dùng địa chỉ từ 20h đến 7Fh. Các thanh
ghi PORTA, PORTB, PORTC, PORTD, PORTE đều chứa ở bank 0, do đó để
truy xuất dữ liệu các thanh ghi này ta phải chuyển đến bank 0. Ngoài ra một vài
các thanh ghi thông dụng khác ( sẽ giới thiệu sau) cũng chứa ở bank 0.
- Bank 1 gồm các ô nhớ có địa chỉ từ 80h đến FFh. Các thanh ghi dùng
chung có địa chỉ từ A0h đến Efh. Các thanh ghi TRISA, TRISB, TRISC, TRISD,
TRISE cũng được chứa ở bank 1.
- Tương tự ta có thể suy ra các nhận xét cho bank 2 và bank 3 dựa trên sơ
đồ trên. Cũng quan sát trên sơ đồ, ta nhận thấy thanh ghi STATUS, FSR… có
mặt trên cả 4 bank. Một điều quan trọng cần nhắc lại trong việc truy xuất dữ liệu
của PIC16F877A là: phải khai báo đúng bank chứa thanh ghi đó. Nếu thanh ghi
nào mà 4 bank đều chứa thì không cần phải chuyển bank.


Vùng Ram đa mục đích
Vùng RAM đa mục đích có chiều rộng 8 bit và có thể được truy nhập trực

tiếp hoặc gián tiếp thông qua thanh ghi FSR. Vùng RAM đa mục đích được phân
phối ở các Bank như sau:
-


Bank 0: 96 Bytes từ địa chỉ 20h đến địa chỉ 7Fh.

-

Bank 1: 80 Bytes từ địa chỉ A0h đến địa chỉ EFh.

-

Bank 2: 96 Bytes từ địa chỉ 110h đến địa chỉ 16Fh.

SVTH: NHÓM 3

16


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

-

Bank 3: 96 Bytes từ địa chỉ 190h đến địa chỉ 1EFh.


Vùng thanh ghi chức năng đặc biệt
Các thanh ghi chức năng đặc biệt được sử dụng bởi bộ xử lý trung tâm

CPU hoặc các module ngoại vi để điều khiển hoạt động của VĐK. Các thanh ghi
chức năng đặc biệt này được chia làm 2 loại: loại thứ nhất dùng cho các chức
năng của CPU, loại thứ 2 dùng cho các chức năng ngoại vi.

2.1.3.6) Thanh ghi trạng thái (Status Register):
Thanh ghi này có mặt ở cả 4 bank thanh ghi ở các địa chỉ 03h, 83h, 103h
và 183h : chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các
bit chọn bank cần truy xuất trong bộ nhớ dữ liệu.

Hình 2.11 Status Register
Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho định địa chỉ gián tiếp).
1 = Bank 2, 3 (100h – 1FFh )
0 = Bank 0, 1 (00h – FFh)
Bit 6 – 5 RP1 – RP0: Bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ trực
tiếp).
11 = Bank 3 ( 180h – 1FFh)
SVTH: NHÓM 3

17


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

10 = Bank 2 (100h – 17Fh)
01 = Bank 1 (80h – FFh)
00 = Bank 0 (00h – 7Fh)
Each bank is 128 bytes
Bit 4 TO: Bit báo hiệu hoạt động của WDT.
1: Lệnh xóa WDT hoặc Sleep xảy ra.
0: WDT hoạt động.
Bit 3 PD: Bit báo công suất thấp ( Power down bit).
1: Sau khi nguồn tăng hoặc có lệnh xóa WDT.
0: Thực thi lệnh Sleep.

Bit 2 Z: Bit Zero
1: Khi kết quả của một phép toán bằng 0.
0: Khi kết quả của một phép toán khác 0.
Bit 1 DC: Digit Carry
1: Có một số nhớ được sinh ra bởi phép cộng hoặc phép trừ 4 bit
thấp.
0: Không có số nhớ sinh ra.
Bit 0 C: Cờ nhớ (Carry Flag)
SVTH: NHÓM 3

18


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ.
0: Không có số nhớ sinh ra.
2.1.3.7) Thanh ghi tùy chọn (Option Reg Register):
Thanh ghi tùy chọn chứa các bit điều khiển để cấu hình cho các chứa
năng như: ngắt ngoài, Timer 0 chức năng kéo lên Vdd của các chân Port B, và
thời gian chờ của WDT.

H
hình 2.12 Option-Reg Register
Bit 7 RBPU: Bit cho phép PORTB được kéo lên nguồn.
1: Không cho phép PORTB kéo lên nguồn.
0: Cho phép PORTB kéo lên nguồn.
Bit 6 INTEDG: Bít lựa chọn cạnh tác động ngắt (INTERRUPT EDGE)
1: Ngắt sẽ được tác động bởi cạnh lên của chân RB0/INT

0: Ngắt sẽ được tác động bởi cạnh xuống của chân RB0/INT
Bit 5 T0CS: Bit lựa chọn nguồn xung Clock cho Timer 0
1: Xung Clock cung cấp bởi nguồn ngoài qua chân RA4/T0CKI
0: Xung Clock cung cấp bởi nguồn dao động nội.

SVTH: NHÓM 3

19


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

Bit 4 T0SE: Bit lựa chọn cạnh nào của xung clock tác động lên timer0
1: Cạnh xuống
0: Cạnh lên
Bit 3 PSA: Bit quyết định tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0 hay
WDT
1: Tốc độ đếm PS2:PS0 sẽ tác động lên WDT
0: Tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0
Bit 2-0 PS2:PS0: Dùng để lựa chọn tốc độ đếm của timer hay WDT

2.1.3.8) Thanh ghi điều khiển ngắt INTCON (Interrupt Control Register):

Hình 2.13 Intcon Register
Bit 7 GIE: Bit cho phép ngắt toàn cục
SVTH: NHÓM 3

20



HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

1: Cho phép ngắt toàn cục
0: Không cho phép ngắt
Bit 6 PEIE: Bit cho phép ngắt khi ghi vào EEPROM hoàn tất.
1: Cho phép ngắt ghi vào EEPROM hoạt động
0: Không cho phép ngắt ghi vào EEPROM hoạt động
Bit 5 TMR0IE: Bit cho phép ngắt khi timer 0 tràn
1: Cho phép ngắt khi timer 0 tràn
0: Không cho phép ngắt khi timer 0 tràn
Bit 4 INTE: Bit cho phép ngắt ngoại vi trên chân RB0/INT
1: Cho phép ngắt ngoại vi
0: Không cho phép ngắt ngoại vi
Bit 3 RBIE: Cho phép ngắt khi trạng thái PORTB thay đổi
1: Cho phép
0: Không cho phép
Bit 2 TMR0IF: Cờ báo ngắt Timer 0
1: Timer 0 tràn
0: Timer 0 chưa tràn
Bit 1 INTF: Cờ báo ngắt ngoài RB0/INT
SVTH: NHÓM 3

21


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA


1: Có ngắt
0: Không xảy ra ngắt.
Bit 0 RBIF: Cờ báo ngắt khi có thay đổi trạng thái PORTB
1: Có thay đổi
0: Không có thay đổi xảy ra trên PORTB
Chế độ Capture (Bắt giữ):
1: Một Capture thanh ghi TMR1 xảy ra( phải được xóa bằng phần
mềm)
0: Không xảy ra Capture thanh ghi TMR1
Chế độ Compare ( So sánh):
1: Khi các giá trị so sánh trong thanh ghi TMR1 được thỏa ( phải
được xóa bằng phần mềm)
0: Khi các giá trị so sánh trong thanh ghi TMR1 không được thỏa
Chế độ PWM: Không sử dụng trong chế độ này
Bit 1 TMR2IF: Cờ báo ngắt xảy ra khi giá trị trong thanh ghi TMR2 bằng trong
thanh ghi PR2.
1: Giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải được xóa
bằng phần mềm).
0: Giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2.
SVTH: NHÓM 3

22


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

Bit 0 TMR1IF: Cờ báo tràn thanh ghi TMR1
1: Thanh ghi TMR1 tràn (phải được xóa bắng phần mềm)
0: Thanh ghi TMR1 chưa tràn

2.1.3.9 ) Thanh ghi Work và tập lệnh của PIC 16F877A:
Đây là thanh ghi rất đặc biệt trong PIC16F877A. Nó có vai trò tương tự
như thanh ghi Accummulator của 8051, tuy nhiên tầm ảnh hưởng của nó rộng
hơn rất nhiều.
Tập lệnh của PIC16F877A có tất cả 35 lệnh thì số lệnh có sự “góp mặt”
của thanh ghi W là 23 lệnh. Hầu hết các lệnh của PIC16F877A đều liên quan đến
thanh ghi W. Ví dụ như, trong PIC chúng ta không được phép chuyển trực tiếp
giá trị của một thanh ghi này qua thanh ghi khác mà phải chuyển thông qua
thanh ghi W.
Thanh ghi W có 8 bit và không xuất hiện trong bất kỳ bank thanh ghi nào
của bộ nhớ dữ liệu của 16F877A. Mỗi dòng lệnh trong PIC16F877a được mô tả
trong 14 bit. Khi ta thực hiện một lệnh nào đó, nó phải lưu địa chỉ của thanh ghi
bị tác động (chiếm 8 bit) và giá trị một hằng số k nào đó (thêm 8 bit nữa) là 16
bit, vượt quá giới hạn 14 bit. Do vậy ta không thể nào tiến hành một phép tính
toàn trực tiếp nào giữa 2 thanh ghi với nhau hoặc giữa một thanh ghi với một
hằng số k. Hầu hết các lệnh của PIC16F877A đều phải liên quan đến thanh ghi
W cũng vì lý do đó. Khi thực hiện một dòng lệnh nào đó, thì PIC sẽ không phải
tốn 8 bit để lưu địa chỉ của thanh ghi W trong mã lệnh ( vì được hiểu ngầm). Có

SVTH: NHÓM 3

23


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

thể xem thanh ghi W là thanh ghi trung gian trong quá trình viết chương trình
cho PIC16F877A.
PIC16F877A có tất cả 35 lệnh và được trình bày khá rõ trong datasheet.

Em sẽ đính kèm tập lệnh ở phần cuối cùng của bài báo cáo.
Trong chương trình, em sử dụng ngôn ngữ asembly để viết. Trình biên
dịch là Mplab được Microchip cung cấp miễn phí cho người dùng.
2.1.3.10) Khái quát về chức năng các Port trong vi điều khiển PIC 16F877A:
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để
tương tác với thế giới bên ngoài. Sự tương tác này rất đa dạng và thông qua
quá trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách rõ
ràng.
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy
theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và
số lượng chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển
được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức
năng là cổng xuất nhập thông thường, một số chân xuất nhập còn có thêm các
chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên đối
với thế giới bên ngoài. Chức năng của từng chân xuất nhập trong mỗi cổng
hoàn toàn có thể được xác lập và điều khiển được thông qua các thanh ghi SFR
liên quan đến chân xuất nhập đó.
Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA,
PORTB, PORTC, PORTD và PORTE
SVTH: NHÓM 3

24


HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ LÊN LED 7 ĐOẠN
GVHD: LÊ ĐÌNH KHA

2.1.3.10.1) Port A và thanh ghi TRIS A:
PORTA gồm có 6 chân. Các chân của PortA, ta lập trình để có thể thực hiện
được chức năng “hai chiều” : xuất dữ liệu từ vi điều khiển ra ngoại vi và nhập dữ

liệu từ ngoại vi vào vi điều khiển.

Hình 2.14: Sơ đồ khối chân RA3:RA0 và chân RA5 và của chân RA4/TOCKI của
cổng A

SVTH: NHÓM 3

25


×