Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Monday, January 13, 2014

Bạn tự tìm hiểu về PIC: Viết chương trình cho PIC16F84A

CHI TIẾT CHỦ ĐỀ
Bạn tự tìm hiểu về PIC: Viết chương trình cho PIC16F84A


 
Bài đang soạn: VKH


PIC (Peripheral Interface Controller) là IC lập trình dùng để điều khiển các thiết bị tự động, với các bộ nhớ chương trình (Flash ROM) và bộ nhớ đệm (SRAM). Có thể xem PIC là một máy tính nhỏ, do trong PIC có bộ phận xử lý các mã lệnh, quen gọi là các chương trình đã được Bạn cho cài đặt vào bộ nhớ Flash ROM, có bộ nhớ SRAM, như vậy có thể xem PIC là loại IC đơn phiến, nghĩa là một mình nó có thể đủ cấu tạo thành một thiết bị vi điều khiển hoàn chỉnh. Chúng ta biết bộ nhớ trong PIC thường có dung lượng nhỏ (dung lượng lớn nhỏ còn tùy theo loại PIC). Tần số xung nhịp của PIC, tối đa thường là 20MHz và dung lượng bộ nhớ thường từ 1K đến 4K.



Trong bài viết này tôi sẽ viết về PIC16F84A, bài viết gồm có 3 phần:


Phần 1: Giới thiệu khái quát về  PIC16F84A
Phần 2: Trình bày  các ứng dụng của PIC16F84A qua một ứng dụng cụ thể.
Phần 3: Nói về  trình viết chương trình và giới thiệu về hộp nạp chương trình chi các IC họ PIC.


 

Phần 1:

Giới thiệu khái quát về  PIC16F84A 

PIC16F84A có các đặc tính sau:

* Chỉ dùng 35 câu lệnh để viết tất cả các chương trình nguồn cho PIC16Fxx.
* Tất cả các câu lệnh chỉ dùng 1 chu kỳ máy, các câu lệnh nhẩy dùng 2 chu kỳ máy.
* Tốc độ vận hành: dùng xung nhịp là 20MHz và chu kỳ máy là 200ns.
* Có bộ nhớ chương trình (Flash Program Memory) 1024 Word (1K x 14).
* Bộ nhớ RAM (RAM File Rigister) 68 byte.
* Bộ nhớ dữ liệu EEPROM 64 byte.
* Chiều rộng câu lệnh là 1 Word 14 bit.
* Xử lý dữ liệu dạng 8 bit (1 byte).
* Có 15 thanh ghi chuyên dụng SFR (Special Function Register) trong RAM.
* Dùng ngăn xếp có chiều xâu 8 lớp.
* Có mode truy cập theo địa chỉ trực tiếp, gián tiếp và địa chỉ tương đối.
* Có 4 dạng ngắt:
Ngắt ngoài trên tín hiệu trên chân RB0/INT.
Ngắt theo bit báo tràn của Timer 0.
Ngắt theo sự thay đổi trên các chân RB4, RB5, RB6, RB7.
Ngắt khi ghi xong dữ liệu vào bộ nhớ EEPROM. 


* Có 13 chân dùng xuất nhập dữ liệu (Ở cảng Port A có 5 chân và Port B có 8 chân).
* Có khả năng cấp dòng chảy vào/chảy ra đủ lớn: 25mA, đủ cấp cho các Led chiếu sáng.
* Có 1 đồng hồ Timer 0 (TMR0), dùng thanh đếm xung 8 bit, nên đếm được tối đa 256 nhịp.
* Với bộ nhớ chương trình Flash Program Memory, có thể xóa ghi được 1000 lần.
* Với bộ nhớ EEPROM có thể xóa ghi dữ liệu đến 1000000 lần.
* Dữ liệu cất giữ trong bộ nhớ EEPROM có thể an toàn tên 40 năm.
* Có thể lập trình và nạp ngay trên bo (ICSP, In-Circuit Serial Programming) chỉ dùng 2 chân.
* Có chức năng POR (Power On Reset), PWRT (Power-up Timer), OST (Oscillator  Start-up Timer).
* Chức năng Watch-dog (WDT) làm việc với mạch dao động RC riêng trong IC.
* Có mode bảo vệ mã. (Code Protection).
* Có mode Sleep dùng tiết kiệm điện năng khi ở trạng thái chờ.
* Có nhiều tùy chọn cho mạch dao động tạo xung nhịp chính.

