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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Trang 3

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.

Trang 4

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

Trang 5

LỜI CẢM ƠN 3

LỜI GIỚI THIỆU 4

Trang 6

Phần IV: ỨNG DỤNG 35

Trang 7

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

Trang 8

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

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:

Trang 9

Hình I-3: Hình dáng bên ngoài PIC16f84

• 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 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.

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.

Trang 10

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

Trang 11

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.

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,

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

Trang 12

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.

Trang 13

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

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

Trang 14

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

0 và bank 1.

Trang 15

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ỉ.

Trang 16

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 )

Trang 17

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.

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 đó.

Đượ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

Trang 18

đượ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.

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.

Trang 19

I.5 Thanh ghi OPTION

Hình I-11: Thanh ghi OPTION

Đâ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

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( TMR0Clock 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 )

Trang 20

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

Trang 21

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

Trang 22

Phần II: LẬP TRÌNH HỢP 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:

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 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

Trang 23

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ý

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

Hoạt động:

Trang 24

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

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

Hoạt động:

Xoá thanh ghi W Tác động lên cờ :Z

Số chu kỳ: 1 Số byte: 2

Clrf

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

Trang 25

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

Tác động lên cờ:C,DC,Z

Số chu kỳ:1

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

Hằng số K có giá trị tứ 0 đến 255 Tác động lên cờ:C,DC,Z

Số chu kỳ:1

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

Trang 26

Tác động lên cờ:C,DC,Z

Số chu kỳ:1

Hằng số K có giá trị tứ 0 đến 255

Số chu kỳ:1

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ờ :Z

Số chu kỳ:1 Số byte: 2

Iorlw

Hoạt động:

Hằng số K có giá trị tứ 0 đến 255

Hằng số K có giá trị tứ 0 đến 255

Số chu kỳ:1

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

Trang 27

Số chu kỳ:1 Số byte: 2

XORLW

Hoạt động:

Hằng số K có giá trị tứ 0 đến 255

Hằng số K có giá trị tứ 0 đến 255 Tác động lên cờ :Z

Số chu kỳ:1

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ờ :Z

Số chu kỳ:1

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ờ :Z

Số chu kỳ:1

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

Trang 28

Giá trị của thanh ghi F từ 0 đến 127 Tác động lên cờ :Z

Số chu kỳ:1 Số byte: 2

RLF

Dạng lệnh: RLF f,d Hoạt động:

Dich thanh ghi F sang trai 1 bit thông qua cờ c 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

Số chu kỳ:1 Số byte: 2

Dạng lệnh: RRF f,d Hoạt động:

Dich thanh ghi F sang phải 1 bit thông qua cờ C 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

Số chu kỳ:1 Số byte: 2

Dạng lệnh: COMF f,d Hoạt động:

Lấy bù nội dung của thanh ghi F.

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

Số chu kỳ:1 Số byte: 2

Hoạt động:

Ngày đăng: 25/08/2012, 10:23

Hình ảnh liên quan

Hình I-1: Sơ đồ khối PIC - PIC 16F84 và một số ứng dụng.doc

nh.

I-1: Sơ đồ khối PIC Xem tại trang 7 của tài liệu.
Hình I-2: Cấu trúc Havard và Vo n- Neumann - PIC 16F84 và một số ứng dụng.doc

nh.

I-2: Cấu trúc Havard và Vo n- Neumann Xem tại trang 8 của tài liệu.
Hình I-3: Hình dáng bên ngoài PIC16f84 - PIC 16F84 và một số ứng dụng.doc

nh.

I-3: Hình dáng bên ngoài PIC16f84 Xem tại trang 9 của tài liệu.
Hình I-4: Mạch tạo xung dùng thạch anh - PIC 16F84 và một số ứng dụng.doc

nh.

I-4: Mạch tạo xung dùng thạch anh Xem tại trang 10 của tài liệu.
I.1.5. Bộ xử lý trung tâm (CPU) - PIC 16F84 và một số ứng dụng.doc

1.5..

Bộ xử lý trung tâm (CPU) Xem tại trang 10 của tài liệu.
Hình I-6: Cấu trúc PORTB &amp; TRISB - PIC 16F84 và một số ứng dụng.doc

nh.

I-6: Cấu trúc PORTB &amp; TRISB Xem tại trang 12 của tài liệu.
Hình I-7: Cấu trúc PORTA &amp; TRISA - PIC 16F84 và một số ứng dụng.doc

