Tải bản đầy đủ (.doc) (56 trang)

PIC 16F84 và một số ứng dụng.doc

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.7 MB, 56 trang )

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
.........................................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
Trang1_56
NHẬN XÉT CỦA HỘI ĐỒNG PHẢN BIỆN
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................


..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
Trang2_56
LỜI CẢM ƠN
PIC là một dòng vi điều khiển khá mới mẻ ở nước ta. Lần đầu tiên chúng em
tiếp xúc với nó do đó việc tìm hiểu nó gặp rất nhiều khó khăn. Tuy nhiên nhờ sự
giúp đỡ nhiệt tình của giáo viên hướng dẫn_thầy Võ Tường Quân cùng với sự hỗ
trợ nhiệt tình của các bạn trong lớp, chúng em đã hoàn thành tốt đồ án này. Chúng
em xin chân thành cảm ơn Thầy và các bạn.
Lần đầu tiên tìm hiểu về dòng PIC nên chắn không tránh khỏi những thiếu
sót, chúng em mong sẽ nhận được những hướng dẫn quý báu của các Thầy trong
Bộ môn và các ý kiến đóng góp của các bạn để có thể tiếp tục tìm hiểu sau hơn về
dòng vi điều khiển PIC.
Trang3_56
LỜI GIỚI THIỆU
Ngày nay, với tốc độ phát triển mạnh mẽ của công nghệ tự động trong tất cả
mọi lónh vực thì việc tìm hiểu và ứng dụng các dòng chip Vi điều khiển là một vấn

đề cần được quan tâm. Họ Vi điều khiển 8051 rất quen thuộc với chúng ta, và nó
từng được xem là họ vi điều khiển rất ưu việt. Tuy nhiên với nhu cầu ngày càng
cao về tính ổn đònh, tốc độ xử lý cũng như khả năng tiếp cận dễ dàng của người
dùng, thì họ 8051 đã không phát huy được ưu thế của mình.
Các chip vi điều khiển thuộc dòng PIC của hãng Microchip

có lẽ không quá
xa lạ. Với công nghệ RISC (Reduced Instruction Set Computer) nâng cao đáng kể tốc
độ xử lý, khả năng chống nhiễu, khả năng mở rộng tốt, khả năng nạp lại trên 1000
lần, tập lệnh đơn giản, được hỗ trợ lập trình dưới dạng Macro và đa dạng về chủng
loại, thì dòng PIC là một dòng vi điều khiển tốt nhất trong các ứng dụng tự động từ
đơn giãn đến phức tạp nhất. Tuy nhiên đến giờ nó còn khá mới mẻ và vẫn chưa
được ứng dụng rộng rãi. Vì thế việc tìm hiểu dòng vi điều khiển này là một nhu
cầu thực tế và nó hứa hẹn mang lại nhiều hiệu quả thiết thực phục vụ cho công
nghệ tự động.
PIC16F84 là một tiêu biểu, có thể được coi là chip vi điều khiển đơn giản
nhất của dòngï PIC. Với 2 Port, 18 chân và đầy đủ các tính chất ưu việt của dòng
PIC, PIC16F84 phù hợp với các ứng dụng vừa và nhỏ, nhất là các thí nghiệm phục
vụ học tập, nghiên cứu.
Chúng em mong rằng với đồ án “PIC16F84 và một số ứng dụng” sẽ là bước
khởi đầu mở ra cái nhìn gần gũi hơn về dòng PIC để từ đó chúng ta có thêm một
công cụ đắc lực trong điều khiển tự động.
Trang4_56
MỤC LỤC
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1

........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
........................................................................................................................................................1
NHẬN XÉT CỦA HỘI ĐỒNG PHẢN BIỆN....................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
.......................................................................................................................................................2

........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
........................................................................................................................................................2
LỜI CẢM ƠN...................................................................................................................................3
LỜI GIỚI THIỆU.............................................................................................................................4
Trang5_56
Phần I: GIỚI THIỆU VỀ PIC16F84 ................................................................................................... 7
Phần II: LẬP TRÌNH HP NGỮ CHO PIC16F84 ............................................................................ 22
Phần III: PHƯƠNG PHÁP NẠP CHIP ............................................................................................. 32
Phần IV: ỨNG DỤNG ................................................................................................................... 35
Trang6_56
Phần I: Giới thiệu về PIC16F84
Phần I: GIỚI THIỆU VỀ PIC16F84
I.1. Tổng quan:
I.1.1. Cấu trúc
PIC16F84 thuộc vi điều khiển 8 bit có cấu trúc RISC( Reduce Instruction Set
Computer). Cấu trúc tổng quát của nó được biểu diễn dưới dạng các khối sau :
Hình I-1: Sơ đồ khối PIC
Bộ nhớ chương trình (Program memory) : Dùng để chứa chương trình nạp. Vì
được chế tạo bằng công nghệ FLASH nên bộ nhớ này có thể được lập trình hay xoá
nhiều lần.Ưu điểm này khiến cho con vi điều khiển này thích hợp cho việc xây
dựng các ứng dụng điều khiển.
EPPROM: Đây là bộ nhớ để lưu trữ dữ liệu khi không cấp nguồn. Thông
thường nó được dùng để chứa dữ liệu quan trọng không thể mất nếu chẳng may

nguồn cấp bò mất đột ngột.
RAM: Bộ nhớ dữ liệu được sử dụng cho trong suốt quá trình thực thi chương
trình trong vi điều khiển.
PORTA và PORTB: là các ngõ kết nối vật lý giữa vi điều khiển với các phần
cứng bên ngoài. PORTA có 5 chân giao tiếp trong khi PORTB có đến 8 chân.
FREE- RUN TIMER: Đây là một thanh ghi 8 bit ở bên trong vi điều khiển, nó
hoạt động độc lập với chương trình. Cứ mỗi bốn xung nhòp của bộ dao động thì giá
trò của nó tăng lên một cho đến khi đạt đến giá trò tối đa là 255, và sau đó nó lại bắt
đầu đếm từ 0. Nếu như chúng ta biết được chính xác thời giữa hai lần tăng của nội
Trang7_56
Phần I: Giới thiệu về PIC16F84
dung thanh ghi Timer, thì khi đó nó sẽ được dùng để đònh thời gian, một đặc điểm
hết sức hữu ích và được ứng dụng rất nhiều trong thực tế.
CPU(Central Processing Unit ): Đóng vai trò then chốt trong việc kết nối các
thành phần trong vi điều khiển với nhau, được so sánh giống như bộ não con người.
Nó liên kết các hoạt động của các khối trong vi điều khiển và thực thi chương trình.
RISC
Ngay phần đầu chúng ta có nói rằng PIC16F84 có cấu trúc RISC, vậy RISC
có nghóa là gì? Để có thể thấy được ưu điểm của vi điều khiển này, chúng ta sẽ đi
vào tìm hiểu khái niệm về cấu trúc RISC thông qua việc so sánh hai mô hình
khối cấu trúc Von - Neuman và cấu trúc Harvards.
Hình I-2: Cấu trúc Havard và Von - Neumann
Như ta đã biết, cấu trúc vi điều khiển của Von Neuman la một cấu trúc cổ
điển và được ứng dụng phổ biến.Ở cấu trúc này, bus dữ liệu và đòa chỉ được truy
xuất trên cùng một đường, do đó nó phần nào ảnh hưởng đến tốc độ thực thi của vi
điều khiển.
Không giống như cấu trúc Von Neuman, cấu trúc Harvards tách riêng bus dữ
liệu với bus đòa chỉ. Chính điều này đã tăng tốc độ xử lý của vi điều khiển lên một
cách đáng kể. Các vi điều khiển có cấu trúc phần cứng kiểu Harvards thì được gọi
là vi điều khiển RISC. RISC là viết tắt của thuật ngữ “Reduce Instruction Set

Computer”.
Bởi vì PIC16f84 có cấu trúc RISC nên nó có tập lệnh được tinh giảm, cụ thể
là 35 lệnh. Tất cả các lệnh này đều được thực thi trong một chu kỳ máy,trừ các
lệnh nhảy và rẽ nhánh.
I.1.2. Sơ đồ chân
PIC16F84 có tổng cộng 18 chân, tên gọi và chức năng từng chân như sau:
Trang8_56
Phần I: Giới thiệu về PIC16F84
Hình I-3: Hình dáng bên ngoài PIC16f84
• Chân1: RA2, chân thứ hai của port A
• Chân 2: RA3, chân thứ ba của port A
• Chân 3: RA4, chân thứ tư của port A. Ngoài ra, chân này có có chức năng là
một bộ đònh thời( TOCK1)
• Chân 4: MCLR ngõ reset và cấp áp lập trình cho vi điều khiển.
• Chân 5: Vss chân nối đất của nguồn.
• Chân 6: RB0, chân số 0 của port B. Ngoài ra nó còn là ngõ vào của ngắt.
• Chân 7: RB1, chân số 1 của port B.
• Chân 8: RB2, chân số 2 của port B.
• Chân 9: RB3, chân số 3 của port B.
• Chân 10: RB4, chân số 4 của port B.
• Chân 11: RB5, chân số 5 của port B.
• Chân 12: RB6, chân số 6 của port B.
• Chân 13:RB7, chân số 7 của port B.
• Chân 14: Vdd, chân cấp nguồn cho vi điều khiển.
• Chân 15: OSC2,chân nối với bộ dao động.
• Chân 16: OSC1, chân nối với bộ dao động.
• Chân 17: RA2, chân số 2 của port A.
• Chân 18: RA1, chân số 1 của port A.
I.1.3. Bộ tạo xung
Bộ tạo xung dùng để cấp xung cho vi điều khiển hoạt động.

PIC16F84 có thể hoạt động với bộ tạo xung dùng thạch anh và mạch dao
động RC.
Ở đây chúng ta chỉ sử dụng thạch anh, vì nó ổn đònh và đơn giản.

Trang9_56
Phần I: Giới thiệu về PIC16F84
Hình I-4: Mạch tạo xung dùng thạch anh
I.1.4. Reset
Chức năng Reset dùng để khởi tạo lại cho điều khiển về điều kiện ban đầu.
Thực tế trong quá trình hoạt động, có những lúc vi điều khiển hoạt động không như
mong muốn do bò tác động bởi một tác nhân nào đó, khi đấy ta sẽ dùng chức năng
Reset để khởi tạo lại chức năng cho vi điều khiển, đưa các thanh ghi về vò trí khởi
tạo ban đầu. Không chỉ có thế, Reset còn có vai trò như một ngắt ( Interupt ), giúp
thoát khỏi một chương trình một cách tức thời.
Các nhiều cách ( nguồn ) để Reset lại vi điều khiển, trong đó có hai nguồn
quan trọng nhất, đó là Reset khi vừa cấp nguồn ( Power On Reset _ POR ), và
Reset bởi chân MCLR.
I.1.5. Bộ xử lý trung tâm (CPU)
CPU được ví như là bộ não của vi điều khiển, nó đảm nhận vai trò tìm kiếm
và giải mã các cấu trúc lệnh cho vi điều khiển hoạt động.
CPU gắn kết các thành phần của vi điều khiển thành một khối thống nhất.
Như đã nói ở trên, chức năng quan trọng nhất của nó chính là giải mã lệnh. Khi ta
viết một chương trình, các câu lệnh thường có dạng gợi nhớ như MOVLW 0x20.
Thế nhưng để cho vi điều khiển hiểu được, thì câu lệnh trên phải được dòch thành
một chuỗi các số 0 và 1, gọi là mã lệnh ( opcode ). Việc dòch từ dạng chữ sang
thành mã lệnh được thực hiện bởi các trình biên dòch, chẳng hạn như trình dòch hợp
ngữ. Sau đó CPU sẽ giải mã và thực thi các lệnh.
I.1.6. Thanh ghi trạng thái status
Hình I-5: Thanh ghi trạng thái
Trang10_56

Phần I: Giới thiệu về PIC16F84
 Bit 7_ IRP( Register bank Select bit ): là bit thứ 8 của thanh ghi
STATUS làm nhiệm vụ đònh đòa chỉ gián tiếp cho RAM nội.
IRP = 1: bank 2 và 3
IRP = 0 bank 1 và 0 ( từ đòa chỉ 00h đến FFh).
 Bit 6:5 _ RP1: RP0 ( Register Bank Select Bits ): Hai bit này dùng để
chọn bank thanh ghi.
01 = Bank 1
00 = Bank 0
 Bit 4 _TO (Time – out ): bit này được set bằng 1 mỗi khi WDT bò
tràn.
1 = Chưa tràn
0 = Bò tràn
 Bit 3_ PD ( Power – down bit ) bit này được set mỗi khi vi điều khiển
được cấp nguồn, khi bắt đầu chạy, sau khi reset, và sau khi thực hiện lệnh
CLRWDT
 Bit 2_ Z ( Zero bit ) Dùng để chỉ kết quả ra 0, được set mỗi khi kết
quả trả về của một phép toán số học hay luận lý có giá trò là 0.
 Bit 1_ DC ( Digit Carry ) Bò ảnh hưởng bởi các phép toán cộng, trừ.
Nó được set khi ta trừ một số cho một số lớn hơn.Và được reset trong trường
hợp ngược lại.
 Bit 0_ C (Carry )ảnh hưởng bởi các lệnh ADDWF, ADDLW, SUBLW,
SUBWF.
I.1.7. Các port
Port dùng để chỉ một nhóm các chân trên vi điều khiển có thể truy xuất đồng
thời, hoặc có thể set một bit mong muốn lên 1 hay xuống 0, hoặc đọc từ chúng
trạng thái đang tồn tại. Về mặt vật lý, Port là một thanh ghi bên trong vi điều khiển
được nối bởi dây dẫn với các chân của vi điều khiển. Nó đại diện cho sự kết nối
vật lý giữa bộ xử lý trung tâm với thế giới bên ngoài. Vi điều khiển dùng chúng để
hiển thò hay điều khiển các các thành phần hay thiết bò khác. Tuỳ theo chức năng,

mà một vài chân có thể đảm nhiệm cả vai trò, chẳng hạn như chân RA4/TOCKI,
vừa là bi thứ 4 của Port A, lại vừa là ngõ vào từ bên ngoài cho bộ đếm. Việc lựa
chọn một trong hai chức năng này được thực hiện qua việc thay đổi giá trò cho các
thanh ghi chuyên dụng, chẳng hạn ở đây là bit thứ 5 TOSC trong thanh ghi
Trang11_56
Phần I: Giới thiệu về PIC16F84
OPTION. Khi ta chọn một trong hai chức năng thì chức năng còn lại sẽ không hoạt
động được.
Tất cả các chân trong port đều có thể được dùng như các ngõ xuất hay nhập,
tuỳ thuộc vào yêu cầu của thiết bò cần điều khiển. Để đònh nghóa một chân là xuất
hay là nhập, thì ta sử dụng các thanh ghi TRIS ở bank1. Nếu một bit trong thanh
ghi TRIS bằng 1, thì bit tương ứng với vò trí đó trong port lúc này sẽ là ngõ nhập, và
ngược lại.Mỗi một port có một thanh ghi TRIS riêng cho nó, port A ứng với TRISA,
port B ứng với TRISB.Thanh ghi Port A và B nằm trong bank 0, trong khi TRISA
và TRISB nằm trong bank1.
I.1.8. PORTB và TRISB
Port B gồm 8 chân. Thanh ghi tương ứng cho việc xác đònh chiều dữ liệu là
TRISB.
Hình I-6: Cấu trúc PORTB & TRISB