* Làm việc với mức nguồn nuôi trong khoảng 2V đến 5.5V.


Hình 1: Cho thấy công dụng của các chân trên IC.
 

Trong hình này:


* OSC1/CLKIN là chân ngả vào của mạch dao động thạch anh. Định tần cho xung nhịp và cũng là một ngả vào của mạch tạo xung nhịp.

* OSC2/CLKOUT là chân ngả ra của mạch dao động thạch anh và là ngả ra của xung nhịp.


* /MCLR (Master Clear) là chân Reset, tác dụng của lệnh Reset là trả chương trình về địa chỉ 0000h. Lệnh tác dụng ở mức áp thấp.


* RA0, RA1, RA2, RA3, là các chân xuất nhập của bến cảng Port A.


* RA4/TOCKI là chân  đa nhiệm, vừa làm chân xuất nhập của Port A và lại là chân lấy xung cho thanh đếm của đồng hồ Timer 0 (ở chân này có cực Drain để hở).


* RB0/INT là chân đa nhiệm, vừa làm chân xuất nhập của Port B và lại là chân phát động theo ngắt ngoài. Các chân của Port B 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 ngoài vào PIC.  
  
* RB1, RB2, RB3, là các chân xuất nhập của bến cảng Port B.


* RB4, RB5, là các chân xuất nhập của Port B và phát động ngắt theo sự thay đổi trên các chân này.


* RB6, là 1 chân xuất nhập của Port B và phát động ngắt theo sự thay đổi trên chân này. Nó còn có thể lập trình để dùng chân này phát xung nhịp dùng cho công năng truyền dữ liệu nối tiếp.


* RB7, là 1 chân xuất nhập của Port B và phát động ngắt theo sự thay đổi trên chân này. Nó còn có thể lập trình để dùng chân này trao đổi dữ liệu dùng cho công năng truyền dữ liệu nối tiếp.


* VSS là chân nối masse để lấy dòng (ở đây là dòng điện tử).

* VDD là chân nối vào đường nguồn dương (từ 2V đến 5.5V).



Hình 2: Hình vẽ cho thấy các khối chức năng trong PIC16F84A



Flash Program Memory có dung lượng 1024 thanh nhớ, loại rộng 14 bit (1Kx14). Ở đây Bạn cất giữ các mã lệnh của chượng trình nguồn. Các mã lệnh đượ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 cho cất giữ trong các thanh ghi ngăn xếp, ở đây chiều xâu ngăn xếp chỉ có 8 lớp (8 Level Stack).


Ngăn xếp 8 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. Địa chỉ cất vào ngăn xếp có thể hiểu như dùng lệnh Push và địa chỉ lấy ra từ ngăn xếp có thể hiểu như dùng lệnh Pop.


Instruction Register là thanh ghi mã lệnh, ở 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).


Instruction Decode & Control là khối giải mã, 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 dùng kích hoạt mạch dao động theo đồng hồ Timer.


Power-on Reset dùng “phục nguyên” các thanh ghi trong PIC khi nó mới được cấp nguồn.


Watchdog Timer dùng vào ra mode “Chó giữ nhà” theo đồng hồ Timer, một 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.



Các bên cảng 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 công năng xuất nhập dữ liệu nó còn có các công năng khác. Như công năng nhập xung đếm trên chân RA4/TOCKI, công năng ngắt trên chân RB0/INT…






Bộ nhớ dữ liệu EEPROM Data Memory, đâ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 lvievj cho IC.


MUX (Multiplex) là khối xử lý đa nhiệm, nó cung cấp mã cho khối tính toán ALU.


ALU (Arithmetic & Logic Unit) là khối thực hiện các phép toán số học và logic. Không có bộ phận này, IC không được gọi là IC máy tính.



Thanh ghi W reg (Work Register) là thanh ghi công tác, nó cất giữ các kết quả của khối toán ALU.

 
 
Hình 3: Tìm hiệu bộ nhớ Flash Program Memory (tức bộ nhớ EEPROM).
 

Sau đây chúng ta tìm hiểu cấu trúc các thanh ghi, bộ nhớ trong PIC16F84A:

Flash Memory được dùng để lưu giữ các mã lệnh của chương trình nguồn. Ở đây 1 Word là 14 bit. Nó có 1024 thanh nhớ (quen gọi là 1Kword). Khi IC bị mất nguồn, các dữ liệu cất trong các thanh nhớ sẽ không bị xóa mất. Số lần xóa ghi của loại bộ nhớ này không quá 1000 lần. Chúng ta biết mỗi thanh nhớ sẽ được xác đ?nh theo một mã địa chỉ. Địa chỉ khởi đầu là 0000h.

Ngươi ta tổ chức các thanh nhớ trong bộ nhớ Flash ROM như sau:

Thanh nhớ có địa chỉ 0000h (Reset Vector) là vị trí nhẩy đến của chức năng Reset. Khi IC vừa được cấp điện, hay do tác dụng của công năng Watch-dog 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. Khi dùng ngắt theo Timer 0, khi thanh đếm tràn, bit báo tràn chuyển lên mức 1, chương trình sẽ nhẩy về địa chỉ này. Tác dụng của các ngắt ngoài cũng khiến chương trình nhẩy đến địa chỉ 0004h này.

Thanh ghi 2007h (Configuration word) dùng để xác đ?nh hoạt động cơ bản của PIC, trong vùng này có các bit dùng xác đ?nh cho mode Power-up Timer, xác đ?nh cho mode Watch-dog Timer cũng dùng để chọn đ?nh điều kiện làm việc của mạch dao động. Các thanh nhớ bên trên vùng này (Test/Configuration Memory Space) đã được dùng cho công năng “cài đặt chương trình” vào bộ nhớ. Bạn không thể truy cập được các thanh nhớ trong vùng nhớ này.

Bộ nhớ EEPROM (Electrically Erasable Programmable Read Only Memory). Đâ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ùng 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 (tức có 64 thanh nhớ), số lần xóa ghi bị hạn chế khoảng 1 triệu lần. Vì lý do này, bộ nhớ EEPROM không được dùng làm bộ nhớ tạm thời như RAM (cần số lần xóa ghi không giới hạn), bộ nhớ EEPROM chỉ được dùng để ghi các dữ liệu ít phải thay đổi. Dữ liệu ghi trong bộ nhớ này có thể tồn tại đến trên 40 năm.



Hình 4: Tìm hiểu bộ nhớ SRAM
 
* Các thanh nhớ của bộ nhớ File Register của RAM (Random Access Memory). Ở đây, ngươi ta dùng cách chuyển dãi nhớ ( chuyển bank) cho bộ nhớ này. Mỗi dãi nhớ có dung lương là 80 byte (80 thanh nhớ với mã địa chỉ là 00h đến 4fh). Trong IC vi điều khiển đ?n phiến PIC16F84A có 2 dãi nhớ (có hai bank, bank 0 và bank 1). Bộ nhớ này chia ra làm 2 phần:

Ở phần đầu, ngươi ta lấy 12 byte (tức 12 thanh nhớ có địa chỉ từ 00h đến 0bh) của mỗi dãi dùng làm các thanh nhớ đặc dụng (SFR, Special Function Register) và dùng nó để đặt bit 0/1 xác đ?nh các trạng thái vận hành của PIC. Đ?nh điều kiện cho việc xuất nhập trên các bến cảng và còn đ?nh các điều kiện khác nữa.

Có 16 thanh ghi khác nhau trong vùng chứa các thanh ghi đặc dụng (11 thanh trong bank 0 và 5 thanh trong bank 1). Nội dung trong mỗi thanh ghi này dùng quản lý sự vận hành của PIC. Mặc dù có tổng cộng 24 thanh ghi lưu trữ (file register), nhưng 7 trong chúng nằm chung trong cả hai bank. 

Còn lại 68 byte (tức 68 thanh nhớ, có địa chỉ từ 0ch đến 4fh),  từ byte thứ 13 trở lên, được gọi là các thanh ghi phổ dụng (GPR, General Purpose Register), nó được dùng như các thanh nhớ tam thời dùng ghi các kết quả, các dữ liệu khi chương trình đang chạy.

Nội dung ghi trong các thanh ghi phổ dụng GPR đều giống nhau trong cả hai dãi, do vậy việc dùng bit để chuyển bank 0 hay bank 1 cũng chỉ dùng được có 68 byte mà thôi (tức có 68 thanh nhớ thôi). Chúng ta biết, nội dung trong các thanh ghi phổ dụng sẽ bị xóa hết khi IC không được cấp điện. Với các thanh ghi này, số lần xóa ghi là không hạn chế.

Mỗi thanh nhớ đặc dụng SFR đều có các công năng chuyên dùng như sau:

INDFData memory contents by indirect addressing. Nội dung dữ liệu trong bộ nhớ xác đ?nh theo địa chỉ gián tiếp.
TMR0Timer counter. Thanh đếm của 8 bit của đồng hồ Timer 0.
PCLLow order 8 bits of program counter. 8 bit thấp trong thanh ghi Program counter.
STATUSFlag of calculation result. Các bit cờ dùng cho các phép toán.
FSRIndirect data memory address pointer. Thanh ghi con trỏ chỉ dữ liệu trong bộ nhớ theo mã địa chỉ gián tiếp.
PORT APORT A DATA I/O. Gồm 5 bit thấp dùng xác lập trạng thái bit trên bến cảng Port A.
PORT BPORT B DATA I/O. Gồm 8 bit dùng xác lập trạng thái bit trên bến cảng Port B.
EEDATAData for EEPROM. Thanh ghi dữ liệu dùng cho bộ nhớ EEPROM.
EEDRAddress for EEPROM. Thanh ghi địa chỉ dùng cho bộ nhớ EEPROM.
PCLATHWrite buffer for upper 5 bits of the program counter. Thanh ghi đệm dùng ghi 5 bit cao dùng cho thanh ghi PC.

INTCONInterruption control. Gồm 8 bit dùng xác đ?nh tính năng ngắt.
OPTIN_REGMode set. Gồm 8 bit dùng khai báo các mode cho PIC.
TRISAMode set for PORTA. Thanh ghi 5 bit dùng xác đ?nh hương chuyển dữ liệu cho Port A.
TRISBMode set for PORTB. Thanh ghi 8 bit dùng xác đ?nh hương dữ liệu cho Port B.
EECON1Control Register for EEPROM. Thanh ghi điều khiển việc ghi đọc cho bộ nhớ EEPROM.
EECON2Write protection Register for EEPROM. Thanh ghi 2 dùng điều khiển bộ nhớ EEPROM.



Hình 5:
 


Hình 6: Thanh ghi STAUS


Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi STATUS (có địa chỉ 03h, 83h).
 

Bit 7:              IRP: Register Bank Select bit (used for indirect addressing).
Bit dùng chọn dãi nhớ. Bit IRP không dùng với PIC16F84A. Sau lệnh Reset nó xác lập ở mức 0.

Bit 6-5:    RP1:RP0: Register Bank Select bits (used for direct addressing).
Các bit dùng để chọn dãi nhớ Bank 0 hay Bank 1.
        Khi xác lập trị 00 là chọn các thanh nhớ ở dãi 0 (Bank 0 có địa chỉ 00h – 7fh).
        Khi xác lập trị 01 là chọn các thanh nhớ ở dãi 1 (Bank 1 có địa chỉ 80h – ffh).
Mỗi dãi nhớ có 128 byte (thanh nhớ). Trong PIC16F84A chỉ dùng bit RP0, bit RP1 luôn đặt ở bit 0

Bit 4:             /TO: Time-out bit.
Bit báo thoát ra trạng thái Power-up, trạng thái Watch-dog, trạng thái Sleep.
                Được xác lập ở mức 1, sau Power-up, dùng lệnh CLRWDT hay lệnh SLEEP.
                Được xác lập ở mức 0, Khi thoát ra trạng thái WDT.

Bit 3:              /PD: Power-down bit
Bit báo trạng thái giảm mức nguồn.
                Được xác lập ở mức 1, sau Power-down hay sau lệnh CLRWDT.
                Được xác lập ở mức 0, sau chấp hành câu lệnh SLEEP.

Bit 2:              Z: Zero bit
Bit báo trạng thái 0.
                Được xác lập ở mức 1, khi ở khối toán cho kết quả là 0.
                Được xác lập ở mức 0, khi kết quả ở khối toán khác 0.

Bit 1:              DC: Digit carry/-borrow bit (for ADDWF and ADDLW  instructions)
                                (For borrow the polarity is reversed)
Bit xác lập trạng thái tràn trong phép toán cộng số (Trong câu lệnh ADDWF và ADDLW) hay số mượn trong phép toán trừ số.
                Được xác lập ở mức 1, khi xuất hiện tràn số ở bit thấp thứ 4.
                Được xác lập ở mức 0, khi không có số tràn ở bit thấp thứ 4.

Bit 0:              C: Carry/-borrow bit (for ADDWF and ADDLW  instructions)
Bit xác lập trạng thái tràn trong phép toán cộng (Trong câu lệnh ADDWF và ADDLW) hay số mượn trong phép toán trừ.
                Được xác lập ở mức 1, khi xuất hiện tràn số ở thanh ghi.
                Được xác lập ở mức 0, khi không có số tràn ở thanh ghi.



Hình 7: Thanh ghi OPTION
 
Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi OPTION-REG (có địa chỉ là 81h).



Bit 7:              -RBPU: PORT B Pull-up Enable bit
Bit xác đ?nh trạng thái treo của cảng Port B.
                Được xác lập ở mức 1, không cho treo các chân ở cảng Port B.
                Được xác lập ở mức 0, cho treo các chân của cảng Port B.

Bit 6:              INTEDG: Interrupt Edge Select bit
Bit dùng chọn cạnh của xung dùng cho chức năng ngắt.
                Được xác lập ở mức 1, phát động ngắt bằng cạnh lên của xung trên chân RB0/INT.
                Được xác lập ở mức 0, phát động ngắt bằng cạnh xuống của xung trên chân RB0/INT.

Bit 5:              T0CS: TMR0 Clock Source Select bit
Bit chọn nguồn xung cho mạch điện đồng hồ Timer 0.
                Được xác lập ở mức 1, mạch đồng hồ làm việc với xung vào trên chân RA4/T0CKI.
                Được xác lập ở mức 0, khi mạch điện đồng hồ dùng xung nội.

Bit 4:              T0SE: TMR0 Source Edge Select bit
Bit chọn cạnh của nguồn xung lấy vào mạch đếm của mạch điện đồng hồ Timer 0.
                Được xác lập ở mức 1, với cạnh từ mức cao xuống mức thấp trên chân RA4/T0CKI.
                Được xác lập ở mức 0, với cạnh từ mức thấp lên mức cao trên chân RA4/T0CKI.

Bit 3:              PSA: Prescaler Assignment bit
Bit xác đ?nh tính năng chọn đ?nh trược cho mạch điện Watch-dog và mạch điện đồng hồ Timer 0.
                Được xác lập ở mức 1, cho xác lập trược với mạch điện WDT (Watch-dog)
                Được xác lập ở mức 0, cho xác lập trược với mạch điện TMR0 (Timer 0)

Bit 2-0:    PS2:PS0: Prescaler Rate Select bits
Các bit dùng chọn tốc độ  cho Timer 0 và Watch-dog.
                Trị của 3 bit    Tốc độ với TMR0  Tốc độ của 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

  

 
Hình 8: Thanh ghi INTCON
 

Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi INTCON (cĩ địa chỉ l 0bh, 8bh).


Bit 7:               GIEGlobal Interrupt Enable bit.
Bit xác định điều kiện cho mở tất cả các ngắt hay tắt tất cả các ngắt.
                Được xác lập ở mức 1, cho dùng tất cả các ngắt.
                Được xác lập ở mức 0, cho tắt tất cả các ngắt.

Bit 6:              EEIE: EE Write Complete Interrupt Enable bit.
Bit cho php tắt mở dạng ngắt sau khi ghi xong vo bộ nhớ EEPROM.
                Đượcxác lập ở mức 1, cho mở ngắt khi ghi xong vo bộ nhớ EEPROM.
                Đượcxác lập ở mức 0, cho tắt ngắt ny.

Bit 5:              T0IE: TMR0 Overflow Interrupt Enable bit.
Bit cho tắt mở dạng ngắt theo bit bo trn của thanh đếm trong mạch điện đồng hồ Timer 0.
                Được xác lập ở mức 1, cho mở ngắt theo bit bo trn của mạch điện đồng hồ.
                Được xác lập ở  mức 0, cho tắt ngắt theo dạng ny.

Bit 4:              INTE: RB0/INT Interrupt Enable bit.
Bit cho tắt mở dạng ngắt ngồi trn chn RB0/INT.
                Được xác lập ở mức 1, cho mở ngắt ngồi với tín hiệu ngắt trn chn RB0/INT.
                Được xác lập ở mức 0, cho tắt ngắt theo dạng ny.

Bit 3:              RBIE: RB Port Change Interrupt Enable bit.
Bit cho tắt mở dạng ngắt khi chuyển đổi RB ở bến cảng Port B.
                Được xác lập ở mức 1, cho mở dạng ngắt ny.
                Được xác lập ở mức 0, cho tắt dạng ngắt ny.

Bit 2:              T0IF: TMR0 Overflow Interrupt Flag bit.
Bitxác định ngắt theo bit cờ trn của ngắt theo dạng trn của Timer 0.
                Được xác lập ở mức 1, khi TMR0 đ trn (Phải cho xĩa bằng phần mềm).
                Được xác lập ở mức 0, khi TMR0 chưa trn.

Bit 1:              INTF: RB0/INT Interrupt Flag bit.
Bitxác định ngắt theo bit cờ của dạng ngắt ngồi trn chn RB0/INT.
                Được xác lập ở mức 1, khi ngắt theo dạng RB0/INT xẩy ra.
                Được xác lập ở mức 0, khi ngắt theo dạng RB0/INT khơng xẩy ra.

Bit 0:               RBIF: RB Port Change Interrupt Flag bit.
Bit xác định ngắt theo bit cờ của dạng ngắt theo chuyển đổi ở bến cảng RB.
                Được xác lập ở mức 1, khi một trong RB7:RB4 thay đổi (phải xóa bằng phần mềm ).
                Được xác lập ở mức 0, khi không có thay đổi trạng thi ở RB7:RB4.



Hình 9: Thanh ghi EECON1
 


Hình 10:
 


Hình 11:
 


Hình 12:
 



Phần 2:


Trình bày  các ứng dụng của PIC16F84A

qua một ứng dụng cụ thể.


Hình mạch thực hành 1:

Trên cảng Port B, chúng ta gắn 8 Led trên các chân RB0 (chân số 6), RB1 (chân số 7), RB2 (chân số 8), RB3 (chân số 9), RB4 (chân số 10), RB5 (chân số 11), RB6 (chân số 12), RB7 (chân số 13).

Trên cảng Port A, chúng ta gắn các nút nhấn SW1 (chân 17), SW2 (chân 18), SW3 (chân 1), SW4 (chân 2), SW5 (chân 3).
 
IC PIC16F84A làm việc với chân 5 cho nối masse và chân 14 cho nối vào đường nguồn ổn áp 5V.

Để có xung nhịp chạy các chương trình dưới dạng các câu lệnh mà Bạn đã nạp vào bô nhớ EEPROM, Bạn cần có xung nhịp, tần số xung nhịp phụ thuộc vào thạch anh gắn trên chân 15, 16.

Chân số 4 là chân Reset, dùng trả trạng thái IC về vị trí khởi đầu, do IC làm việc ở mức áp cao, nên chân 4 Bạn cho nối vào đường nguồn 5V.

Hình mạch thực hành 2: Hình chụp cho thấy cách sắp xếp các linh kiện trên bản mạch lỗ, do mạch dùng linh kiện ít nên việc hàn ráp thủ công cũng rất đơn giản.


Hình mạch thực hành 3: Nếu Bạn muốn dùng mạch Reset ngoài, Bạn thêm nút nhấn và cho treo chân này lên mức áp cáo qua điện trở 10K. Mỗi khi Bạn muốn Reset chương trình, trả về trạng thái khởi đầu, Bạn nhấn nút Reset, cho chân 4 xuống mức áp thấp bằng cách cho nó nối masse.

Hình mạch thực hành 4: Muốn theo dõi mức áp trên các chân của cảng RA, RB, Bạn có thể dùng Led, ráp như sơ đồ hình vẽ, với cách ráp này, Led sẽ sáng với dòng điện chảy ra khi chân này chuyển xuống mức áp thấp, nếu nó ở mức áp cao, gần 5V thì Led sẽ mất dòng và không sáng.
Trong mạch Led sẽ sáng với dòng điện chảy ra, điện trở 560 dùng để hạn dòng. Trên cảng RB bạn có 8 chân và nếu lúc khởi tạo, Bạn định nó là 8 chân Output, như vậy Bạn có thể gắn 8 Led trên các chân này và dùng chương trình điều khiển nên tạo ra nhiều dạng nhấp nháy theo ý muốn của Bạn.

Hình mạch thực hành 5: Với các IC vi điều khiển, nó luôn cần có xung nhịp để chạy các câu lệnh, trong IC đã có mạch dao động tạo xung, tuy nhiên tần số xung nhịp thường cho lấy theo thạch anh bên ngoài gắn thêm trên 2 chân.

Mạch dao động tạo ra xung nhịp có tần số lấy theo thạch anh X1 (10MHz) trên chân 15, 16. Ở đây dùng 2 tụ nhỏ để bù nhiệt ổn tần.

Hình mạch thực hành 6: IC vi điều khiển thường làm việc ở những đường nguồn có độ ổn áp cao, do đó người ta thường dùng các IC ổn áp 3 chân để có mức volt ổn định. Ở đây dùng IC ổn áp dạng 3 chân họ 78xx. Để có mức áp 5V, Bạn có thể dùng IC 7805. Khi dùng loại IC này, Bạn nhớ dn2g các tụ nhỏ để lọc bỏ các tín hiệu nhiễu tần cao nhiễm trên đường nguồn. Trên tải thường dùng tụ hóa có trị số nhỏ để da65o hiện tượng dao động tự kích, hiện tượng này làm cho mức nguồn ngả ra nhấp nhô, lúc lên cao lúc xuống thấp.

IC PIC16F84A làm việc với chân 5 nối masse để lấy dòng và chân 14 cho nối vào đường nguồn 5V.

 Hình mạch thực hành 7: Khi muốn thực hiện một ý tưởng điều khiển một vật thể nào, trước hết Bạn phải phân tích tính tuần tự của diễn biến trên vật thể đó, sau đó cụ thể các trình tự này bằng một lưu đồ như hình sau. Nó cho thấy các tình huống sẽ xẩy ra trên vật thể chịu tác động bởi chương trình mà Bạn sẽ tạo ra và cho nạp vào bộ nhớ EEPROM trong PIC.

 

Bạn hãy dò theo lưu đồ này để biết chương trình đều khiển 8 Led trên cảng RB, nó sẽ thay đổi trạng thái nhấp nháy tùy theo 5 nút nhấn trên cảng RA.



Tìm hiểu chương trình nguồn qua các câu lệnh

được viết với ngôn ngữ lập trình Assembler.

0 comments:

Post a Comment

domain, domain name, premium domain name for sales

Popular Posts