nh.

I-7: Cấu trúc PORTA &amp; TRISA Xem tại trang 13 của tài liệu.
Hình I-8: Tổ chức bộ nhớ PIC16F84 - PIC 16F84 và một số ứng dụng.doc

nh.

I-8: Tổ chức bộ nhớ PIC16F84 Xem tại trang 15 của tài liệu.
Hình I-9: Cấu trúc ngắt - PIC 16F84 và một số ứng dụng.doc

nh.

I-9: Cấu trúc ngắt Xem tại trang 16 của tài liệu.
Hình I-11: Thanh ghi OPTION - PIC 16F84 và một số ứng dụng.doc

nh.

I-11: Thanh ghi OPTION Xem tại trang 19 của tài liệu.
Hình I-12: Thanh hi EECON1 - PIC 16F84 và một số ứng dụng.doc

nh.

I-12: Thanh hi EECON1 Xem tại trang 20 của tài liệu.
I.6. Bộ nhớ dữ liệu EEPROM - PIC 16F84 và một số ứng dụng.doc

6..

Bộ nhớ dữ liệu EEPROM Xem tại trang 20 của tài liệu.
Hình III-13: Chương trình nạp chip ICProg - PIC 16F84 và một số ứng dụng.doc

nh.

III-13: Chương trình nạp chip ICProg Xem tại trang 33 của tài liệu.
Bảng III-1: Chuyển đổi tương ứng Com25 và Com9 - PIC 16F84 và một số ứng dụng.doc

ng.

III-1: Chuyển đổi tương ứng Com25 và Com9 Xem tại trang 34 của tài liệu.
Bảng ứng dụng chip vi điều khiển PIC16F84 gồm 3 modul: điều khiển LED; điều khiển LCD và điều khiển động cơ Servol. - PIC 16F84 và một số ứng dụng.doc

ng.

ứng dụng chip vi điều khiển PIC16F84 gồm 3 modul: điều khiển LED; điều khiển LCD và điều khiển động cơ Servol Xem tại trang 35 của tài liệu.
Trên hình vẽ, encoder dùn g2 kênh ,2 diode quang đặt ở vị trí ngược nhau về tín hiệu (khi diode 1 thấy thì diode 2 không thấy và ngược lại) - PIC 16F84 và một số ứng dụng.doc

r.

ên hình vẽ, encoder dùn g2 kênh ,2 diode quang đặt ở vị trí ngược nhau về tín hiệu (khi diode 1 thấy thì diode 2 không thấy và ngược lại) Xem tại trang 37 của tài liệu.
LCD (liquid Crystal Display)_màn hình tinh thể lỏng, đây là phương pháp - PIC 16F84 và một số ứng dụng.doc

liquid.

Crystal Display)_màn hình tinh thể lỏng, đây là phương pháp Xem tại trang 39 của tài liệu.
Bảng IV-2: chức năng của các chân LCD - PIC 16F84 và một số ứng dụng.doc

ng.

IV-2: chức năng của các chân LCD Xem tại trang 40 của tài liệu.
Sơ đồ kết nối được thể hiện như hình dưới đây: - PIC 16F84 và một số ứng dụng.doc

Sơ đồ k.

ết nối được thể hiện như hình dưới đây: Xem tại trang 41 của tài liệu.
Hình IV-16: Sơ đồ kết nối LC D4 bit - PIC 16F84 và một số ứng dụng.doc

nh.

IV-16: Sơ đồ kết nối LC D4 bit Xem tại trang 42 của tài liệu.
Bảng IV-3: Các màn hình hiển thị trong tình huốn g1 - PIC 16F84 và một số ứng dụng.doc

ng.

IV-3: Các màn hình hiển thị trong tình huốn g1 Xem tại trang 43 của tài liệu.
Hình IV-19: Sơ đồ mạch tích hợp - PIC 16F84 và một số ứng dụng.doc

nh.

IV-19: Sơ đồ mạch tích hợp Xem tại trang 46 của tài liệu.
Hình IV-20: Mạch điện thực tế - PIC 16F84 và một số ứng dụng.doc

nh.

IV-20: Mạch điện thực tế Xem tại trang 47 của tài liệu.
movlw 1 h; xoá màn hình Call LCDins - PIC 16F84 và một số ứng dụng.doc

movlw.

1 h; xoá màn hình Call LCDins Xem tại trang 49 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan