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.
1
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.
2
GIỚI THIỆU VỀ PIC16F84
Tổng quan:
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 Error! No text of specified style in document 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.
3
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 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 Error! No text of specified style in document 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”.
4
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.
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:
Hình Error! No text of specified style in document 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.
5
• Chân 18: RA1, chân số 1 của port A.
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.
Hình Error! No text of specified style in document 4: Mạch tạo xung dùng thạch
anh
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.
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ố
6
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.
Thanh ghi trạng thái status
Hình Error! No text of specified style in document 5: Thanh ghi trạng thái
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.
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 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.
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.
8
Hình
Error!
No text
of
specified style in document 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.
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.
9
Hình
Error!
No text
of
specified style in document 7: Cấu trúc PORTA & TRISA
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
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
10
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.
Hình Error! No text of specified style in document 8: Tổ chức bộ nhớ PIC16F84
11
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ỉ.
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.
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 “.
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.
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.
12
Hình Error! No text of specified style in document 9: Cấu trúc ngắt
Thanh ghi điều khiển ngắt (INTCON )
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 Error! No text of specified style in document 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.
13
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 đượ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
14
Để 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.
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.
Thanh ghi OPTION
Hình Error! No text of specified style in document 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 )
15
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 )
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.
16
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ó.
Thanh ghi EECON1
Hình Error! No text of specified style in document 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
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.
17
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
18