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

BÀI TIỂU LUẬN NGHIÊN CỨU VI ĐIỀU KHIỂN PIC 16F84A

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 (882.73 KB, 24 trang )

Khi đọc qua tài liệu này, nếu phát hiện sai sót hoặc nội dung kém chất lượng
xin hãy thông báo để chúng tôi sửa chữa hoặc thay thế bằng một tài liệu
cùng chủ đề của tác giả khác.
Bạn có thể tham khảo nguồn tài liệu được dịch từ tiếng Anh tại đây:
/>Thông tin liên hệ:
Yahoo mail:
Gmail:


1

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM
KHOA CÔNG NGHỆ ĐIỆN TỬ


BÀI TIỂU LUẬN
NGHIÊN CỨU VI ĐIỀU KHIỂN PIC 16F84A

Giảng viên hƣớng dẫn : Huỳnh Minh Ngọc
Sinh viên thực hiện

: Lê Tấn Anh(09286231)
Hứa Thị Hằng(09286371)

Lớp

: ĐHĐT5TN

ĐHCNTPHCM,30 tháng 03 năm 2012



2

PIC 16F84A
I.

GIỚI THIỆU KHÁI QUÁT VỀ PIC 16F84A.
1. Các đặc tính 16F84A.
Chỉ dùng 35 câu lệnh để viết tất cả các chƣơng trình nguồn cho PIC. Tất cả các
lệnh chỉ dùng một chu kì máy, còn các câu lệnh nhảy dùng hai chu kì máy. Tốc độ
vận hành dùng xung nhịp là 20MHz và chu kì máy 200ns.
Bộ nhớ chƣơng trình (Flash Program Memory) 1024 word, với bộ nhớ này có thể
xóa ghi đƣợc 1000 lần, chiều rộng câu lệnh là 1 word 14 bit. Xử lý dữ liệu ở dạng
8 bit tƣơng ứng với 1 byte.
Bộ nhớ RAM là 68 byte.
Bộ nhớ dữ liệu EEPROM 64 byte. Với bộ nhớ dữ liệu này có thể xóa và ghi dữ
liệu đến 1000000 lần.
PIC 16F84A có 15 thanh ghi chuyên dụng SFR (Specia Function Register) trong
RAM, với ngăn xếp có chiều sâu là 8 lớp, trong đó gồm 4 dạng ngăn, có 13 chân
dùng xuất nhập dữ liệu, trong đó port A có 5 chân và port có 8 chân. Dòng vào ra
ở mức 25mA, với nguồn nuôi trong khoảng 2V đến 5.5V. Có bộ định thời Timer
0 (TMR0) dùng thanh đếm xung 8 bit, nên tối đa có thể đếm đƣợc 256 nhịp.
PIC có thể lập trình và nạp ngay trên bo. Có nhiều tùy chọn cho mạch dao động
tạo xung nhịp chính.
Có mode truy cập theo dịa chỉ trực tiếp, gián tiếp và địa chỉ tƣơng đối. Có mode
bảo vệ mã (Code Protection), và mode sleep dùng tiết kiệm điện năng khi ở trạng
thái chờ.
PIC có chức năng WDT- bộ đếm xung thời gian
2. Ý nghĩa các chân của PIC 16F84A.
Chân OSC1/CLKIN : là chân ngõ vào của mạch dao động thạch anh, dùng để
định tần số xung nhịp, và cũng là ngõ vào của mạch tạo xung nhịp.

OSC2/CLKOUT : là chân ngõ vào của dao động thạch anh, đồng thời cũng là
ngõ ra của xung nhịp.
MCLR (Master Clear) : là chân reset, tác dụng của chân là trả lệnh về vị trí
ban đầu và xác lập lại vị trí ban đầu cho các thanh ghi có chức năng đặc biệt.
Với lệnh tác dụng ở mức thấp.


3

Port A(RA0, RA1, RA2, RA3,RA4) : là cổng xuất nhập, có 5 bit.
RA4/TOCKI : là chân đa nhiệm, vừa là chân xuất nhập vừa là chân lấy xung
cho bộ định thời timer 0. Và chân này có cực máng để hở.
Port B từ RB0 đến RB7 : là cổng xuất nhập dữ liệu, có 8 bit.
RB0/INT : đây là chân đa nhiệm, ngoài là chân xuất nhập dữ liệu nó còn là
chân phát động theo ngắt ngoài, nó có thể đƣợc lập trình để có trở kháng lớn
dùng làm ngõ vào, nhập trạng thái ngoiaf vào PIC.
RB4, RB5 : là chân xuất nhập, đồng thời là chân phát động ngắt theo sự thay
đổi trên các chân này.
RB6 : là chân xuất nhập, và cũng là chân phát động ngắt theo sự thay đổi của
chân, có thể lập trình để để phát xung nhịp cho truyền PIC ở dạng nối tiếp.
RB7 : là chân xuất nhập, phát động ngắt theo sự thay đổi trên chân này, bên
cạnh đó nó còn có thể lập trình để cho trao đổi dữ liệu.
VSS : là chân nối masse để lấy dòng.
VDD : là chân nối với nguồn dƣơng từ 2V đến 5.5V.


