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

Tài liệu Vi Xử Lý Pic pot

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 (1.86 MB, 33 trang )

Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 1

CHƢƠNG 1: GIỚI THIỆU TỒNG QUAN VỀ PIC 16F877A
I. TÔNG QUAN VỀ CÁC LOẠI BỘ NHỚ
1. Bộ nhớ RAM
Bộ nhớ RAM ( Random Access Memory - Bộ nhớ truy cập ngẫu nhiên ) : Bộ nhớ này lƣu các
chƣơng trình phục vụ trực tiếp cho quá trình xử lý của CPU, bộ nhớ RAM chỉ lƣu trữ dữ liệu tạm thời và
dữ liệu sẽ bị xoá khi mất điện.
Theo công nghệ chế tạo RAM đƣợc phân thành:
SRAM (Static RAM): RAM tĩnh
DRAM (Dynamic RAM): RAM động

2. Bộ nhớ ROM
Bộ nhớ ROM ( Read Olly Memory - Bộ nhớ chỉ đọc ) : đây là bộ nhớ cố định, dữ liệu không bị mất
khi mất điện, bộ nhớ này dùng để nạp các chƣơng trình BIOS ( Basic Input Output System - Chƣơng trình
vào ra cơ sở ) đây là chƣơng trình phục vụ cho quá trình khởi động máy tính và chƣơng trình quản lý cấu
hình của máy
3. Bộ nhớ Flash
Bộ nhớ flash là một loại bộ nhớ máy tính có thể xóa và ghi lại bằng điện. Đây là công nghệ đã đƣợc
sử dụng trong các thẻ nhớ, ổ USB flash để lƣu trữ và truyền dữ liệu giữa các máy tính và các thiết bị kĩ
thuật số khác. Không nhƣ EEPROM, nó đƣợc xóa và ghi lại theo khối gồm nhiều vị trí
4. Bảng so sánh giữa các loại bộ nhớ



II. GIỚI THIỆU VỀ HỌ VI XỬ LÝ PIC 16F877A
Đây là vi điều khiển thuộc họ PIC16Fxxx với các đặc điểm:
Tốc độ hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns.
Bộ nhớ chƣơng trình 8Kx14 bit, Bộ nhớ flash với khả năng ghi xóa đƣợc 100.000 lần.


Bộ nhớ dữ liệu 368x8 byte RAM
Bộ nhớ dữ liệu EEPROM với dung lƣợng 256x8 byte, với khả năng ghi xóa đƣợc 1.000.000 lần và
có thể lƣu trữ trên 40 năm.
Số PORT I/O là 5 với 33 pin I/O.
Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.
Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock
ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep.
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 2

Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.
Hai bộ Capture/so sánh/điều chế độ rộng xung.
Chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.
Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.
Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS ở bên
ngoài.
8 kênh chuyển đổi ADC 10 bit.
Khả năng tự nạp chƣơng trình với sự điều khiển của phần mềm.
Nạp đƣợc chƣơng trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2
chân.
Watchdog Timer với bộ dao động trong.
Chức năng bảo mật mã chƣơng trình.
Chế độ Sleep.
Có thể hoạt động với nhiều dạng Oscillator khác nhau.

III. CẤU TRÚC VỀ PHÂN CỨNG CỦA PIC 16F877A
1. SƠ ĐỒ CHÂN


















a. Các chân có chức năng xuất (output), nhập (input) dữ liệu
Vi xử lý 16f877a có 33 chân xuất nhập dữ liệu với các thiết bị ngoại vi (thiết bị bên ngoài). Chúng
đƣợc chia thành 5 port, các port này gồm PortA, PortB, PortC, PortD và PortE. Các chân này đƣợc kết
nối và khai báo chức năng khác nhau còn tùy thuộc vào ứng dụng thực tế.
Các chân này đƣợc ký hiệu là RXY, trong đó X là tên port và Y là thức tự chân trong Port. Ví dụ
RA0 là chân thức 0 trong Port A
b. Các chân có chức năng khác
Các chân này có chức năng cố định: chân V
DD
, V
ss
dùng để cấp nguồn cho vi xử lý, chân
OSC1/CLK1 và OSC2/CLK0 dùng để kết nối với thạch anh, chân dùng để kết nối với
mạch Reset




Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 3

2. CẤU TRÚC PHẦN CỨNG


CHƢƠNG 2: GIỚI THIỆU VỀ C COMPILER
I. Giới thiệu C COMPILER
PIC C compiler là ngôn ngữ lập trình cấp cao cho PIC đƣợc viết trên nền C. chƣơng trình viết trên
PIC C tuân thủ theo cấu trúc của ngôn ngữ lập trình C. Trình biên dịch của PIC C compiler sẽ chuyển
chƣơng trình theo chuẩn của C thành dạng chƣơng trình theo mã Hexa (file.hex) để nạp vào bộ nhớ
của PIC. Quá trình chuyển đổi đƣợc minh hoạ nhƣ hình sau.
















PIC C compiler gồm có 3 phần riêng biệt là PCB, PCM và PCH. PCB dùng cho họ MCU với bộ
lệnh 12 bit, PCM dùng cho họ MCU với bộ lệnh 14 bit và PCH dùng cho họ MCU với bộ lệnh 16 và
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 4

18 bit. Mỗi phần khác nhau trong PIC C compiler chỉ dùng đƣợc cho họ MCU tƣơng ứng mà không
cho phép dùng chung (Ví dụ không thể dùng PCM hoặc PCH cho MCU 12 bit đƣợc mà chỉ có thể
dùng PCB cho MCU 12 bit).

II. Cài đặt và sử dụng Pic C compiler
1. Cài đặt Pic C Compiler
Để cài đặt PIC C compiler, bạn phải có đĩa CD chứa software PCW. Phần mềm này có thể
download trên mạng ở địa chỉ . Khi có đĩa CD software, việc cài đặt PIC C compiler đƣợc thực hiện
theo các bƣớc sau:
chọn thư mục PCW -> chọn setupPCW -> clickOK. Khi đó xuất hiện cửa sổ welcome.
Trên cửa sổ Welcome, click chuột vào nút Next, sau khi click Next, cửa sổ Software License
Agreement sẽ xuất hiện, click nút nhấn Yes.
Trong của sổ Readme information, click nút nhấn Next.
Sau khi click Next trong cửa sổ Readme information, của sổ Choose Destination Location sẽ
xuất hiện. Thư mục mặc nhiên để cài đặt PIC C compiler là c:\Program files\PICC. Ta có thể
thay đổi thư mục cài đặt PCW bằng cách chọn nút Browse và chỉ đường dẫn tới thư mục hoặc
ổ đĩa cần cài đặt, nếu muốn để ở thư mục mặc nhiên, click nút nhấn Next để tiếp tục cài đặt.
Trong cửa sổ Select Program Folder, click nút nhấn Next.
Click nút nhấn Next tong cửa sổ Start Copying Files sau đó chờ cho quá trình setup thực hiện.
Trong cửa sổ Select Files .crg, nhập vào tên file pcb.crg, pcm.crg hoặc pch.crg nếu muốn
dung PIC C compiler cho MCU 12 bit, MCU 14 bit hay MCU 16, 18 bit sau đó click nút OK.
Click nút Finish để hoàn tất việc cài đặt.

2. Sử dụng Pic C Compiler

Sau khi cài đặt xong PIC C compiler, trên Desktop của window sẽ xuất hiện biểu tƣợng của PIC C
compiler. Double Click vào biểu tƣợng của PIC C compiler để chạy chƣơng trình khi đó cửa sổ
chƣơng trình của PIC C compiler sẽ xuất hiện nhƣ sau:


Trong cửa sổ chƣơng trình cửa PIC C compiler gồm có các thực đơn (Menu): File, Project, Edit,
Options, Compile, View, Tools và Help. Chi tiết về các thực đơn nhƣ sau:
a. File (tệp): File là thực đơn quản lý tệp gồm các thực đơn nhƣ hình

Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 5

+ New: Tạo file.c mới
+ Open: Mở một file.c đã có, đƣợc lƣu trữ trong đĩa.
+ Save: Lƣu file.c vào đĩa.
+ Save As: Lƣu trữ file.c vào đĩa cứng với tên khác.
+ Save All: Lƣu trữ tất cả các file đƣợc mở vào đĩa.
+ Close: Đóng file hiện hành.
+ Close All: Đóng tất cả các file.
+ Print: In file hiện hành.
b. Project (Dự án): Là thực đơn quản lý dự án (một chƣơng trình ứng dụng). Thực đơn Project
gồm các thực đơn nhƣ hình

+ New: Tạo một dự án mới. Dự án mới có thể đƣợc tạo một cách thủ công hoặc tạo tự động thong
qua PIC Wizard. Nếu chọn phƣơng thức thủ công thì chỉ có file.pjt đƣợc tạo để giữ thông tin cơ bản
của dự án và một file.c mặc định trƣớc hoặc một file.c rỗng đƣợc tạo để soạn thảo chƣơng trình. Nếu
tạo dự án thông qua PIC Wizard, thì ngƣời sử dụng có thể xác định tham số của dự án và khi hoàn tất
thì các file.c, file.h và file.pjt đƣợc tạo. Mã nguồn chuẩn và các hằng số đƣợc sinh ra dựa trên tham
số của dự án. Việc chọn lựa các tham số cho dự án mới đƣợc thực hiện trên mẫu đƣợc PIC C

compiler đề nghị, trong mẫu gồm các chọn lựa nhƣ đặc tính của đƣờng vào ra theo chuẩn RS232,
I2C, chọn lựa timer, chọn lựa ADC, sử dụng ngắt, các driver cần thiết và tên của tất cả các chân của
MCU. Sau khi hoàn tất việc chọn lựa các tham số cho dự án thì file.c và file.h sẽ tạo ra với #defines,
#include và một số lệnh ban đầu cần thiết cho dự án. Đây là cách nhanh nhất để tạo một dựa án mới.
+ Open: Mở một file.pjt đã có trong đĩa.
+ Open All: Mở một file.pjt và tất cả các file dùng trong dự án.
+ Find text in project: Tìm kiếm một từ hay một ký tự trong dự án.
+ Include Dirs…: Cho phép xác định các thƣ mục đƣợc dùng để tìm kiếm các file include cho dự án.
Thông tin này đƣợc lƣu vào file.pjt.
+ Close Project: Đóng tất cả các file trong dự án.
c. Edit: Thực đơn Edit gồn các thành phần nhƣ hình.
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 6


Các thành phần trong thực đơn Edit có chức năng tƣơng tự nhƣ trong các trình ứng dụng trên môi
trƣờng window quen thuộc nhƣ word, excel …

d. Option: Thực đơn Option gồm các thành phần nhƣ hình.

Trong thực đơn Option có 4 thành phần cần lƣu ý là: File Formats, Global Defines,
Debugger/Programer và Include Dirs. Các thành phần khác thì tƣơng tự nhƣ các trình ứng dụng
quen thuộc.
+ File Format: Cho phép chọn lựa kiểu định dạng của file xuất. Khi chọn Option->File Format,
cửa sổ File Format sẽ xuất hiện. Trong cửa sổ File Format có các chọn lựa để chọn kiểu định dạng cho
file xuất ra sau khi biên dịch.
Cửa sổ File Format có dạng nhƣ sau:
Tài liệu Vi Xử Lý Pic


Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 7


Debug File: File gỡ rối chƣơng trình chạt trên MPLAB. Chọn Standard.COD nếu muốn chạy gỡ
rối chƣơng trình, chọn None nếu không cần chạy gỡ rối.
Error File: Xuất ra file lỗi khi chƣơng trình có lỗi trong quá trình biên dịch. Chọn Standard cho
các MCU chuẩn hiện hành của Microchip, chọn Original cho các MCU thế hệ trƣớc của
Microchip.
List Format:Chọn Simple cho định dạng cơ bản với mã C và ASM. Chọn Standard để định dạng
chuẩn MPASM với mã máy. Chọn Old cho định dạng MPASM thế hệ trƣớc. Chọn Symbolic để
định dạng gồm mã C trong ASSEMBLY.
Object File: Chọn kiểu cho file.hex, Chọn 8 bit HEX cho file hex intel 8 bit và chọn 16 HEX cho
file hex intel 16 bit.
Sau khi đã chọn lựa kiểu định dạng file xuất ra sau khi biên dịch, click OK.
+ Global Defines: Cho phép đặt #define để sử dụng cho biên dịch chƣơng trình. Điều này tƣơng tự nhƣ
việc khai báo #define ở đầu chƣơng trình.
+ Debug/Programer: Cho phép xác định thiết bị lập trình đƣợc sử dụng khi chọn lựa công cụ lập trình cho
chip.
+ Include Dirs: Tƣơng tự nhƣ trong thực đơn Project.

e. Compiler: Biên dịch dự án hiện hành
f. View: Thực đơn view gồm các thành phần nhƣ hình

C/ASM List: Mở file.lst ở chế độ chỉ đọc, file này phải đƣợc biên dịch trƣớc từ file.c. Khi đƣợc mở,
file này sẽ trình bày theo dạng vừa có mã C vừa có mã Assembly.
Ví dụ File.lst
……………delay_ms(3);
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 8


0F2: MOVLW 05
0F3: MOVWF 08
0F4: DESCZ 08,F
0F5: GOTO 0F4
…………….while input(pin_0));
0F6: BSF 0B,3
Symbol Map: Mở file dạng mã ASM ở chế độ chỉ đọc. File này phải đƣợc biên dịch từ file.c. File này
cho biết địa chỉ của các thanh ghi sử dụng trong chƣơng trình.
+ Binary file: Mở file nhị phân ở chế độ chỉ đọc, File này đƣợc hiển thị ở mã HEX và mã ASCII.
g. Tool: Thực đơn Tool quản lý một số công cụ đặc biệt. Các thành phần trong thực đơn tool nhƣ
hình.



Trong thực đơn tool chỉ có một công cụ khá đặc biệt mà ngƣời sử dụng MCU cần lƣu ý là công cụ
disassembler, công cụ này cho phép dịch ngƣợc file.bin hoặc file.hex thành file theo kiểu mã ASM.

h. Help: thực đơn trợ giúp, trong thực đơn này chứa phần hƣớng dẫn sử dụng PIC C compiler dƣới dạng
HYML.

3. Các bƣớc viết chƣơng trình trên Pic c Compiler
Chạy PIC C Compiler bằng cách double click vào biểu tƣợng của phần mềm.
Trên Menu Bar của phần mềm, chọn Project -> New -> PIC Wizard để tạo dự án mới hoặc chọn
Project –> Open để mở dự án trong đã lƣu trong đĩa.
Nếu là dự án mới thì sau khi chọn PIC Wizard, đặt tên cho dự án và click SAVE.
Sau khi click SAVE, của sổ cho phép chọn thông số cho dự án theo mẫu hiện ra, chọn các thông
số cần thiết cho dự án và click OK.
Sau khi click OK, cửa sổ soạn thảo chƣơng trình theo mã C xuất hiện, viết mã theo giải thuật để
thực hiện dự án. Chọn File save all để lƣu trữ các file trong dự án vào đĩa cứng.

Sau khi viết mã xong, chọn Compiler -> compiler để biên dịch chƣơng trình thành file.hex. Nếu
chƣơng trình không có lỗi thì file.hex đƣợc tạo ra còn ngƣợc lại thì sửa lỗi chƣơn gtrình rồi biên
dịch lại.
Sau khi tạo đƣợc file.hex, dùng chƣơng trình PIC downloader để nạp chƣơng trình vào bộ nhớ
FLASH của MCU.



Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 9

III. MỘT CHƢƠNG TRÌNH TRÊN C COMPILER
1. Cấu trúc chƣơng trình
Chƣơng trình đƣợc viết trên PIC C compiler gồm 4 phần tử chính, Trong mỗi phần tử sẽ bao gồm
nhiều chi tiết để tạo nên chƣơng trình. Cấu trúc chƣơng trình nhƣ sau:
a. Phần ghi chú
Ở phần ghi chú, ngƣời lập trình sẽ ghi những chú thích cần thiết cho chƣơng trình. Phần chú thích
đƣợc bắt đầu từ dấu // hoặc /* cho tới cuối hàng. Khi biên dịch, trình biên dịch sẽ bỏ qua phần ghi
chú. Phần ghi chú có thể xuất hiện bất cứ chỗ nào trong chƣơng trình thậm chí có thể đặt ngay sau
hàng mã lệnh để chú thích cho hàng lệnh.
b. Chỉ định các tiền xử lý
Phần này sẽ chỉ định các tiền xử lý đƣợc sử dụng khi biên dịch. Các tiền xử lý đƣợc bắt đầu bằng
dấu #.
Ví dụ: khai báo các tiền xử lý, chi tiết về từng tiền xử lý sẽ đƣợc trình bày chi tiết sau.
# include // Chỉ định tiền xử lý include
# device
c. Định nghĩa các dữ liệu
Đây là phần khai báo hằng, khai báo biến và kiểu dữ liệu sử dụng trong chƣơng trình.
Ví dụ: int a,b,c,d; // Khai báo biến a,b,c,d kiểu nguyên

Các kiểu dữ liệu đơn giản dùng trong PIC C compiler tƣơng tự nhƣ trong C chuẩn, gồm các kiểu
nhƣ trong bảng sau:

Kiểu dữ liệu
Mô tả
int1
Định nghĩa một dữ liệu 1 bit (kiểu nguyên)
int8
Định nghĩa một dữ liệu 8 bit (kiểu nguyên
int16
Định nghĩa một dữ liệu 16 bit (kiểu nguyên)
int32
Định nghĩa một dữ liệu 32 bit (kiểu nguyên)
char
Định nghĩa một dữ liệu kiểu ký tự 8 bit
float
Định nghĩa một dữ liệu 32 bit dạng dấu chấm động (kiểu thực)
short
Mặc nhiên là int1
int
Mặc nhiên là int8
long
Mặc nhiên là int16
void
Chỉ một kiểu dữ liệu không xác định
static

Định nghĩa biến tĩnh toàn cục và có giá trị ban đầu bằng 0. Khi khai
báo biến này thì bộ nhơ sẽ dành một vùng nhớ tuỳ theo kiểu biến đễ
lƣu trữ và vùng nhớ này đƣợc giữ cho dù biến đó không đƣợc sử

dụng
auto

Định nghĩa một biến kiểu động, biến này chỉ tồn tại khi hàm sử dụng
nó hoạt động, vùng nhớ chứa biến này sẽ đƣợc trả lại khi hàm thực
hiện xong.
double
Dự trữ một word nhớ nhƣng không hỗ trợ kiểu dữ liệu
extern
Kiểu dữ liệu mỡ rộng
register
Kiểu thanh ghi

d. Định nghĩa các hàm
Định nghĩa các hàm (Function) đƣợc dùng để thực hiện giải thuật của chƣơng trình. Hàm có cấu
trúc nhƣ sau:
Tên hàm (Các đối số của hàm)
{
Các phát biểu
}
Trong đó Tên hàm đƣợc đặt tuỳ ý của ngƣời viết chƣơng trình. Các đối số của hàm là các
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 10

thông số dùng để trao đổi dữ liệu cũa hàm, đối số có thể là rỗng nếu hàm không trao đổi dữ liệu hoặc
có thể có nhiều đối số, các đối số phân cách nhau bằng dấu „,‟
Ví dụ:
void lcd_putc(char c ) // Định nghĩa hàm
{


}
2. Các phát biểu điều kiện và vòng lặp trong chƣơng trình
a. Phát biểu điều kiện if - else
Phát biểu điều kiện if – else đƣợc dùng để rẽ nhánh chƣơng trình, phát biểu if – else có dạng nhƣ
sau:
If (điều kiện)
{
Các lệnh trong chương trình
}
else
{
Các lệnh trong chương trình
}
b. Vòng lặp WHILE
Vòng lặp while đƣợc dùng để lặp chƣơng trình. Cấu trúc của vòng lặp while nhƣ sau:
while (biểu thức điều kiện)
{
Các lệnh trong chương trình
}
Hoạt động của vòng lặp while là sẽ thực hiện các lệnh trong cặp từ khoá {} khi mà biểu thức điều
kiện là đúng.
c. Vòng lặp do – while
Vòng lặp do – while đƣợc sử dụng tƣơng tự nhƣ vòng lặp while tuy nhiên, vòng lặp while kiểm tra
điều kiện trƣớc khi thực hiện các lệnh còn vòng lặp do – while sẽ kiểm tra điều kiện sau khi thực hiện
các lệnh. Cấu trúc của vòng lặp do – while nhƣ sau:
do
{
Các lệnh trong chương trình
}

while (biểu thức điều kiện);
d. Vòng lặp for
Vòng lặp for đƣợc dùng để lặp lại chƣơng trình theo một biến đếm. Cấu trúc của vòng lặp for nhƣ
sau:
For (biểu thức 1; biểu thức 2; biểu thức 3)
{
Các lệnh trong chương trình
}
Trong đó biểu thức 1 là giá trị khởi đầu của biến đếm, biểu thức 2 là giá trị cuối của biến đếm,
biểu thức 3 là biểu thức đếm.
e. Phát biểu SWITCH – CASE
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 11

Phát biểu switch – case đƣợc dùng để rẽ nhánh chƣơng trình. Cấu trúc của phát biểu này nhƣ sau:
Switch (biểu thức điều kiện)
{
case điều kiện 1:
Các lệnh trong chương trình;
Break;
Case điều kiện 2:
Các lệnh trong chương trình;
Break;

default:
Các lệnh trong chương trình;
Break;
}
f. Phát biểu return

Phát biểu return đƣợc dùng để trả về trị của hàm. Phát biể return nhƣ sau:
Return (giá trị);
g. Phát biểu goto
Phát biểu goto đƣợc dùng để nhảy tới một nhãn trong chƣơng trình. Phát biểu goto có dạng nhƣ
sau:
goto nhãn;
h. Phát biểu break
Phát biểu break dùng để kết thúc một nhóm lệnh trong cặp từ khóa {}. Phát biểu break nhƣ sau:
break;
i. Phát biểu continue
Phát biểu continue dùng để tiếp tục thực hiện một nhóm lệnh trong cặp từ khóa {}. Phát biểu
continue nhƣ sau
Continue;














Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 12


3. Các phép toán trong C compiler


4. Các hàm chứa trong thƣ viện của Pic C Compiler
PIC C compiler xây dựng sẵn 108 hàm chia thành 11 nhóm và đƣợc chứa trong các file.h. Khi trong
chƣơng trình muốn gọi các hàm này thì ở đầu chƣơng trình phải khai báo tiền xử lý #use hoặc #include để
trình biên dịch tìm các hàm tƣơng ứng để đƣa vào dự án. Các hàm này sẽ đƣợc trình bày chi tiết trong các
ứng dụng cụ thể

CHƢƠNG 3: CÁC BÀI TẬP ỨNG DỤNG
I. BÀI TẬP ỨNG DỤNG CÁC HÀM XUẤT NHẬP VÀ DELAY
1. Các kiến thức liên quan
a. Các chỉ định tiền xử lý
 # DEVICE:
Cú pháp: #device chip options
Trong đó
 chip là tên bộ vi xử lý ( ví dụ nhƣ: 16f877)
 Options là các toán tử tiêu chuẩn đƣợc quy định trong mỗi chip, các option bao gồm:
• *=5: Sử dụng con trỏ 5 bit (Cho tất cả các MCU)
• *=8: Sử dụng con trỏ 8 bit (Cho MCU 14 và 16 bit)
• *=16: Sử dụng con trỏ 16 bit (Cho MCU 14 bit)
• ADC=xd9: x là số bit trả về sau khi gọi hàm read_adc()
• ICD=TRUE: Tạo ra mã tƣơng ứng Microchips ICD debugging hardware.
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 13

Mục đích: Định nghĩa chip sử dụng. Tất cả các chƣơng trình đều phải sử dụng khai báo này
nhằm định nghĩa chân trên chip và một số định nghĩa khác của chip

Ví dụ: #device PIC16F877 *=16 ADC=10
 #INCLUDE
Cú pháp: #include <filename> hoặc #include "filename"
Trong đó filename là tên file hợp lệ trong PC.
Mục đích: Bộ tiền xử lý sẽ sử dụng thông tin cần thiết đƣợc chỉ ra trong filename trong quá
trình biên dịch để thực thi lệnh trong chƣơng trình chính. Tên file nếu đặt trong dấu “ ” sẽ
đƣợc tìm kiếm trƣớc tiên, nếu đặt trong dấu <> sẽ đƣợc tìm sau cùng. Nếu đƣờng dẫn không
chỉ rõ, trình biên dịch sẽ thực hiện tìm kiếm trong thƣ mục chứa project đang thực hiện. Khai
báo #include <> đƣợc sử dụng hầu hết trong các chƣơng trình để khai báo thiết bị (IC) đang
sử dụng cũng nhƣ cần kế thừa kết quả một chƣơng trình đã có trƣớc đó.
Ví dụ: #include "C:\Documents and Settings\Jerry\Desktop\Tam\vi du ccs\main.h"
#include <Pic16f877a.h>
 #FUSE:
Cú pháp: #fuse option
Trong đó: option thay đổi tuỳ thuộc vào thiết bị. Danh sách các option hợp lệ đƣợc đặt tại đầu
của file.h trong phần chú thích của mỗi thiết bị. Các option đƣợc diễn giải chi tiết trong thực
đơn View-> Fuse valid trong PIC C compiler. Cửa sổ FUSE Review nhƣ sau:

Mục đích: Định nghĩa này đƣợc dùng để chỉ ra fuses nào đƣợc đặt vào MCU khi lập trình cho
nó. Chỉ dẫn này không ảnh hƣởng gì đến quá trình biên dịch nhƣ nó đƣợc xuất ra file output
Ví dụ: #fuses HS,NOWDT  sử dụng thạch anh tốc độ cao, không sử dụng Watch Dog
Timer

 # USE
Cú pháp: #use Tên hàm (các thông số của hàm)
Mục đích: khai báo tiền xử lý này cho phép ta sử dụng các hàm có sẵn trong chƣơng trình
Ví dụ: #use delay (clock=20000000) => khai báo sử dụng hàm delay với tần số 20Mhz
 # BYTE:
Tài liệu Vi Xử Lý Pic


Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 14

Cú pháp: #byte id = x
Trong đó:
 id là tên hợp lệ trong C
 x là một biến trong C hoặc là hằng số
Mục đích: Nếu id đã đƣợc xác định nhƣ một biến hợp lệ trong C thì lệnh này sẽ đặt biến C
vào trong bộ nhớ tại địa chỉ x, biến C này không đƣợc thay đổi khác với định nghĩa ban đầu.
Nếu id là biến chứa biết thì một biến C mới sẽ đƣợc tạo và đặt vào bộ nhớ tạo địa chỉ x.
Ví dụ: #byte TRISA =0x85  thanh ghi TRISA đƣợc đặt vào bộ nhớ tại địa chỉ 85
 # Bit:
Cú pháp: #bit id = x.y
Trong đó:
 id là tên hợp lệ trong C
 x là hằng số hoặc biến trong C
 y là hằng số từ 0 -7
Mục đích: Tạo một biến mới (1 bit) trong C và đặt nó vào trong bộ nhớ tại byte x, bit y. Lệnh
này thƣờng đƣợc sử dụng để truy xuất trực tiếp từ C tới một bit trong thanh ghi chức năng đặc
biệt.
Ví dụ: #bit RA5 =0x05.5  tạo biến RA5 là bit thứ 5 trong bộ nhớ có địa chỉ byte 05
 #DEFINE
Cú pháp: #define id text
Trong đó:
 id là một định nghĩa tiền xử lý.
 text là đoạn văn bản bất kỳ
Mục đích: Định nghĩa một hằng hay một tham số thƣờng sử dụng trong chƣơng trình
Ví dụ: #define led portc  định nghĩa led là portc

b. Các hàm liên quan
a. Các hàm phục vụ cổng vào ra




b. Các hàm delay (40)







Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 15

c. Các hàm thao tác trên bit, byte

Các hàm trên bit, byte
SHIFT_RIGHT ()
BIT_CLEAR ()
MAKE8()
SHIFT_LEFT ()
BIT_SET ()
MAKE16()
ROTATE_RIGHT ()
BIT_TEST()
MAKE32()
ROTATE_LEFT ()
SWAP()



2. Bài tập ứng dụng
a. Bài tập 1: viết chƣơng trình led dịch phải

#include<16F877A.h>
#fusesNOWDT,PUT,HS,NOPROTECT,NOLVP
#byte PORTB =0x06
#byte trisb =0x86
#use delay(clock=20000000)
int8 dem,bien;
void main()
{
trisb=0;
while(true)
{
dem=8;
portb=0;
delay_ms(100);
bien=1;
while(dem>0)
{
portb=bien;
bien=bien<<1;
delay_ms(100);
dem ;
}
}
}
b. Bài tập 2: viết chƣơng trình điều khiển led đơn nhiều trạng thái
 Có nhiều cách để viết chƣơng trình, tuy nhiên để đơn giản trong lập trình và thuận tiện trong

việc quản lý, sửa chữa chƣơng trình ta nên viết theo dạng chƣơng trình con. Mỗi chƣơng trình
con là một trạng thái cần hiển thị
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 16


#include <16F877A.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP,
NOCPD, NOWRT
#use delay(clock=20000000)
#byte portb = 0x06
#byte trisb = 0x86
int8 mode,i;
byte temp;
void program1();
void program2();
void program3();
void program4();
void program5();
void program6();
void program7();
void program8();

Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 17

void main()
{

trisb = 0x00;
portb=0xff;
mode = 1;
while (1)
{
switch(mode)
{
case 1: program1(); break;
case 2: program2(); break;
case 3: program3(); break;
case 4: program4(); break;
case 5: program5(); break;
case 6: program6(); break;
case 7: program7(); break;
case 8: program8(); break;
}
}
}
void program1()
{
Portb = 0x00;
delay_ms(100);
Portb = 0xFF;
delay_ms(100);
mode = mode +1;
}
void program2()
{
temp = 0xFF;
for (i=0;i<=8;i++)

{
portb = temp;
delay_ms(100);
temp >>= 1;
}
mode = mode +1;
}
void program3()
{
temp = 0xFF;
for (i=0;i<=8;i++)
{
portb = temp;
delay_ms(100);
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 18

temp <<= 1;
}
mode = mode +1;
}
void program4()
{
portb = 0xAA;
delay_ms(500);
portb = 0x55;
delay_ms(500);
mode = mode +1;
}

void program5()
{
Portb = 0x7E;
delay_ms(150);
Portb = 0xBD;
delay_ms(250);
Portb = 0xDB;
delay_ms(150);
Portb = 0xE7;
delay_ms(150);
Portb = 0xDB;
delay_ms(150);
Portb = 0xBD;
delay_ms(150);
Portb = 0x7E;
delay_ms(150);
mode = mode +1;
}
void program6()
{
temp = 0xFF;
for (i=0;i<=8;i++)
{
portb = temp;
delay_ms(250);
temp = temp >> 1;
}
mode = mode +1;
}
void program7()

{

Portb = 0xFE;
delay_ms(150);
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 19

Portb = 0xFD;
delay_ms(150);
Portb = 0xFB;
delay_ms(150);
Portb = 0xF7;
delay_ms(150);
Portb = 0xEF;
delay_ms(150);
Portb = 0xDF;
delay_ms(150);
Portb = 0xBF;
delay_ms(150);
Portb = 0x7F;
delay_ms(150);
mode = mode +1;
}
void program8()
{
Portb = 0x7F;
delay_ms(150);
Portb= 0xBF;
delay_ms(150);

Portb = 0xDF;
delay_ms(150);
Portb= 0xEF;
delay_ms(150);
Portb = 0xF7;
delay_ms(150);
Portb = 0xFB;
delay_ms(150);
Portb = 0xFD;
delay_ms(150);
Portb = 0xFE;
delay_ms(150);
mode = 1;
}

c. Bài tập 3
II. BÀI TẬP ỨNG DỤNG CÁC HÀM TIMER VÀ NGẮT TIMER
1. Các kiến thức liên quan timer
a. Giới thiệu về timer
Trong Pic16f877a có 3 timer :
+ Timer0 : 8 bit
+ Timer1 : 16 bit
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 20

+ Timer2 : 8 bit
Timer dùng cho nhiều ứng dụng : định thời, capture, pwm,
Timer có nhiều kiểu chia tần, dùng chia trƣớc và sau (prescale và postscale) là chia trƣớc và chia
sau, có nhiều cách đặt tỉ lệ cho Timer từ 1:1 - 1:256 tức là cách chia này giúp cho ta nhận đƣợc xung

kích vào Timer sẽ đƣợc chậm đi n lần ( 1:n ) so với 1Tcy (Fosc/4), và nhƣ vậy ta sẽ đƣợc xung kich
chậm hơn:
b. Các hàm liên quan

HÀM LIÊN QUAN TỚI TIMER
TÊN HÀM
CÚ PHÁP
CHỨC NĂNG
SETUP_WDT ()
setup_wdt(mode)
Hàm này đƣợc dùng để định chế độ hoạt động cho watchdog
timer.
RESTART_WDT()
restart_wdt()
Hàm này đƣợc dùng để Khởi động lại watchdog timer.
SETUP_COUNTRES()
setup_counters(rtcc_stat
e, ps_state)
Hàm này đƣợc dùng để Set up RTCC hay WDT
GET_RTCC(),
GET_TIMER0():
value = get_rtcc()
value = get_timer0()
Hàm này đƣợc dùng để trả về giá trị biến đếm của real time
clock/counter. Khi giá trị timer vƣợt quá 255, value đƣợc đặt
trở lại 0 và đếm tiếp tục (…, 254, 255, 0, 1, 2, …)
SET_RTCC(),
SET_TIMER0():
set_rtcc()
set_timer0()

Hàm này đƣợc dùng để đặt giá trị ban đầu cho real time
clock/counter. Tất cả các biến đều đếm tăng. Khi giá trị timer
vƣợt quá 255, value đƣợc đặt trở lại 0 và đếm tiếp tục (…,
254, 255, 0, 1, 2, …)
SETUP_TIMER1()
setup_timer_1(mode)
Hàm này đƣợc dùng để khởi động timer 1. Sau đó timer 1 có
thể đƣợc ghi hay đọc dùng lệnh set_timer1() hay get_timer1().
Timer 1 là 16 bit timer. Với xung clock là 20MHz, timer 1
tăng 1 đơn vị sau mỗi 1,6us (khi ta dùng chế độ
T1_DIV_BY_8) và tràn sau 104,8576ms.
GET_TIMER1():
value = get_timer1()
Hàm này đƣợc dùng để trả về giá trị biến đếm của real time
clock/counter. Khi giá trị timer vƣợt quá 65535, value đƣợc
đặt trở lại 0 và đếm tiếp tục (…, 65534, 65535, 0, 1, 2, …)
SET_TIMER1()
set_timer1()
Hàm này đƣợc dùng để đặt giá trị ban đầu cho real time
clock/counter. Tất cả các biến đều đếm tăng. Khi giá trị timer
vƣợt quá 65535, value đƣợc đặt trở lại 0 và đếm tiếp tục (…,
65534, 65535,0, 1, 2, …)
SETUP_TIMER2()
setup_timer_2(mode,per
iod,postscale)
Hàm này đƣợc dùng để khởi động timer 2. mode qui định số
chia xung clock. Sau đó timer 2 có thể đƣợc ghi hay đọc dùng
lệnh set_timer2() hay get_timer2(). Timer 1 là 8 bit
counter/timer
GET_TIMER2()

value = get_timer2()
Hàm này đƣợc dùng để trả về giá trị biến đếm của real time
clock/counter. Khi giá trị timer vƣợt quá 255, value đƣợc đặt
trở lại 0 và đếm tiếp tục (…, 254, 255, 0, 1, 2, …)
SET_TIMER2():
set_timer2(value)
Hàm này đƣợc dùng để đặt giá trị ban đầu cho real time
clock/counter. Tất cả các biến đều đếm tăng. Khi giá trị timer
vƣợt quá 255, value đƣợc đặt trở lại 0 và đếm tiếp tục (…,
254, 255, 0, 1, 2,…)

2. Kiến thức liên quan tới ngắt timer
a. Giới thiệu về ngắt timer
Vi xử lý có tất cả 15 nguồn ngắt khác nhau, ở trong phần này ta chỉ khảo sát ba nguồn ngắt do 3
timer gây ra. Mỗi lần xuất hiện điều kiện ngắt thì chƣơng trình tự động nhãy tới chƣơng trình ngắt
thực hiện

b. Các hàm ngắt timer
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 21

CÁC HÀM QUẢN LÝ NGẮT
Tên hàm
Cú pháp
Chức năng
EXT_INT_EDGE()
ext_int_edge(source,edge)
Hàm này đƣợc dùng để qui định thời điểm
ngắt tác động: cạnh lên hay xuống

#INT_xxx
#INT_RTCC
#INT_TIMER1
#INT_TIMER2
Khai báo ngắt timer 0
Khai báo ngắt timer 1
Khai báo ngắt timer 2
ENABLE_INTERRUPTS()
enable_interrupts(level)
Hàm này đƣợc dùng để Khởi tạo ngắt tại mức
quy định bởi level. Một thủ tục ngắt (interrupt
procedure) cần đƣợc định nghĩa. Mức toàn cục
(GLOBAL level) không khởi tạo bất kỳ ngắt
chỉ định nào mà chỉ khởi tạo các biến ngắt
đƣơc đã khởi tạo trƣớc đó
DISABLE_INTERRUPTS()
disable_interrupts(level)
Hàm này đƣợc dùng để tắt ngắt tại mức quy
định bởi level.

3. Bài tập ứng dụng
a. Viết chƣơng trình hiển thị các số từ 0 tới 9 trên led 7 đoạn sử dụng ngắt timer 0, cứ sau 1s thì giá trị
hiển thị tăng lên 1










#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTD = 0x08

int16 count;
int maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int dem = 0;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{ set_timer0(6);
++count;
if(count == 2000) // 2000*500us = 500000us = 1s
{ count=0;
dem = dem +1;
if (dem ==10)
{
dem =0;
}
}
}
void main(void)
{ set_tris_d(0);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us

while(true)
{ PORTD = maled[dem];
}
}
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 22


III. BÀI TẬP ỨNG DỤNG CÁC HÀM ADC – GIAO TIẾP LCD
1. Giới thiệu về ADC
PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế chuẩn VREF có thể
đƣợc lựa chọn là VDD, VSS hay hiệu điện thể chuẩn đƣợc xác lập trên hai chân RA2 và RA3.
PIC16F877, bộ A/D mặc định là 8 bit. Để sử dụng A/D 10 bit ta phải dùng thêm lệnh #device
PIC16F877 *=16 ADC=10 ngay từ đầu chƣơng trình.

2. Các hàm liên quan
CÁC HÀM QUAN LÝ ADC
TÊN HÀM
CÚ PHÁP
CHỨC NĂNG
SETUP_ADC()
setup_adc(mode)
Hàm này đƣợc dùng để định cấu hình cho
bộ biến đổi A/D
SETUP_ADC_PORT()
setup_adc_ports(value)
Hàm này đƣợc dùng để xác định cổng
dùng để nhận tín hiệu analog
SETUP_ADC_CHANNEL()

setup_adc_channel(chan)
Hàm này đƣợc dùng để xác định pin để
đọc giá trị Analog bằng lệnh
READ_ADC()
READ_ADC()
value = read_adc()
Hàm này đƣợc dùng để đọc giá trị Digital
từ bộ biến đổi A/D. Các hàm setup_adc(),
setup_adc_ports() và set_adc_channel()
phải đƣợc dùng trƣớc khi dùng hàm
read_adc().
SETUP_VREF()
setup_vref(mode/value)
Hàm này đƣợc dùng để thiết lập điện áp
chuẩn bên trong MCU cho bộ analog
compare hoặc cho ngõ ra ở chân A2

3. Ví dụ về ADC
a. Viết chƣơng trình đọc ADC từ kênh 0, tần số lấy mẫu bằng tần số thạch anh chia 2, kết quả chuyển
đổi là 8 bit và hiển thị ra led đơn



Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 23







#include <16f877a.h>
#use delay(clock=20000000) //use a 20 MHz crystal
#byte portb=0x06
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG,
NOBROWNOUT, NOLVP, NOCPD, NOWRT

void main()
{
set_tris_b(0x00); //set register for I/O port B
setup_adc_ports(RA0_RA1_RA3_ANALOG);
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(0); //analog input to pin A0
while(1)
{
delay_us(10); //sample hold time
portb=read_adc(); //output portb digital value
}
}
4. LCD
a. Giới thiệu lcd
 Bảng liệt kê các chân của LCD

 Vùng ram hiển thị DDRAM

Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ô ký tự trên
Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 24


màn hình và khi bạn ghi vào vùng RAM này 1 mã 8 bit, LCD sẽ hiển thị tại vị trí
tƣơng
ứng trên
màn hình một ký tự có mã 8 bit mà bạn đã cung cấp.
Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa đƣợc 80 ký tự mã 8 bit. Những vùng RAM
còn lại không dùng cho hiển thị có thể dùng
nhƣ
vùng RAM đa mục đíh.
Lƣu
ý là để truy cập
DDRAM, ta phải cung cấp địa chỉ cho AC(adress counter) theo mã HEX.
 Vùng ROM chứa ký tự CGROM (character Generator ROM)

Vùng ROM này dùng để chứa các mẫu ký tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự. và định địa
chỉ bằng 8 bit. Tuy nhiên, nó có 208 mẫu kí tự 5x8 và 32 mẫu kí tự kiểu 5x10 (tổng cộng là 240
thay vì 28=256 mẫu kí tự).
ngƣời
dùng không thể thay đổi vùng ROM này. Nhƣ vậy, để có thể
ghi vào vị trí thứ x trên màn hình một kí tự y nào
đó,ngƣời
dùng phải ghi vào vùng DDRAM tại
địa chỉ x một chuỗi mã kí tự 8 bit trên CGROM. Chú ý là trong bảng mã kí tự trong CGROM ở
hình bên
dƣới
có mã ROM A00
Ví dụ: ghi vào DDRAM tại địa chỉ “01” một chuỗi 8 bit “01100010” thì trên LCD tại ô thứ 2
từ trái sang (dòng trên) sẽ hiển thị kí tự “b”.

















Tài liệu Vi Xử Lý Pic

Bộ Môn Tự Động – Trƣờng Cao Đẳng Kỹ Thuật Cao Thắng Trang 25

 Tập lệnh của LCD



 Lệnh Clear Display (xóa hiển thị) sẽ ghi một khoảng trống – blank (mã hiển thị kí tự 20H)
vào tất cả ô nhớ trong DDRAM , sau đó trả bộ đếm AC=0,trả lại kiểu hiển thị gốc nếu nó bị
thay đổi. nghĩa là : tắt hiển thị ,con trỏ dời về góc trái (hàng đầu tiên), chế độ tăng
AC.

 Lệnh Return Home trả bộ đếm địa chỉ AC về 0, trả lại kiểu hiển thị gốc nếu nó bị thay đổi.
nội dung của DDRAM không thay đổi.
 Lệnh Entry mode set:

 I/D: tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiển thị AC 1 đơn vị mỗi khi có
hành động ghi hoặc đọc vùng DDRAM. vị trí con trỏ cũng di chuyển theo sự tăng giảm này.
 S: khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải (I/D=0) hoặc sang trái (I/D=1)
mỗi khi có hành động ghi vùng DDRAM. Khi S=0: không dịch nội dung hiển thị.nội dung
hiển thị không dịch khi đọc DDRAM hoặc đọc/ghi vùng CGRAM.
 Lệnh Display on/off Control:
 D: hiển thị màn hình khi D=1 và ngƣợc lại. khi tắt hiển thị, nội dung DDRAM không
thay đổi.
 C: hiển thị con trỏ khi C=1 và
ngƣợc
lại. vị trí và hình dang con trỏ.
 B: nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngƣợc lại. Chu kỳ nhấp nháy khoảng
409,6 ms khi mạch dao động nội LCD là 250kHz.
 Lệnh Cursor Or Display Shift:
Lệnh Cursor Or Display Shift dịch chuyển con trỏ hay dữ liệu hiển thị sang trái mà không
cần hành động đọc/ghi dữ liệu. khi hiển thị kiểu 2 dòng, con trỏ sẽ nhảy xuống dòng
dƣới
khi
dịch qua vị trí thứ 40 của hàng đầu tiên . Dữ liệu hàng đầu tiên và hàng 2 dịch cùng1 lúc

 Lệnh Function Set:
 DL: Khi DL=1, LCD giao tiếp với MPU bằng giao thức 8 bit (từ bit DB7 đến DB0).

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×