Mỗi chân trong Port B đều có sẵn một điện trở kéo lên có giá trò nhỏ ở ngay
bên trong (dùng để nối ngõ lên mức logic 1 ) có thể được kích hoạt bằng cách reset
bit thứ 7 RBPU trong thanh ghi OPTION. Các điện trở kéo lên này tự động tắt khi
các chân của port được đònh nghóa là các ngõ xuất. Khi vi điều khiển bắt đầu hoạt
động, các điện trở này không được kích hoạt.
Trang12_56
Phần I: Giới thiệu về PIC16F84
Các chân từ RB4 đến RB7 của port B có thể gây ra ngắt khi trạng thái của nó
thay đổi từ mức 0 lên mức 1 và ngược lại. Chỉ có những chân nào được đònh nghóa là
ngõ nhập mới có thể gây ra ngắt được.

PORTA và TRISA
Port A có 5 chân xuất nhập, thanh ghi tương ứng của nó là TRISA có đòa chỉ
85h. Cũng giống như port B, việc set một bit trong thanh ghi TRISA sẽ đònh nghóa
bit tương ứng trong port A là xuất hay là nhập.
Một điều quan trọng cần chú ý là chân RA4 của port A chỉ có thể dừng để
nhập mà thôi. Nó cũng dùng để nhập từ ngoài cho bộ đònh thời TMR0.
Hình I-7: Cấu trúc PORTA & TRISA
I.2. Tổ chức bộ nhớ
PIC16F84 có hai khối bộ nhớ phân cách nhau, một cho dữ liệu và cái còn lại
cho chương trình. Bộ nhớ EPPROM với các thanh ghi GPR và SFR trong bộ nhớ
RAM sẽ quản lý khối dữ liệu, còn bộ nhớ FLASH quản lý khối chương trình.
Bộ nhớ chương trình
Bộ nhớ chương trình được chế tạo bằng công nghệ FLASH, nó cho phép lập
trình cho vi điều khiển được nhiều lần trước khi nó được lắp đặt vào thiết bò, hoặc
ngay các sau khi nó được lắp đặt mà có một sự cố nào đó xảy ra. Dung lượng của
bộ nhớ chương trình này là 1024 dòng lệnh với độ dài 14 bit, trong đó các vò trí từ
0h đến 4h được dùng cho các vector reset và ngắt.
Bộ nhớ dữ liệu
Trang13_56
Phần I: Giới thiệu về PIC16F84
Bộ nhớ dữ liệu bao gồm bộ nhớ RAM và EPPROM. Bộ nhớ EPPROM bao
gồm 64 byte, nội dung của nó không bò mất đi nếu lỡ như mất nguồn. EPPROM
không được đònh đòa chỉ trực tiếp, mà được truy xuất gián tiếp thông qua 2 thanh
ghi là EEADR và EEDATA. Bởi vì bộ nhớ EPPROM được dùng cho việc lưu trữ
những thông số quan trọng, cho nên người lập trình cần phải tuân theo một số quy
tắc để tránh mắc lỗi trong lúc viết. Bộ nhớ Ram có đòa chỉ từ 0x0C đến 0x4F, bao
gồm 68 ố nhớ 8 bit. Việc xác đònh vò trí của RAM cũng được thực hiện thông qua
thanh ghi GPR
I.2.1. Các thanh ghi SFR
Đây là các thanh ghi có chức năng đặc biệt, chiếm 12 ô nhớ đầu tiên trong các bank

0 và bank 1.
Trang14_56
Phần I: Giới thiệu về PIC16F84
Hình I-8: Tổ chức bộ nhớ PIC16F84
I.2.2. Bộ đếm chương trình
Bộ đếm chương trình (PC ) là một thanh ghi 13 bit, nó chứa đòa chỉ của các
lệnh cần thực thi. Nó được xác đònh bằng cách kết hợp của thanh ghi 5 bit
PCLATCH cho 5 bit cao cả đòa chỉ với thanh ghi 8 bit PCL cho 8 bit thấp của đòa
chỉ.
Trang15_56
Phần I: Giới thiệu về PIC16F84
Bằng cách tăng dần nội dung của PC, vi điều khiển sẽ từng bước thực hiện
các lệnh có trong chương trình.
I.2.3. Lập trình cho vi điều khiển
Để lập trình vào bộ nhớ chương trình,vi điều khiển phải được set ở chế độ làm
việc đặc biệt, cụ thể khi đó chân MCLR sẽ được nối với áp 13,5V, và nguồn cung
cấp phải ổn đònh. Bộ nhớ chương trình có thể được lập trình nối tiếp sử dụng 2 chân
“ data / clock “.
I.2.4. Các kiểu đònh đòa chỉ
Đòa chỉ ô nhớ trong RAM có thể được truy xuất bằng hai cách:
_Đònh đòa chỉ trực tiếp.
_Đònh đòa chỉ gián tiếp.
I.3. Các cơ chế ngắt
Ngắt là một đặc tính của vi điều khiển mà cho phép nó đáp ứng được với
những sự kiện tại lúc nó xảy ra, và xác đònh xem vi điều khiển sẽ làm gì tiếp theo
sau đó. Đây là một chức năng vô cùng quan trọng, bởi vì nó tạo nên sự gắn kết
giữa vi điều khiển với thế giới xung quanh nó. Thông thường thì ngắt sẽ làm ngưng
chương trình đang thực hiện, còn gọi là chương trình nền, và thực hiện tiếp chương
trình ngắt tương ứng với nguyên nhân gây ra ngắt.
Hình I-9: Cấu trúc ngắt

I.3.1. Thanh ghi điều khiển ngắt (INTCON )
Trang16_56
Phần I: Giới thiệu về PIC16F84
Thanh ghi điều khiển ngắt (INTCON) được truy xuất bằng cách chọn bank
tương ứng. Nó có chức năng cho phép hay là cấm xảy ra ngắt, và xác đònh các
nguyên nhân ngắt.

Hình I-10: Thanh ghi điều khiển ngắt
 Bit 7_ GIE ( Global Interupt Enable bit ): Đây là bit cho phép hay không
cho phép ngắt.
Nếu GIE = 1: Các ngắt được cho phép.
Nếu GIE = 0: Các ngắt bò cấm.
 Bit 6 EEIE ( EPPROM Write Complete Interupt Enable bit ): Bit cho phép
ngắt gây ra tại nơi kết thúc của việc viết chương trình con vào EPPROM.
 Bit 5 TOIE ( TMR0 Overflow Interupt Enable bit ): Bit cho phép kích hoạt
ngắt gây ra bởi sự tràn của TMR0.
 Bit 4 INTE( INT External Interupt Enable bit ): Bit cho phép ngắt gây ra bởi
ngắt ngoài tạt chân RB0/INT.
 Bit 3 RBIE ( RB port change Interupt Enable bit ) Cho phép ngắt xảy ra khi
có sự thay đổi trạng thái trên các chân RB4 đến RB7.
 Bit 2 TOIF ( TMR0 Overflow Interupt Flag bit ): Cờ báo tràn của TMR0.
Bit này phải được xoá bằng phần mềm để có thể sử dụng ngắt này tiếp theo.
 Bit 1 INTF ( INT External Interupt Flag bit ): Cờ báo khi xảy ra ngắt ngoài.
 Bit 0 RBIF ( RB Port Change Interupt Flag bit ): Bit xác đònh sự thay đổi
trên các chân từ RB4 đến RB7. Nit này cũng cần phải được xoá trong chương
trình con ngắt để có thể đáp ứng các ngắt tiếp theo xảy ra sau đó.
 Ngắt ngoài trên chân RB0/INT của vi điều khiển
 Ngắt ngoài xảy ra trên chân RB0/INT
Được kích hoạt bởi tín hiệu cạnh lên ( nếu bit INTEDG = 1 trong thanh ghi
OPTION ) hoặc bởi tín hiệu cạnh xuống ( nếu INTEDG = 0 ). Khi có tín hiệu xuất

hi65n trên chân INT, bit INTF sẽ được set trong thanh ghi INTCON. Bit này phải
Trang17_56
Phần I: Giới thiệu về PIC16F84
được xoá đi trong chương trình phục vụ ngắt để ngắt không xảy ra nữa khi quay lại
chương trình chính.
Ngắt do sự tràn của bộ đếm TMR0
Khi TMR0 bò tràn, nó sẽ set bit TOIF lên 1. Đây là một chức năng quan
trọng, bởi vì nhiều vấn đề hóc búa trong thực tế có thể được giải quyết khi sử dụng
chức năng này. Ngắt do cơ chế này có thể được cho phép hay cấm bằng cách set/
reset bit T0IE.
 Ngắt do sự thay đổi trạng thái trên các chân RB4:RB7.
Sự thay đổi trạng thái trên các chân RB4: RB7 sẽ set bit RBIF (INTCON< 0
> ) lên 1, từ đó kích hoạt ngắt xảy ra.Để cho các chân này nhận được sự thay đổi
trạng thái của tín hiệu, thì chúng phải được đònh nghóa là các ngõ nhập. Nếu một
trong chúng được đònh nghóa là ngõ xuất, thì ngắt sẽ không xảy ra được. Nếu như ta
đònh nghóa tất cả chúng đều là ngõ xuất, thì trạng thái hiện thời của chúng sẽ được
so sánh với giá trò cũ mà được lưu ở lần đọc cuối cùng từ port B.
 Khởi tạo ngắt
Để có thể được chức năng ngắt của vi điều khiển, thì đầu tiên ta phải thực
hiện các lệnh khởi tạo ban đầu cho nó, bằng cách xác đònh các bit tương ứng trong
thanh ghi điều khiển ngắt INTCON.
I.4. Timer TMR0
Timer thường là phần gây khó hiểu của vi điều khiển, thế nhưng nếu tìm
hiểu kỹ càng, ta sẽ thấy nó giúp ích rất nhiều trong công tác lập trình cho vi điều
khiển. Một trong những ứng dụng của nó là thiết lập mối quan hệ giữa một đại
lượng thực, chẳng hạn như thời gian và một biến số mà biểu thò trạng thái của một
bộ đònh thời với vi điều khiển. Về mặt vật lý, timer là một thanh ghi 8 bit có giá trò
tăng dần từ 0 đến 255, và sau đó lại tiếp tục đếm lên từ 0. Sự tăng lên này được
thực hiện trên nền của các chương trình đang thực hiện của vi điều khiển. Nó đưa
ra cho người sử dụng nhiều giải pháp hữu hiệu trong việc giải quyết tối ưu vấn đề,

một trong chúng là tăng một biến số nào đó lên tại mỗi thời điểm timer bò tràn.
Như đã nói trên, PIC16F84 có một bộ timer 8 bit, và như vậy giá trò tối đa mà timer
đếm là 256 ( từ 0 đến 255 ).
Sau mỗi lần timer đếm đến 255, nó sẽ tự reset giá trò về 0 và bắt đầu đếm lại
từ đầu. Tại thời điểm timer chuyển giá trò từ 255 về 0, bit T0IF trong thanh ghi
INTCON sẽ được set lên 1. Nếu như các ngắt được cho phép xảy ra, thì con trỏ
chương trình sẽ nhảy đến chương trình con phục vụ ngắt. Bên cạnh việc nhận xung
nội, giá trò của timer cũng có thể tăng lên nhờ vào việc nhận xung từ bên ngoài
thông qua chân RA4/ TOCKI, và khi đó timer hoạt động như một bộ đếm.
Trang18_56
Phần I: Giới thiệu về PIC16F84
I.5. Thanh ghi OPTION
Hình I-11: Thanh ghi OPTION
 Bit 7 RBPU ( PORTB Pull up Enable bit )
Đây là bit kích hoạt hay tắt điện trở nội kéo lên có trong các chân của port
B.
1 = Kích hoạt
0 = Vô hiệu
 Bit 6 INTEDG ( Interupt Edge Select bit )
Nếu sự kiện ngắt được cho phép, bit này sẽ xác đònh xem ngắt xảy ra khi có
sự thay đổi của tín hiệu tại cạnh lên hay cạnh xuống.
1 = Cạnh lên
0 = Cạnh xuống
 Bit 5_ T0CS( TMR0 Clock Source Select bit )
Bit này sẽ xác đònh xem bộ đònh thời sẽ tăng tại mỗi ¼ xung kích của bộ dao
động, hoặc là tăng dần thông qua xung kích từ b6n ngoài thông qua chân RA4/
T0CKI.
1 = Xung từ bên ngoài
0 = ¼ xung bên trong
 Bit 4 T0SE ( TMR0 Source Edge Select bit )

Nếu sử dụng TMR0 như là một bộ đếm xung bên ngoài thông qua chân RA4 thì bit
này sẽ xác đònh xem bộ đếm sẽ tăng tại cạnh lên hay cạnh xuống của xung kích.
1 = Cạnh xuống
0 = Cạnh lên
 Bit 3 PSA ( Presscaler Assignment bit )
Bit này sẽ xác đònh tỉ lệ giữa TMR0 và WDT.
1 = Tỉ lệ gán cho WDT.
0 = Tỉ lệ được gán cho TMR0.
 Bit 0: 2 PS0, PS1, PS2 ( Presscaler Assignment bit )
Trang19_56
Phần I: Giới thiệu về PIC16F84
Trong trường hợp sử dụng xung thạch anh 4 MHz, thì một chu kỳ lệnh tốn
1us. Các bit PS0, PS1, PS2 sẽ xác đònh khoảng thời gian giữa mỗi lần tăng của
TMR0 hay WDT.


I.6. Bộ nhớ dữ liệu EEPROM
PIC16F84 có một bộ nhớ dữ liệu EPPROM với dung lượng 64 bytes có đòa chỉ
từ 00h đến 63h, có thể được ghi hay đọc. Đặc tính quan trọng nhất của nó chính là
dữ liệu cất trong nó không bò mất đi khi bò mất nguồn. Theo nhà sản xuất thì dữ
liệu có thể cất trong EPPROM sẽ được bảo toàn đến 40 năm.
Bộ nhớ EPPROM được đặt trong một vùng nhớ đặc biệt và có thể được truy
xuất thông qua các thanh ghi đặc biệt. Chúng là:
EEDATA chứa các dữ liệu đọc viết.
EEADR chứa đòa chỉ của phân vùng EPPROM cần truy xuất.
EECON1 chứa các bit điều khiển.
EECON2 thanh ghi này không tồn tại về mặt vật lý, mà nó dùng để bảo vệ
EPPROM khỏi những lỗi lập trình không đáng có.
I.6.1. Thanh ghi EECON1
Hình I-12: Thanh hi EECON1

 Bit 4 EEIF (EEPROM Write Operation Interupt Flag bit)
Bit dùng để báo cho vi điều khiển biết quá trình ghi dữ liệu vào EPPROM đã
kết thúc. Khi kết thúc quá trình ghi, thì bit này sẽ tự động set lên 1. Người lập trình
Trang20_56
Phần I: Giới thiệu về PIC16F84
cần phải xoá bit này băng phần mềm để nó có thể nhận biết được một sự kết thúc
của việc ghi tiếp theo.
1 = Ghi kết thúc
0 = Ghi chưa xong, hoặc chưa bắt đầu ghi
 Bit 3 WRERR (Write EPPROM Error Flag )
Báo lỗi nếu gặp trong quá trình ghi vào EPPROM. Bit này chỉ được set lên khi
quá trình ghi vào EPPROM bò ngắt bởi một tín hiệu reset hoặc bò tràn WDT khi
WDT được kích hoạt.
1 = Có lỗi xảy ra
0 = Không có lỗi
 Bit 2 WREN ( EPPROM Write Enable bit ):
Bit cho phép ghi vào EPPROM. Nếu bit này không được set lên thì vi điều
khiển sẽ không cho phép ghi vào EPPROM.
 Bit 1 WR (Write Control bit ):
Việc set bit này lên sẽ khởi tạo việc ghi dữ liệu từ thanh ghi EEDATA đến
một đòa chỉ cụ thể thông qua thanh ghi EEDR.
1 = Khởi tạo ghi
0 = Không khởi tạo
 Bit 0 RD ( Read Control bit ):
Bit dùng để điều khiển việc khởi tạo quá trình chuyển dữ liệu từ một đòa chỉ
đã được đònh nghóa trong EEDR đến thanh ghi EEDATA.
1 = Khởi tạo
0 = Không khởi tạo



Trang21_56
Phần II: Lập trình hợp ngữ cho PIC16F84
Phần II: LẬP TRÌNH HP NGỮ CHO PIC16F84
II.1. Giới thiệu:
Khả năng giao tiếp là một điều rất quan trọng trong mọi lónh vực. Tuy nhiên,
điều đó chỉ có thể thực hiện được khi hai bên giao tiếp biết cùng một ngôn ngữ.
Với quy tắc trên thì con người và vi điều khiển cũng có thể giao tiếp với nhau.
Ngôn ngữ mà vi điều khiển và con người dùng để giao tiếp gọi là hợp ngữ. Tên “
Hợp Ngữ “ không có ý nghóa gì sâu xa, nó tương tự như tên các ngôn ngữ khác như
“ Tiếng Anh “ hay “ Tiếng Pháp “. Nói chính xác hơn thì hợp ngữ chỉ là giải pháp
trung gian, bởi vì chương trình viết bằng hợp ngữ phải được dòch sang mã nhò phân
để mà vi điều khiển có thể hiểu được. Hợp ngữ và trình biên dòch hợp ngữ là hai
khái niệm khác nhau. Hợp ngữ là ngôn ngữ dùng để viết chương trình cho vi điều
khiển, còn trình biên dòch hợp ngữ là chương trình trên máy tính cá nhân mà nó
dòch chương trình viết bằng hợp ngữ sang mã nhò phân, chương trình mà đã được
dòch sang mã nhò phân thì được gọi là ngôn ngữ máy.
II.1.1. Biểu diễn số trong trình biên dòch
Trong hợp ngữ MPLAB, các số có thể biểu diễn dưới dạng thập phân, thập
lục phân, hoặc nhò phân.. Chúng ta sẽ minh hoạ điều này với số 240:
.240 ;Decimal
0xF0 ;Thập lục phân
B’11110000’ ;nhò phân
Số thập phân được bắt đầu bằng một dấu chấm, số thập lục phân được bắt đầu
bằng 0x, và số nhò phân bắt đầu bằng chữ b với dấu nháy đơn.
II.1.2. Các yếu tố của hợp ngữ:
Các yếu tố của hợp ngữ gồm có:
 Nhãn
 Lệnh
 Toán tử
 Các chỉ dẫn

 -Lời chú thích
 Nhãn:
Nhãn biểu thò đòa chỉ của lệnh theo sau. Khi có sự rẽ nhánh đến lệnh này,
nhãn được dùng trong trường toán hạng của lệnh rẽ nhánh hoặc nhảy.
 Mã gợi nhớ lệnh:
Trang22_56
Phần II: Lập trình hợp ngữ cho PIC16F84
Mã gợi nhớ lệnh hoặc chỉ dẫn của trình hợp ngữ theo sau trường nhãn. Cách
thức mà chúng ta viết lệnh được gọi là cú pháp. Trong ví dụ sau, chúng ta có thể
nhận ra lỗi trong khi viết bởi vì lệnh movlp và gotto không tồn tại trong vi xử lý
PIC16F84.
Lệnh viết đúng:
Movlw H’01FF’
Goto Start
Lệnh viết sai:
Movlp H’01FF’
Gotto Start
 Toán hạng:
Toán hạng theo sau mã gợi nhớ. Toán hạng chứa đòa chỉ hoặc dữ liệu mà
lệnh sẽ sử dụng. Nói cách khác, toán hạng là nhân tố cho lệnh đang thực thi.
Chúng thường là các thanh ghi, biến hoặc hằng.
 Lời chú thích:
Lời chú thích là một chuỗi ký tự mà người lập trình viết để làm cho chương
trình rõ ràng. Nó được đặt sau lệnh và được bắt đầu bằng dấu chấm phẩy(;).
 Chỉ dẫn:
Lời chỉ dẫn thì tương tự như một lệnh, nhưng nó không giống như một lệnh
mà nó phụ thuộc vào kiểu vi điều khiển, và nó biểu diễn đặc tính của hợp ngữ. Lời
chỉ dẫn luôn luôn được cho ý nghóa thông qua biến và thanh ghi. Ví dụ như LEVEL
có thể là sự chỉ đònh cho biến trong RAM ở tại đòa chỉ 0Dh. Bằng cách này, biến ở
tại đòa chỉ đó có thể được truy xuất thông qua lời chỉ dẫn LEVEL. Điều này sẽ dễ

hơn cho người lập trình khi phải nhớ đòa chỉ 0Dh chứa đựng thông tin LEVEL.
II.2. Tập lệnh của PIC:
Tập lệnh của PIC được xây dựng trên cơ sở ngôn ngữ Assemble. Tuy nhiên để
người dùng dễ dàng tiếp cận và giúp cho quá trình lập trình trở nên đơn giản hơn,
tập lệch của PIC được tối thiểu hoá còn 35 lệnh. Nhưng không vì ít lệch hơn tập
lệnh của các họ vi điều khiển khác mà khả năng ứng dụng của PIC bò hạn chế.
Theo như nhà sản xuất Microchip

thì tập lệnh của PIC có thể đáp ứng được tất cả
các ứng dụng mà các họ vi điều khiển khác có thể làm được. Và thựcï tế cho thấy
trong quá trình lập trình cho PIC bạn sẽ thấy việc lập trình sẽ rất dễ dàng hơn các
họ vi điều khiển khác và chưa thấy một hạn chế về giải thuật nào gây ra từ tập
lệnh. Bên cạnh đó, với sự hỗ trợ của lập trình dưới dạng Macro, việc lập trình trở
nên nhẹ nhàng hơn và khả năng mở rộng ứng dụng là rất lớn.
Sau đây sẽ liệt kê các lệnh của họ PIC
 Movlw
Dạng lệnh: Movlw K
Hoạt động:
Trang23_56
Phần II: Lập trình hợp ngữ cho PIC16F84
Ghi hằng số K vào thanh ghi W
Giá trò của K từ 0 đến 255
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2
 Movwf
Dạng lệnh: Movwf f
Hoạt động:
Nội dung của thanh ghi W được chép sang thanh ghi F
Giá trò của f từ 0 đến 127

Không tác động lên cờ
Số chu kỳ:1
Số byte: 2
 Movf
Dạng lệnh: Movf f, d
Hoạt động:
Nội dung của thanh ghi f được lưu trữ vào thanh ghi d
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 Clrw
Dạng lệnh: Clrw
Hoạt động:
Xoá thanh ghi W
Tác động lên cờ :Z
Số chu kỳ: 1
Số byte: 2
 Clrf
Dạng lệnh: Clrf f
Hoạt động:
Xoá thanh ghi f
Thanh ghi f có giá trò từ 0 đến 127
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 Swapf
Dạng lệnh: Swapf f, d
Hoạt động:
Nibbles thấp và nibbles cao của thanh ghi f được hoán đổi vò trí cho nhau.
Trang24_56

Phần II: Lập trình hợp ngữ cho PIC16F84
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2

 Addlw
Dạng lệnh: Addlw K
Hoạt động:
Nội dung của thanh ghi W được cộng với hằng số tám bit K, kết quả lưu vào
thanh ghi W
Tác động lên cờ:C,DC,Z
Số chu kỳ:1
Số byte: 2
 Addwf
Dạng lệnh: Addwf f,d
Hoạt động:
(W) + (f) => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ: C,DC,Z
Số chu kỳ:1
Số byte: 2
 Sublw
Dạng lệnh: Sublw K
Hoạt động:
K-(W) => W
Hằng số K có giá trò tứ 0 đến 255

Tác động lên cờ:C,DC,Z
Số chu kỳ:1
Số byte: 2
 Subwf
Dạng lệnh: Subwf f,d
Hoạt động:
(F) –(w) => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Trang25_56

×