4

3. Các khối chức năng(Kết cấu bên trong) của PIC 16F84A.
Sơ đồ khối của PIC 16F84A đƣợc trình bày nhƣ hình bên dƣới, nó đƣợc sử dụng

dây chung 14 hàng và kết cấu phân ly dây chung số liệu 8 bít làm cho nó có thể
tiến hành đồng thời viếc đọc và nhận các lệnh cũng nhƣ chấp hành lệnh, nâng cao
đƣợc tốc độ vận hành.


5

SƠ ĐỒ KHỐI KẾT CẤU BÊN TRONG PIC 16F84
Bộ nhớ iê
chƣơng
trình EEPROM

Bộ đếm số chƣơng
trình
EEPROM

1K×14
Kho chứa cấp 0

RAM

EEDATA

Bộ nhớ văn kiện

Data Memerg
64x8

13-bit
36x8


EEADR
Bộ nhớ lệnh

Bộ phục
dụng địa chỉ
TMR 0
FSR 1eg

STATUS 1eg

Phục vụ cấp điện

Lệnh dịch mã
và điều khiển

Bộ phục dụng

Làm trễ dao động

Đầu I/O

ALU
Làm trễ cấp điện
Bộ phát sinh
gốc thời
gian chuẩn

Bộ nhớ W
WDT



6

Flash Program Memory: có dung lƣợng 1024 thanh nhớ, loại rộng 14 bit
(1Kx14). Ở đây ta cất giữ các mã lệnh của chƣợng trình nguồn, nó đƣợc truy
cập theo mã địa chỉ có trong thanh ghi PC (Program Counter). Mã lệnh xuất ra
trên thanh ghi Instruction Register.
Thanh ghi Program Counter: dùng ghi các địa chỉ của mã lệnh của bộ nhớ
Flash ROM. Trong hoạt động, khi dùng lệnh nhảy đến các chƣơng trình con,
thì địa chỉ hiện tại sẽ đƣợc tạm thời cất giữ trong các thanh ghi ngăn xếp, và
chiều sâu ngăn xếp có 8 lớp (8 Level Stack).
Ngăn xếp (Level Stack): dùng lƣu giữ các mã địa chỉ của chƣơng trình chính
khi trong chƣƣơng trình có dùng lệnh nhảy. Cất vào địa chỉ ngăn xếp ta dùng
lệnh Push và lấy địa chỉ ra từ ngăn xếp có thể dùng lệnh Pop.
Thanh ghi mã lệnh( Instruction Register ): ở ngõ ra, mã lệnh có thể chuyển
đến khối giải mã Instruction Decode & Control để tạo ra lệnh điều khiển. Hay
chuyển đến khối xử lý địa chỉ đa kênh Address Multiplex để truy cập các
thanh nhớ trong bộ nhớ RAM (File Register).
Khối giải mã (Instruction Decode & Control): xác định tính năng điều khiển
trong câu lệnh, nó tác dụng vào khối định trạng thái cho IC. Khối này gồm có
các chức năng: Power-up Timer, Oscillator Start-up Timer, Power-on Reset,
Watchdog Timer.
Power-up Timer dùng kích hoạt IC theo đồng hồ Timer.
Oscillator Start-up Timer: để làm mạch dao động theo đồng hồ Timer.
Watchdog Timer: bộ định thời dùng vào ra mode theo đồng hồ Timer, là tính
năng dùng tiết kiệm điện.
Timing Generation: là khối tạo ra xung nhịp chính, tần số của xung nhịp
thƣờng định theo thạch anh. PIC16F84A có thể hoạt động với xung nhịp
20MHz.

Đồng hồ Timer 0 (TMR0) dùng một thanh đếm 8 bit để tạo ra chức năng điều
khiển theo thời gian. Nó có thể đếm tối đa 256 xung nhịp, khi thanh đếm đầy
bit báo tràn sẽ chuyển lên mức 1.
I/O Port (gồm Port A có 5 chân và Port B có 8 chân) dùng xuất nhập dữ liệu.
Nhiều chân còn có tính đa nhiệm, nên ngoài chức năng xuất nhập dữ liệu nó


7

còn có các chức năng khác, nhƣ nhập xung đếm trên chân RA4/TOCKI, ngắt
trên chân RB0/INT…
EEPROM Data Memory (bộ nhớ dữ liệu): đây là bộ nhớ xóa ghi đƣợc trên 1
triệu lần, EEPROM có 64 thanh nhớ, với độ rộng 8 bit (1 byte). Để truy cập
dữ liệu trong các thanh nhớ, mã địa chỉ sẽ chuyển vào thanh ghi EEADR và
dữ liệu xuất nhập trên thanh ghi EEDATA.
Bộ nhớ RAM File Register: đây là bộ nhớ RAM có 68 thanh nhớ, với độ rộng
8 bit, trong đó có 12 thanh nhớ chuyên dụng (SFR, Special Function
Register), các thanh nhớ còn lại đƣợc dùng làm thanh nhớ phổ dụng (GPR,
General Purpose Register). Các thanh nhớ chuyên dụng xác định hoạt động
của IC, các thanh nhớ phổ dụng dùng làm thanh nhớ tạm. Khi IC mất nguồn,
các dữ liệu trong các thanh nhớ RAM đều bị xóa sạch. Ngƣời ta truy cập dữ
liệu trong các thanh nhớ của RAM với bó nối mã địa chỉ RAM Addr (7 đƣờng)
và xuất nhập dữ liệu trên bó nối Data Bus (8 đƣờng).
Thanh ghi FSR (File Select Register) dùng truy tìm dữ liệu theo mã địa chỉ
gián tiếp (Indirect Address), dùng bó nối Indirect Addr (7 đƣờng).
Thanh ghi STATUS (Status Register) dùng chọn định các điều kiện cho IC.
MUX (Multiplex) là khối xử lý đa nhiệm, nó cung cấp mã cho khối xử lý ALU.
ALU (Arithmetic & Logic Unit) là khối thực hiện các phép toán số học và
logic.
Thanh ghi W (Work Register) là thanh ghi tích lũy, nó cất giữ các kết quả của

khối toán ALU.
4. Bộ nhớ Flash Program Memory- EEPROM.
Đây là loại bộ nhớ ROM xóa ghi bằng mức áp cao Vpp, nên nội dung ghi trong
các thanh nhớ sẽ không bị xóa dù IC không đƣợc cấp điện. Các thanh nhớ này có
thể cho xóa ghi lại nhiều lần, dung lƣơng của bộ nhớ là 64 byte, số lần xóa ghi bị
hạn chế. Vì vậy bộ nhớ EEPROM không đƣợc dùng làm bộ nhớ tạm thời nhƣ
RAM, bộ nhớ EEPROM chỉ đƣợc dùng để ghi các dữ liệu ít phải thay đổi.


8

Thanh nhớ có địa chỉ 0000h (Reset Vector) là vị trí nhảy đến chức năng Reset.
Khi IC vừa đƣợc cấp điện, hay do tác dụng của bộ định thời và bất cứ lý do nào
khác, tác dụng Reset sẽ cho chƣơng trình khởi đầu trở lại từ địa chỉ 0000h.
Thanh nhớ 0004h (Interrupt Vector) dùng cho chức năng ngắt.
Thanh ghi 2007h (Configuration word) dùng để xác định hoạt động cơ bản của
PIC.
5. Bộ nhớ RAM.


9

Bộ nhớ RAM của PIC 16F84A về chức năng có thể chia thành loại bộ nhớ thông
dụng và bộ nhớ chuyên dùng. Về không gian thì có thể chia thành hai băng, đó là
băng 0 và băng 1.
6. Các thanh ghi.
a. Thanh ghi trạng thái STATUS.
Thanh ghi có địa chỉ là 03h.

Bit 7: trong PIC 16F84A không dùng bít này.

Bit 6-5: đƣợc dùng để chọn bank. Thật ra thì bit 6 luôn để mức 0 và chỉ
thay đổi bit 5, nếu xác lập trị 00 là chọn bank 0, còn xác lập trị 01 là chọn
băng 1.
Bit 4: Bit=’1’: sau khi cấp nguồn dùng lệnh CLRWDT hay SLEEP.
Bit=’0’: thì lệnh WDT diễn ra.
Bit 3: Bit=’1’: sau cấp nguồn hay sau lệnh CLRWDT.
Bit=’0’: thực hiện lệnh SLEEP.
Bit 2: Bit=’1’: khi kết quả phép toán bằng 0.
Bit=’0’: khi kết quả phép toán khác 0.
Bit 1: Bit=’1’: khi xuất hiện tràn số ở bit thấp thứ 4.
Bit=’0’: không có bit tràn ở bit thấp thứ 4.
Bit 0: Bit=’1’: khi xuất hiện tràn số ở thanh ghi.
Bit=’0’: không có số tràn ở thanh ghi.
b. Thanh ghi OPTION.

Bit 7: Bit cho phép điện trở kéo lên ở portB
Bit=’1’: không cho treo các chân ở PortB.
Bit=’0’: cho treo các chân ở PortB.
Bit 6: Bit chọn cạnh ngắt.
Bit=’1’: ngắt cạnh lên của xung trên chân RB0/INT.


10

Bit=’0’: ngắt cạnh xuống của xung trên chân RB0/INT.
Bit 5: Bit nguồn tín hiệu TMR0.
Bit=’1’: mạch làm việc với xung vào trên chân RA4/TOCKI.
Bit=’0’: mạch dùng xung nội.
Bit 4: Bit chọn cạnh tín hiệu TMR0.
Bit=’1’: cạnh từ mức cao xuống mức thấp ở chân RA4/TOCKI.

Bit=’0’: cạnh từ mức thấp lên mức cao trên chân RA4/TOCKI.
Bit 3: Bit gán bộ chia số tỉ lệ trƣớc.
Bit=’1’: cho xác lập trƣớc với mạch WDT.
Bit=’0’: cho xác lập trƣớc với mạch TMR0.
Bit 2-0:Dùng để chọn tốc độ cho TMR0 và WDT.
PS2_PS1_PS0

Tốc độ TMR0

Tốc độ WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011


1:16

1:8

100

1:32

1:16

101

1:64

1:32

110

1:128

1:64

111

1:256

1;128

c. Thanh ghi INTCON.


Bit 7: Bit xác định điều kiện mở hay tắt tất cả các ngắt.
Bit=’1’: cho dùng tất cả các ngắt.
Bit=’0’: tắt tất cả các ngắt.
Bit 6: Bit cho phép tắt mở dạng ngắt khi ghi xong vô EEPROM.
Bit=’1’:cho mở ngắt khi ghi xong vô EEPROM.
Bit=’0’:cho tắt ngắt.


11

Bit 5: Bit cho phép ngắt TMR0 tràn.
Bit=’1’: cho phép ngăt.
Bit=’0’: cấm ngắt.
Bit 4: Bit cho phép ngắt trên RB0/INT.
Bit=’1’: cho phép ngắt.
Bit=’0’: cấm ngắt.
Bit 3: Bit cho phép ngắt thay đổi trên B4,B7 của port B.
Bit=’1’: cho phép ngắt.
Bit=’0’: cấm ngắt.
Bit 2: Là bit cờ chỉ ra TMR0 bị tràn để tạo ra lệnh ngắt. Bit này đƣợc xóa
bằng phần mềm.
Bit=’1’: chỉ ra TMR0 tràn.
Bit=’0’: không tràn.
Bit 1: Là bít cờ ngắt RB0/INT mà chỉ ra sự thay đổi trên RB0.
Bit=’1’: chỉ ra sự thay đổi diễn ra.
Bit=’0’: chỉ ra không có sự thay đổi diễn ra.
Bit 0: Là bit cờ ngắt thay đổi ở chân B4 và chân B7 ở port B.
Bit=’1’: chỉ ra một trong 4 chân ngõ vào B4 đến B7 có sự thay đổi
trạng thái. Bit này đƣợc xóa bằng phần mềm.

Bit=’0’: chỉ ra không có sự thay đổi.

II.ỨNG DỤNG CỦA PIC 16F84A
Các chip đơn thƣờng dùng là mạch tích hợp số TTL,CMOS,nắm vững về nó không phải là dễ
dàng vì vấn đề là ở hỗ các chip đơn thông minh,không những chúng ta phải nắm vững phần cứng mà còn
phải nắm vững phần mềm.Khi thiết kế phần mềm cần phải có nhiều sang tạo.
Do PIC 16F84 có EEPROM cóthể viết và xóa để lƣu chƣơng trình cho nên nó đặc biệt thích hợp
với một số ứng dụng thƣờng phải thay đổi giá trị.PIC 16F84 thích hợp cho những ngƣời mới học lập
trình vì nó có thể viết và xóa dễ dàng.Ngoài ra trong bộ nhớ EEPROM 64x8 không chỉ có chức năng bảo
vệ số liệu khi mất điện mà còn có tính bảo mật cao.
Nhƣ vậy trƣớc hết chúng ta sẽ tìm hiểu về các tập lệnh của 16F84A.
Một lệnh hợp ngữ đầy đủ gồm 4 phần:
+Nhãn(LABEL)


12
+Mã lệnh (CODE)
+Toán hạng(OPERAND)
+Ghi chú(COMMENT)
Ví dụ:
LOOPA

MOVF

TMR0,W

;chuyển TMR0 vào thanh ghi W

Trong ví dụ trên:
LOOPA (nhãn);MOVF(mã lệnh);TMR0,W (toán hạng với TMR0 là nguồn,W là đích);ghi chú là

phần giải thích sau dấu “;”.
1.Tập lệnh của PIC 16F84A
a)Lệnh bit
-BCF:xóa bit trong ô nhớ F.
-BSF:bật bit lên 1 trong ô nhớ F.
Vd:BSF

6,4;bật bit 4 của ô nhớ 6

-BTFSC:kiểm tra bit trong ô nhớ và bỏ qua lệnh kế tiếp nếu bit bị xóa.
Vd:BTFSC

3,2;kiểm tra bit 2(cờ Z) của thanh ghi STATUS

●Lệnh này sẽ bỏ qua nếu cờ Z=0
-BTFSS:kiểm tra bit trong ô nhớ và nhảy qua lệnh kế nếu bit đƣợc bật lên 1.
b)Lệnh byte
-ADDWF:Cộng nội dung thanh ghi W vào ô nhớ F
Vd:ADDWF

7;cộng W với ô nhớ 7.Kết quả đặt vào ô nhớ 7.

Vd:ADDWF

7,W;nhƣ trên nhƣng kết quả đƣợ lƣu vào thanh ghi W.

-ANDWF:Nội dung của thanh ghi W đƣợc logic AND với ô nhớ F.Lệnh này ảnh hƣởng
đến cờ DC và cờ Z
Vd:ANDWF


12h,W;W AND 12H.

Vd:ANDWF

12H;nhƣ trên nhƣng kết quả lƣu vào 12H.

-CLRF:Lệnh này xóa 8 bit trong ô nhớ F.Trạng thái ảnh hƣởng đến cờ Z.
Vd:CLRF

5;xóa ô nhớ 5.


13
-CLRW:xóa nội dung thanh ghi W
-COMF:Lấy bù 8 bit trong ô nhớ F.
Vd:COMF

6;đảo bit bù ô nhớ 6

-DECF:Nội dung của ô nhớ F giảm đi 1.Lệnh này có tác dụng khi đếm về 0.
Vd:DECF

12;giảm ô nhớ 12 đi 1,kết quả lƣu tại ô nhớ 12

Vd:DECF

12,W;nhƣ trên nhƣng kết quả lƣu ở W.

-DECFSZ:Nội dung ô nhớ F đƣợc giảm đi 1 và lệnh kế đƣợc bỏ qua nếu kq=0’
Vd:DECFSZ


12;Lệnh này thƣờng dùng để tạo trễ.

-INCF:Cộng 1 vào ô nhớ F.Giá trị này sau đó đƣợc so sánh với cái khác để xem giá tri
tổng đã đạt đƣợc chƣa.
-INCFSZ:Cộng 1 vào ô nhớ F.Nếu kết quả bằng 0 thì bỏ qua lệnh kế tiếp.
-IORWF:Nội dung thanh ghi tích lũy W đƣợc logic OR với ô nhớ F.
-MOVF:Nội dung của ô nhớ F đƣợc di chuyển vào thanh ghi tích lũy Ƣ.Từ đó dữ liệu có
thể chuyển đến port ngõ ra.Lệnh này ảnh hƣởng đến cờ Z.
-MOVWF:Nội dung của thanh ghi W chuyển đến ô nhớ F.
-NOP(No Operation):không làm gì cả nhƣng để tạo trễ 1 chu kỳ máy.Lệnh này có tác
dụng cho các trì hõan nhỏ.
-RLF:Nội dung của ô nhớ F đƣợc quay trái 1 bit thông qua cờ Z.Dịch đi 1 bit nghĩa là số
đó nhân 2.Lệnh này có ích khi lên xuống nhị phân.
Vd:RLF

12,W;dịch trái ô nhớ 12,kết quả lƣu ở ô thanh ghi W.

-RRF:Nội dung của ô nhớ F đƣợc quay phải 1 bit thông qua cờ nhớ C.
-SUBWF:Trừ W từ F.Nghĩa là lấy F-W.
Vd:SUBWF
Lƣu ý:

14,W;ô nhớ 14-W,kết quả lƣu ở W.

Nếu W>F thì cờ C=0 nghĩa là kết quả âm.
Nếu WNếu Ƣ=F thì cờ Z=1.Tạng thái này ảnh hƣởng đến cờ Z.
-SWAPF:4 bit thấp và 4 bit cao đƣợc hóan đổi cho nhau.



14
-XORWF(Exclusive Or):Nội dung W đƣợc EXOR.Nếu 1 ngõ vào trên port chỉ báo nhiệt
độ giống nhƣ thanh ghi W thì kết quả là 0 và cờ Z=1.
Lƣu ý:

Không thể EXOR ngõ vào trực tiếp của 1 ô nhớ mà phải làm điều này bằng cách nạp ô nhớ vào
thanh ghi W trƣớc.trạng thái này ảnh hƣởng đến cờ Z.

Nhƣ trong phần này ta đã thấy thanh ghi tích lũy W quan trọng nhƣ thế nào trong hoạt động của Vi điều
khiển.Dữ liệu không thể di chuyển trực tiếp từ A đến B mà phải thông qua W (A đến W,W đến B).
2.Các tác vụ số và điều khiển
-ADDLW:Cộng 1 số với thanh ghi W.
-ANDLW:Nội dung thanh ghi W đƣợc AND với số 8 bit.Kết quả đặt vào thanh ghi W.
-CALL:gọi chƣơng trình con trong chƣơng trình chính.Lệng này tốn 2 chu kỳ máy.
-CLRWDT:xóa bộ đếm xung thời gian.
-GOTO:Lệnh nhảy không điều khiển tới 1 vị trí cụ thể trong chƣơng trình.
-IORLW:Nội dung của W đƣợc OR với 1 số.
-MOVLW:số 8 bit di chuyển trực tiếp vào W.Lệnh này ảnh hƣởng đến cờ Z.
-RETFIE:Trở về từ ngắt,
-RETLW:Lệnh đƣợc dùng ở cuối chƣơng trình con để trở về chƣơng trình chính.Giá trị
số đƣợcđặt vào W.Lệnh này có ích trong bảng tìm kiếm.
-RETURN:Lệnh này dùng trở về chƣơng trình con.
-SLEEP:khi thực hiện lệnh này chip VĐK đặt ở chế độ nghỉ.Bộ đếm xung thời gian và bộ
chia tần bị xóa.
-SUBLW:Nội dung thanh ghi đƣợc trừ đi 1 số.
-EXORLW:Nội dung của thanh ghi W đƣợc EXOR với 1 số 8 bit.Nếu kết quả là 0 thì nội
dung là gắn kết.

III.MỘT SỐ VÍ DỤ VỀ PIC 16F84A

VÍ DỤ 1:ĐẾM SỰ KIỆN.
-Xét ví dụ đếm sự kiện số ngƣời đi vào tòa nhà, xe đi vào bãi đậu xe,nếu
bị mất nguồn thì dữ liệu vẫn đƣợc lƣu trữ.Nhƣ vậy,khi ta chuyển mạch ta phải
chuyển dữ liệu EEPROM trƣớc đó vào ô nhớ COUNT.


15

-Nút nhấn đƣợc mô phỏng quá trình đếm và 8 LED ở port B hiển thi số
đếm ở dạng nhị phân.Tác dụng của công tắc là chống dội.
Một vài điểm trƣớc khi xem xét chƣơng trình:
-EEROM phải đƣợc RESET trƣớc khi bắt đầu.Việc này có thể thực hiện bằng cách ghi
00H đến địa chỉ 0H.Điều này đƣợc thực hiện bằng lệnh sau:
ORG

2100h

DE

00h

Trong đó:2100h là địa chỉ của bộ nhớ dữ liệu đầu tiên,nghĩa là 00H.DE định nghĩa dữ liệu
EEPROM .Vì vậy khi khởi động với địa chỉ 00h và 2100h là địa chỉ đầu tiên.Dữ liệu có thể ghi
vào EEPROM bằng lệnh VIEW.
-Ở đây ta lấy ví dụ về bộ nhớ 8 bit nên số lần phải nhấn nút khi có ngƣời đi qua là 28
=256 lần,sau đó sẽ đƣợc RESET lại.Với bộ nhớ 10 bit cũng tƣơng tự nhƣng một số thông số sẽ
đƣợc thay đổi tƣơng ứng.
Lƣu đồ có thể đƣợc minh họa nhƣ sau:
CHUYỂN DỮ LIỆU EEPROM VÀO Ô NHỚ
COUNT


NÚT NHẤN ĐƢỢC
NHẤN?
1=YES,0=NO
000=

INCF COUNT(Bằng lệnh)

CHUYỂN COUNT ĐẾN PORT B

CHUYỂN COUNT ĐẾN EEPROM


16

MÃ CHƢƠNG TRÌNH EEPROM:
Chƣơng trình hoàn chỉnh EEDATAWR.ASM đƣợc minh họa ở dƣới:
;EEDATAWR.ASM
;PHẦN TƢƠNG ĐƢƠNG
;TMR0 ở ô nhớ 1

TMR0

EQU

1

OPTION_R

EQU


81H ;thanh ghi OPTION_R ở ô nhớ 81H

PORTA

EQU

5

;PORTA ở ô nhớ 5

PORTB

EQU

6

;PORTB ở ô nhớ 6

TRISA

EQU

85H ;thanh ghi TRISA ở ô nhớ 85H

TRISB

EQU

86H ;thanh ghi TRISB ở ô nhớ 86H


STATUS

EQU

3

;thanh ghi STATUS ở ô nhớ 3

ZEROBIT

EQU

2

;cờ ZEROBIT ở ô nhớ 2

CARRY

EQU

0

;cờ nhớ ở ô nhớ 0

EEADR

EQU

9H


EEADATA

EQU

8H

EECON1

EQU

8H

EECON2

EQU

9H

RD

EQU

0

WR

EQU

1


WREN

EQU

2

COUNT

EQU

0CH

;*****************************************************************************
LIST

P=16F84A

;dùng PIC 16F84A

ORG

2100H

;địa chỉ bắt đầu là 2100H


17

DE


00H

;

ORG

0

;địa chỉ bắt đầu là 0

GOTO

START

;nhảy đến bƣớc START

;*****************************************************************************
;CẤU HÌNH BIT
_CONFIG

H’3FF0’

;*****************************************************************************
;CHƢƠNG TRÌNH CON
;TRÌ HOÃN 1 GIÂY
DELAY1

CLRF


TMR0

;bắt đầu TMR 0

LOOPB

MOVF

TMR0,W

;chuyển TMR 0 vào thanh ghi W

SUBLW

.3

;lấy thời gian trừ W

BTFSS

STATUS,ZEROBIT;kiểm tra TIME-W

GOTO

LOOPB
RETLW

;thời gian khác 0.1 giây
0


;trở về khi thời gian bằng 0.1 giây

MOVLW

0

;đọc EEDATA từ EEADR

MOVWF

EEADR

BSF

STATUS,5

BSF

EECON1,RD

BCF

STATUS,5

MOVF

EEDATA,W

RETLW


0

;ĐẶT EEDATA VÀO Ô NHỚ COUNT
READ

;GHI COUNT VÀO EEDATA


18

WRITE

WRDONE

BSF

STATUS,5

BSF

EECON1,WREN

BCF

STATUS,5

MOVF

COUNT,W


MOVWF

EEDATA

MOVLW

.0

MOVWF

EEADR

BSF

STATUS,5

MOVLW

55H

MOVWF

EECON2

MOVLW

AAH

MOVWF


EECON2

BSF

EECON1,WR

BTFSC

EECON1,WR

GOTO

WRITE

BCF

EECON1,WREN

BCF

STATUS,5

RETLW

.0

;*****************************************************************************
;PHẦN CẤU HÌNH
START


BSF

STATUS,5

;STATUS ở BANK 1

MOVLW

B’00011111’

;5 bit của PORTA là ngõ vào

MOVWF

TRISA

MOVLW

B’00000000’

;

MOVWF

TRISB

; PORTB là ngõ ra


19


MOVLW

OPTION_R

;

BCF

STATUS,5

;xóa thanh ghi STATUS

CLRF

PORTA

;xóa PORTA

CLRF

PORTB

;xóa PORTB

CLRF

COUNT

;xóa bộ đếm


;*****************************************************************************
;CHƢƠNG TRÌNH CHÍNH BẮT ĐẦU
CALL

READ

;chuyển dữ liệu EEPROM
;vào COUNT

PRESS

RELEASE

MOVF

COUNT,W

;

MOVWF

PORTB

; hiển thị COUNT trƣớc đó

BTFSC

PORTA,0


;đợi nhấn nút

GOTO

PRESS

;nút đƣợc nhấn

CALL

DELAY1

;trì hõan 0.1 giây

BTFSS

PORTA,0

;đợi nút nhấn nhả

GOTO

RELEASE

;nút nhấn đƣợc nhả

CALL

DEAY1


;trì hõan 0.1 giây

INCF

COUNT

;cộng 1 vào COUNT

MOVF

COUNT,W

;chuyển COUNT vào W

MOVWF

PORTB

;chuyển COUNT đến portB

CALL

WRITE

;chuyển 0 đến EEPROM

GOTO

PRESS


;trở về đợi nhấn nút

END;lệnh END kết thúc chƣơng trình


20

VÍ DỤ 2:CHƢƠNG TRÌNH CHỚP TẮT LED:LED SÁNG TRÌ HÕAN 1 GIÂY,LED TẮT TRÌ
HOÃN 1 GIÂY.
Lƣu đồ:

Bắt đầu

Bật LED B=1

Trì hoãn

Tắt LED B=0

Trì hoãn

Kết thúc


21

;*****************************************************************************
;KHAI BÁO TƢƠNG ĐƢƠNG
TMR0


EQU

1

;TMR0 ở ô nhớ 1

OPTION_R

EQU

81H

;thanh ghi OPTION_R ở ô nhớ 81H

ZEROBIT

EQU

2

;cờ ZEROBIT ở ô nhớ 2

COUNT

EQU

0

;bắt đầu đếm ở ô nhớ 0


;*****************************************************************************
LIST

P=16F84A

;dùng PIC 16F84A

ORG

0

;bắt đầu tại ô nhớ 0

GOTO

START

;đến START

;*****************************************************************************
;CẤU HÌNH BIT
_CONFIG

H’3FF0’

;*****************************************************************************
;CHƢƠNG TRÌNH CON
;TRI HOAN 0.5 GIAY
DELAY1


CLRF

TMR0

LOOPB

MOVF

TMR0,W

SUBLW

.16

BTFSS

STATUS,ZEROBIT

GOTO

;

LOOPB
RETLW

0

;*****************************************************************************
;PHẦN CẤU HÌNH
START


BSF

STATUS,5

;bật thanh ghi STATUS


22

MOVLW

B’00011111’

;

MOVWF

TRISA

;

MOVLW

B’00000000’

;

MOVWF


TRISB

;

MOVLW

OPTION_R

;

BCF

STATUS,5

;xóa STATUS

CLRF

PORTA

;xóa PORTA

CLRF

PORTB

;xóa PORTB

;*****************************************************************************
;CHƢƠNG TRÌNH CHÍNH BẮT ĐẦU

BEGIN

BSF

PORTB,0

;bật bit PORTB

CALL

DELAY5

;trì hõan 0.5 giây

BCF

PORTB,0

;xóa bit của PORTB

CALL

DELAY5

;trì hõan 0.5 giây

GOTO

BEGIN


;quay trở lại ban đầu

END;kết thúc chƣơng trình
Ở trên là hai ví dụ đƣợc áp dụng nhiều,khi muốn thời gian LED sang và LED tắt lâu hơn thì ta
thay đổi giá trị SUBLW trong phần tạo trễ cho phù hợp.

IV.KẾT LUẬN.
Một bộ vi điều khiển là hệ thống điều khiển máy tính trên chip đơn.Nó bao gồm
nhiều mạch điện tử đƣợc tích hợp bên trong.Nó có thể giải mã các lệnh đã đƣợc viết và
chuyển chúng thành tín hiệu điện.Vi điều khiển các vòng lệnh và chạy từng lệnh một.Ví
dụ VĐK có thể đo nhiệt độ của phòng và bật lò sƣởi nếu phòng lạnh.


23

Ngày nay VĐK đang có sự thay đổi về kết cấu mạch điện tử bên trong.Thay vì
những dây dẫn cứng của các cổng logic đƣợc nối với nhau để thực hiện các chức
năng.Danh sách các lệnh cho VĐK gọi là chƣơng trình.
Các lệnh trong bài tiểu luận là những lệnh cơ bản giúp chúng ta hiểu về tác dụng
của chúng.Ban đầu chúng chỉ có vài lệnh.Sau đó chúng dần dần tăng lên và ngày càng
hoàn thiện hơn.
Bởi vi điều khiển có nhiều công dụng,dễ sử dụng và giá thành rẻ nên sẽ thay thế
cho các mạch điện tử phức tạp.
Bài tiểu luận có tham khảo cuốn sách:
PIC IN PRACTISE của tác giả DW SMITH.
ELECTRONIC FAN (Xuất bản 7/2003).




×