1. Trang chủ
  2. » Luận Văn - Báo Cáo

đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông

79 1,6K 17

Đ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

Thông tin cơ bản

Định dạng
Số trang 79
Dung lượng 1,28 MB

Nội dung

- Có 1 bộ định thời timer 1 -16 bit có thể hoạt động trong chế độ tiết kiệm năng lượng SLEEP MODE với nguồn xung clock từ bên ngoài.. Tên chân BitLoạiST:Schmitt RC0/T1OS0/T1CKI 0 ST Chân

Trang 1

BẢN THUYẾT MINH

ĐỀ TÀI: DÙNG VI ĐIỀU KHIỂN PIC 16F877A KẾT

HỢP VỚI DS1307 ĐỂ ĐIỀU KHIỂN HỆ THỐNG

ĐÈN GIAO THƠNG.

GVHD: GS.TS Nguyễn Đức Thành GVPB: Thầy Nguyễn Trọng Tài SVTH: Nguyễn Hữu Tân

I Giới thiệu sơ lược về PIC 16F877A

- Tần số hoạt động lớn nhất: 20MHz

- 8k byte ROM nội (Flash Rom)

- 368 byte RAM nội

- 256 byte EEROM trong vùng ROM nội đươc dùng để chứa dữ liệu

- Về giao tiếp, có 5 port A, port B, port C, port D, port E vàøo ra với tín hiệu điều khiển độc lập

- Có 2 bộ định thời Timer 0 vàø timer 2 – 8 bit

- Có 1 bộ định thời timer 1 -16 bit có thể hoạt động trong chế độ tiết kiệm năng lượng (SLEEP MODE) với nguồn xung clock từ bên ngoài

- Có 2 bộ Capture/Compare/PWM

- Có 1 bộ ADC 10 bit với 8 ngõ vàøo

- Có 2 bộ so sánh tương tự (Comparator)

- Có một bộ Watch Dog Timer

- Có một bộ Serial ở bên trong chip

- Có moat cổng song song 8 bit với các tín hiệu điều khiển

- Có 15 nguồn ngắt

- Nạp chương trình thông qua cổng nối tiếp (ICSP – In Circuit Serial

Programming)

Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247 1

Trang 2

- Được chế tạo dựa trên công nghệ CMOS.

- Về cấu trúc lệnh, có tất cả 35 lệnh có độ dài 14 bit

II Giới thiệu về DS1307

- Tần số dao động thạch anh sử dụng 32.768kHz, không cần có điện trở, cũng như các tụ gắn thêm

- IC real-time DS1307 là một IC hoạt động với chế độ thời gian thực, công suất thấp, sử dụng mã BCD đầy đủ

- Có 56 byte ram nội Địa chỉ, cũng như dữ liệu được ghi và đọc theo chuẩn giao tiếp I2C, đa hướng (chi tiết về chuẩn giao tiếp I2C này đã được em trình bày ở trong đồ án)

- IC real-time DS1307 cung cấp thông tin về giây, phút, giờ, ngày, tháng, năm, thông tin về năm IC này cũng tự điều chỉnh cho những tháng có ít hơn 31 ngàyvà bao gồm luôn cả năm nhuận Đồng hồ trong IC hoạt động với hai chế độ:

24 giờ, hay 12 giờ (bao gồm cả chỉ thị cho biết đang là AM hay PM)

- IC real-time DS1307 cũng được tích hợp sẵn một mạch nhận biết sự cố điện ápvà sẽ tự động chuyển sang dùng nguồn PIN nuôi dự phòng khi có sự cố mất điện áp xảy ra để ngăn ngừa tình trạng mất dữ liệu

III Giới thiệu sơ đồ khối của mạch thực hiện

Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247 2

Khối ngõ ra, gồm

12 đèn thể hiện cho 1 ngã 4

Trang 3

IV Giới thiệu các mode hoạt động và cài đặt

a Mode I: Chế độ vận hành tự động cho đèn giao thông với giờ đã cài đặt sẵn

b Mode II: Chế độ vận hành bằng tay cho đèn Có hai mode con:

- Mode con 1: chỉ sử dụng hai đèn xanh và đỏ Đèn vàng không được sử dụng Dùng khi người điều khiển giao thông muốn chủ động điều khiểnthời gian theo ý muốn của mình

- Mode con 2: chỉsử dụng đèn vàng, đèn vàng chớp với chu kì 1s Dùng khi chiến sĩ cảnh sát giao thông muốn người và phương tiện tham gia lưu thông tuân theo hiệu lệnh của mình thay vì tín hiệu đèn giao thông

c Mode III: Chế độ xem giờ đã cài đặt, cài đặt thời gian đèn xanh, đỏ, vàng, xác

định xem cĩ sử dụng giờ của 1307 hay khơng? Mode này cĩ các mode con sau

- Mode con 1: sử dụng để xem giờ đã cài đặt cho đèn giao thông Giờ càiđặt được lưu trong EEPROM nên không bị mất khi có sự cố mất điện

- Mode con 2: sử dụng để định giờ mới cho đèn Sau khi định giờ xong, giờ mới cài đặt này sẽ được lưu vào trong ROM và chương trình sẽ trở lại khâu chọn mode hoạt động

d Mode IV: Chế độ xem giờ hiện tại của hệ thống cũng như thiết đặt giờ chuyển

sang chế độ đèn vàng Mode này có ba mode con :

- Mode con 1: sử dụng để xem giờ hiện tại của hệ thống đọc được từ IC1307 Giờ cài đặt được lưu trong IC real-time DS1307 có PIN nuôi dựphòng nên không bị mất khi có sự cố mất điện

- Mode con 2: sử dụng để xem, định giờ mới cho hệ thống làm cho hệ thống chuyển sang chế độ đèn vàng Sau khi định giơ, xem giờø xong, chương trình sẽ trở lại khâu chọn mode hoạt động

- Mode con 3: sử dụng để cài đặt giờ cho hệ thống (giờ lưu trong IC DS1307)

Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247 3

Trang 4

M C L C ỤC LỤC ỤC LỤC I) CHƯƠNG 1: VI ĐIỀU KHIỂN PIC 16F877A

a Giới thiệu chung về VĐK PIC

b Giới thiệu về vi điều khiển PIC 16F877A

c Giới thiệu các chân của vi điều khiển PIC 16F877A

d Giới thiệu về tổ chức bộ nhớ của PIC 16F877A

i Tổ chức bộ nhớ

ii Các thanh ghi của PIC 16F877A

e Giới thiệu về bộ định thời trong PIC 16F877A

f Giới thiệu về ngắt trong PIC 16F877A

g Sử dụng giao tiếp theo chuẩn giao tiếp I2C trong PIC 16F877A

h Module CCP?

i Các bộ Comparator?

j Bộ biến đổi dữ liệu ADC 10 bit?

II) CHƯƠNG II: GIỚI THIỆU VỀ PHẦN MỀM CCS C HỖ TRỞ LẬP TRÌNG CHO

CÁC DÒNG PIC

III) CHƯƠNG III: GIỚI THIỆU MẠCH THỰC HIỆN ĐỒ ÁN MÔN HỌC.

IV) Phụ lục: Tập lệnh của PIC 16F877A

Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247 4

Trang 5

CHƯƠNG I

VI ĐIỀU KHIỂN PIC 16F877A

A Giới thiệu về vi điều khiển PIC

PIC (Programmable intelligent Controller) do hãng General Instrument đặt

tên cho con vi điều khiển đầu tiên của họ: PIC 1650 Hãng Microchip tiếp tục phát tri63n sản phẩm này Cho đến nay, các sản phẩm vi điều khiển PIC của Microchip đã có gần 100 loại sản phẩm từ 10Fxxx đến 12Cxxx, 12Fxxx, 16Cxxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxA, 16FxxxA, 16LFxxxA, 18Fxxx, 18LFxxx, 18Fxxxx, 18LFxxxx…

Cách phân loại PIC:

+ Theo chữ cái:

-Các họ có chữ C như PIC xxCxxx thuộc nhóm OTP (One Time Programmable) chỉ có thể lập trình vàø nạp cho nó moat lần duy nhất.-Cá họ có chữ F hoặc LF (thuộc nhóm Flash) cho phép ghi vàø xóa nhiều lần bằng các mạch điện tử thông thường

+Theo hai chữ số đầu tiên:

-PIC 12Cxx: dòng PIC cơ bản (base-line), có độ dài lệnh là 12 bit.-PIC 10F, 12F vàø 16F: dòng PIC phổ thông (mid-range), độ dài lệnh 14 bit

-PIC 18: dòng PIC cao cấp (high-end), có độ dài lệnh là 16 bit

B Giới thiệu về Vi điều khiển 16F877A

Đây là dòng PIC phổ biến nhất Có những đặc điểm tổng quát như sau:

o Tần số hoạt động lớn nhất: 20MHz (16F877A, 16F84A), đối với các họPIC mà không có kí tự A đứng cuối thì tần số hoạt động lớn nhất là 10MHz

o 8k byte ROM nội (Flash Rom)

o 368 byte RAM nội

o 256 byte EFROM trong vùng ROM nội đươc dùng để chứa dữ liệu

o Về giao tiếp, có 5 port A, port B, port C, port D, port E vàøo ra với tín hiệu điều khiển độc lập

o Có 2 bộ định thời Timer 0 vàø timer 2 – 8 bit

Trang 6

o Có 1 bộ định thời timer 1 -16 bit có thể hoạt động trong chế độ tiết kiệm năng lượng (SLEEP MODE) với nguồn xung clock từ bên ngoài.

o Có 2 bộ Capture/Compare/PWM

o Có 1 bộ ADC 10 bit với 8 ngõ vàøo

o Có 2 bộ so sánh tương tự (Comparator)

o Có một bộ Watch Dog Timer

o Có một bộ Serial ở bên trong chip

o Có moat cổng song song 8 bit với các tín hiệu điều khiển

o Có 15 nguồn ngắt

o Nạp chương trình thông qua cổng nối tiếp (ICSP – In Circuit Serial Programming)

o Được chế tạo dựa trên công nghệ CMOS

o Về cấu trúc lệnh, có tất cả 35 lệnh có độ dài 14 bit

C Giới thiệu về các chân của vi điều khiển 16F877A

Sơ đồ chân cuả PIC 16F877A

Trang 7

1 Nhóm chân cấp nguồn

 Chân 11, 32: nối vàøo Vcc (+5V)

 Chân 12, 31: nối mass

2 Chân Reset (chân số 1)

 Vi điều khiển PIC sẽ được reset khi chân số 1 chuyển từ mức logic 1 xuống mức logic 0

3 Nhóm chân tạo xung Clock

Xung clock sẽ được đưa vàøo chân số 13 vàø 14, thạch anh giữ vài trò định tần cho mạch dao động bên trong chip PIC 16F877A có thể hoạt động trong 4 chế độ dao động khác nhau

LP Low Power

Crystal 200kHz32kHz 68-100pF15-33pF 68-100pF15-33pF

XT Crystal/Resonator 100kHz

2MHz4MHz

150pF15-33pF

100-15-33pF15-33pF15-33pF

HS High speed

crystal/ Resonator

4MHz20Mhz

15-33pF15-33pF

15-33pF15-33pF

RC Resitor/ Capacitor Không quan trong độ chính

Trang 8

xác

4 Nhóm chân port

Các chân port của 16F877A đều cho phép truyền vàø nhận dữ liệu theo hai hướng Nghĩa là ta được phép đọc hoặc xuất dữ liệu ở các port này Hướng truyền được xác định bằng cách đưa giá trị thích hợp vàøo thanh ghi TRISX (trong đó X là tên port) Mỗi bit trong thanh ghi TRISX sẽ điều khiển 1 hướng xuất nhập cho 1 chân của port Nếu 1 bit trong thanh ghi TRISX xuống 0 thì PIC sẽ hiểu rằng chân điều khiển bởi bit đó là chân xuất dữ liệu (output) Ngược lại, nếu 1 bit trong TRISX lên mức 1 thì PIX sẽ hiểu rằng chân điều khiển bởi bit đó là chân nhập dữ liệu (input)

Ví dụ: nếu TRISB = b’11110000’ thì chân RB0->RB3: output, RB4->RB7:input

Port A vàø thanh ghi TRISA (85H)

Trang 9

Port A gồm các chân từ RA0 đến RA5 Nội dung của thanh ghi TRISA sẽ

qui định chân nào của port A là input hay output

Riêng chân RA4 còn có chức năng là chân cung cấp xung clock ngoài cho timer 0 Đây là chân có cực thu để hở, nên khi test port A, ta cần gắn điện trở kéo lên để đảm bảo kết quả hiển thị cho chân này

Các chân khác của port A còn có chức năng là chân ngõ vàøo analog của bộ ADC vàø chân ngõ vàøo điện thế so sánh của bộ comparator

Các thanh ghi liên quan đến Port A

Tóm tắt chức năng các chân Port A:

Tên chân Bit (ST:SchmittLoại

Trigger)

Chức năng

RA0/AN0 0 TTL Chân I/O hay chân ngõ vào analog

RA1/AN1 1 TTL Chân I/O hay chân ngõ vào analog

RA2/AN2/Vref-/

CVref 2 TTL Chân I/O hay chân ngõ vào analog hay Vref- hayCVrefRA3/AN3/Vref+ 3 TTL Chân I/O hay chân ngõ vào analog hay Vref+ hay CVrefRA4/TOCKI/C1OUT 4 TTL

Chân I/O hay chân ngõ vào cho xung clock ngoài

cho timer 0 hay ngõ ra bộ so sánh.Ngõ ra cực máng hở.

RA5/SS/AN4/

Chân I/O hay ngõ vào chọn slave trong chế đô giao tiếp nối tiếp đồng bộ, ngõ vào analog hay ngõ ra bộ so sánh điện áp

PortB vàø TRISB

Port B gồm tám chân RB0-> RB7 Việc thay đổi giá trị thanh ghi TRISB sẽ quyết định chân nào của port B là Input, chân nào là output

Trang 10

Ba chân của port B được tích hợp chức năng In-circuit Debugger vàø Low Programming là RB3/PGM, RB6/PGC vàø RB7/PGD.

Mỗi chân của port B có một điện trở kéo lên nguồn Bốn chân RB4-> RB7 có chức năng ngắt khi trạng thái thay đổi (chức năng này không hoạt động khi chân port được quy định là output)

Các thanh ghi liên quan đến Port B

Bảng tóm tắt chức năng các chân Port B

Trang 11

Tên chân Bit

Loại(ST:Schmitt

RB0/INT 0 TTL/ST Chân I/O hay ngõ ra ngắt ngoài Có thể lập trình bằng phần mềm để sử dụng điện trở kéo lên yếu

ở bên trong

RB1 1 TTL Chân I/O Có thể lập trình bằng phần mềm để sử dụng điện trở kéo lên yếu ở bên trong.RB2 2 TTL Chân I/O Có thể lập trình bằng phần mềm để sử dụng điện trở kéo lên yếu ở bên trong.

RB3/PGM 3 TTL Chân I/O hay chân lập trình LVP( Low Voltage Programming) Có thể lập trình bằng phần mềm

để sử dụng điện trở kéo lên yếu ở bên trong

Chân I/O với ngắt khi có sự thay đổi mức logic trên chân Port Có thể lập trình bằng phần mềm để sử dụng điện trở kéo lên yếu ở bên trong

RC5 5 TTL Chân I/O với ngắt khi có sự thay đổi mức logic trên chân Port Có thể lập trình bằng phần mềm

để sử dụng điện trở kéo lên yếu ở bên trong

Chân I/O với ngắt khi có sự thay đổi mức logic trên chân Port hay chân In-Circuit debugger Có thể lập trình bằng phần mềm để sử dụng điện trở kéo lên yếu ở bên trong Xung nhịp cho lập trình nối tiếp

Chân I/O với ngắt khi có sự thay đổi mức logic trên chân Port hay chân In-Circuit debugger Có thể lập trình bằng phần mềm để sử dụng điện trở kéo lên yếu ở bên trong.Là đường dữ liệu cho lậptrình nối tiếp

Port C vàø TRISC

Ta có cấu trúc chân của PORT C:

Trang 12

Port C gồm 8 chân từ RC0 đến RC7, tương tự các Port khác, việc qui định giá trị các bit của thanh ghi TRISC sẽ quyết định chân nào của PORT C là chân xuất, chân nào là chân nhập Khi sử dụng Port C cần lưu ý giá trị của thanh ghi TRISC vì một số chức năng ngoại vi sẽ làm cho các chân Port C mặc định là Output Trong khi đó, một số chức năng ngoại vi sẽ làm cho các chân Port C là chân Input.

Việc đọc thanh ghi PortC sẽ giúp tra biết được trạng thái chân của PORTC Việc ghi giá trị vào thanh ghi này cũng sẽ làm thay đổi trạng thái logic các chân của Port C

Các thanh ghi liên quan đến Port C:

Trang 13

Tên chân Bit

Loại(ST:Schmitt

RC0/T1OS0/T1CKI 0 ST Chân I/O hay ngõ ra của bộ dao động timer 1/ Xung clock cho timer 1

RC1/T1OSI/CCP2 1 ST Chân I/O hay ngõ vào bộ dao động cho timer 1 hay ngõ vào bộ Capture 2/ Ngõ ra bộ so sánh 2/

ngõ ra bộ PWM2RC2/CCP1 2 ST Chân I/O hay ngõ vào bộ Capture 1/ Ngõ ra bộ sosánh 1/ Ngõ ra bộ PWM1RC3/SCK/SCL 3 ST Chân I/O hay chân cung cấp xung clock nối tiếp đồng bộ trong chuẩn giao tiếp SPI hay I2CRC4/SDI/SDA 4 ST Chân I/O hay đường SPI Data hay đường SDA (đối với I2C)RC5/SDO 5 ST Chân I/O hay ngõ ra port giao tiếp nối tiếp đồng bộRC6/TX/CK 6 ST Chân I/O hay chân phát bất đồng bộ trong chuẩn giao tiếp nối tiếp.RC7/RX/DT 7 ST Chân I/O hay chân nhận trong chuẩn giao tiếp nốitiếp bất đồng bộ.

Port D vàø TRISD

Port D có tám chân từ RD0 đến RD7 Port D có thể hoạt động như là một Port xuất nhập thông thường hoặc như một cổng song song của PSP (Parallel Slave Port) bằng cách set bit PSP mode (TRISE.4) lên 1 Trong chế độ này, buffer ngõ vào là linh kiện họ TTL

Các thanh ghi liên quan đến Port D:

Cấu trúc chân Port D:

Trang 14

Tên chân Bit Loại Chức năng

RD0/PSP0 0 ST/TTL Chân I/O hay bit 0 của PSP

RD1/PSP1 1 ST/TTL Chân I/O hay bit 1 của PSP

RD2/PSP2 2 ST/TTL Chân I/O hay bit 2 của PSP

RD3/PSP3 3 ST/TTL Chân I/O hay bit 3 của PSP

RD4/PSP4 4 ST/TTL Chân I/O hay bit 4 của PSP

RD5/PSP5 5 ST/TTL Chân I/O hay bit 5 của PSP

RD6/PSP6 6 ST/TTL Chân I/O hay bit 6 của PSP

RD7/PSP7 7 ST/TTL Chân I/O hay bit 7 của PSP

Port E vàø TRISE

Cấu trúc chân của Port E:

Trang 15

Port E có năm chân, trong đó có ba chân RE0/RD/AN5, RE1/WR/AN6, RE2/CS/AN7 có thể được cấu hình là các chân xuấ nhập.

Các chân Port E có thể trở thành các chân điều khiển cho các cổng của vi xử líKhi bit PSPMODE (TRISE.4) được set lên 1 Khi đó, các bit từ 0 đến 2 của TRISE phải bằng 1 để các chân này được cấu hình là các chân ngõ vào Trongchế độ PSP, bộ đệm ngỏ vào Port E là linh kiện họ TTL

Các chân của Port E còn có chức năng Analog, tại mode này, các chân này sẽ được đọc về là giá trị 0

Các thanh ghi liên quan đến Port E:

Chức năng các chân của Port E:

Trang 16

Tên chân Bit Loại Chức năng

RE0/RD/¿AN5 0 ST/TTL(1)

Chân I/O hay hay chân đọc trong mode PSP hay ngõ vào Analog

1: rảnh rỗi0: đang có hoạt động đọc diễn ra Nội dung của thanh ghi PortD là output cho các chân I/O( nếu chip được chọn)

RE1/WR/AN6 1 ST/TTL(1)

Chân I/O hay hay chân ghi trong mode PSP hay ngõ vào Analog

1: rảnh rỗi0: đang có hoạt động ghi diễn ra Mức logic của cacù chân I/O được chốt theo thanh ghi PortD( nếu chip được chọn)

D Cấu trúc bộ nhớ của PIC 16F877A

Có 3 phần riêng biệt trong bộ nhớ của 16F877A gồm: Bộ nhớ chương trình, bộ nhớ dữ liệu vàø bộ nhớ EEROM

I Tổ chức bộ nhớ Tổ chức bộ nhớ chương trình

PIC 16F877A có Program Counter (PC) 13 bit có thể định địa chỉ cho 8KB bộ nhớ.Bộ nhớ chương trình còn bao gồm một ngăn stack có 8 mức

Vector RESET được đặt ở địa chỉ 0000h, vector địa chỉ ngắt ngoại vi được đặt ở đia chỉ 0004h

Trang 17

Tổ chức vùng nhớ dữ liệu

Vùng nhớ dữ liệu được chia làm 4 bank thanh ghi Mỗi bank gồm 128 byte dữ liệu, vùng nhớ có địa chỉ thấp trong các bank này dùng cho các thanh ghi có chức năng đặc biệt –SFR (Special Function Register); trong khi đó, vùng có địa chỉ cao trong các bank này đươc sử dụng làm vùng RAM đa dụng (GeneralPurpose Register) Một số thanh ghi SFR trong bank này cũng được ánh xạ sang các bank khác nhằm làm tăng tốc độ truy cập vàøgiảm độ dài code Việc

Trang 18

lựa chọn bank thanh ghi phụ thuộc vàøo bit RP0 vàø RP1 trong thanh ghi STATUS.

Bản đồ vùng RAM nội của pic 16f877a.

Trang 19

Vùng nhớ EEPROM vàø vùng nhớ chương trình FLASH:

Vùng nhớ dữ liệu EEPROM vàø vùng nhớ chương trình FLASH là vùng nhớ ROM có thể đọc vàø ghi trong khi chương trình hoạt động chỉ với điện thế Vcc=+5V Việc reset hệ thống cũng như mất điện không làm mất dữ liệu trongvùng nhớ này Để truy xuất vùng nhớ này, ta phải thông qua các thanh ghi sau:EEDATA, EEDATH, EEADR, EEADRH, EECON1, EECON2

Tuy nhiên, để tiện việc truy xuất vùng nhớ này, em đã sử dụng phần mềm CCS Cv4.013 có hỗ trợ sẵn các lệnh sau để truy xuất:

Ngăn xếp Stack:

Ngăn xếp này cho phép 8 lệnh gọi chương trình con và ngắt hoạt động

Stack được dùng để chứa địa chỉ mà chương trình sẽ quay trở về từ chương trình con và ngắt Đối với dòng Mid-range như pic 16f877a, stack có độ sâu là

8 lớp Vị trí stack không name trong bộ nhớ chương trình cũnh như bộ nhớ dữ liệu

II Các thanh ghi chức năng đặc biệt trong PIC 16F877A

Thanh ghi STATUS (03H, 83H)

Chức năng các bit như sau:

o C: dùng trong các lệnh liên quan đến các phép toán C sẽ lên 1 nếu có số nhớ sinh ra trong phép toán

o DC: dùng cho các lệnh liên quan đến các phép toán DC sẽ lên

1 nếu có số nhớ sinh ra bởi phép cộng hoặc trừ từ 4 bit thấp

o Z: bit này sẽ lên 1 nếu kết quả phép toán bằng 0 Nếu kết quả phép toán khác 0, bit này sẽ bị xóa về 0

Trang 20

o PD (power-down bit)(bit công suấ thấp): được dùng để báo

trạng thái ngủ của PIC 16F877A Ở trạng thái ngủ, bit nàysẽ bị xóa về 0 Ở điều kiện bình thường, bit này bằng 1

o ¿ (time-out bit): bit này sẽ bằng 1 sau khi bật nguồn, sau lệnh CLRWDT, hoặc sau lệnh SLEEP Bit này sẽ bằng 0 khi WDT đi vàøo hoạt động vàø thời gian chờ RESET được tính

o RP1:RP0: Dùng để chọn các bank thanh ghiRP1 RP0 Bank được chọn Địa chỉ

Thanh ghi tùy chọn OPTION REGISTER

(Được trình bày trong phần timer 0)

Các thanh ghi điều khiển ngắt

(Được trình bày trong phần ngắt)

Thanh ghi đếm chương trình PC (Program Counter)

Thanh ghi này được dùng để chứa địa chỉ lệnh kế tiếp khi thực hiện chương trình Nó có độ dài là 13 bit, byte thấp chứa trong thanh ghi PCL, byte cao chứa trong thanh ghi PCH

Thanh ghi W (Working register)

Là một thanh ghi mục đích chung mà ta có thể đặt nó lên bất kì giá trị nào ta muốn Ta có thể gán một giá trị cho thanh ghi W hay dùng nó làm thanh ghi trung gian để gán nội dung cho một thanh ghi khác Khi

ta gán một giá trị mới cho thanh ghi W thì giá trị cũ sẽ bị ghi đè lên Thanh ghi này có thể truy cập từ tất cả các bank

E Giới thiệu về các bộ định thời trong PIC 16F877A

Bộ WDT (Watch Dog Timer)

Bên trong pic 16f877a có một mạch dao động RC, mạch này cung cấp xung nhịp

cho PIC độc lập với xung nhịp của PIC Khi WDT được cho phép, nó sẽ đếm từ

00h-FFh (mỗi lần tăng lên 1 đơn vị Và khi đếm vượt qua FFh, trở thành 00h thì

Trang 21

PIC 16F877A sẽ bị reset bất kể đang làm gì Chúng ta ứng dụng WDT để ngăn ngừa sự cố chương trình trong PIC 16F877A bị treo.

Bộ định thời timer 0

o Giới thiệu

Timer 0 là một bộ định thời /đếm 8 bit, có khả năng đọc được vàø ghi được, có một bộ prescaler có thể lập trình được 8 bit, có thể sử dụng với nguồn xung clock nội hay ngoại, có thể ngắt khi có sự kiện tràn timer vàø có thể lựa chọn canh tác động của xung clock ngoài

o Thanh ghi điều khiển (OPTION-REG):

Là thanh ghi tùy chọn chứa các bit điều khiển để cấu hình các chức năng của timer 0, chức năng sử dụng điện trở kéo lên ở PORTB vàø chức năng của WDT

Trong đó, chức năng các bit như sau:

 RBPU: nếu bit này bằng 1 thì các chân của Port B sẽ được các điện trở kéo lên nguồn Nếu bit này bằng 0, các chân của Port B sẽ không được các điện trở kéo lên nguồn

 INTEDG: qui định ngắt sẽ tác động cạnh lên hay cạnh xuống của xung tại chân RB0 Nếu bit này bằng 1: ngắt sẽ tác đông cạnh lên, nếu bit này bằng 0: ngắt sẽ tác động cạnh xuống

 T0CS: chọn nguồn xung clock cấp cho timer 0 Nếu bit này bằng 1: timer 0 sẽ được cấp nguồn xung clock từ bên ngoài vàøo Nếu bit nàybằng 0: timer 0 sẽ được cấp xung clock bởi nguồn dao động nội

 T0SE: qui định cạnh lên hay cạnh xuống của xung clock sẽ tác độnglên timer 0 Nếu bit này bằng 1, timer 0 sẽ tác động bởi cạnh xuống của xung clock Nếu bit này bằng 0, timer 0 sẽ bị tác động bởi cạnh lên của xung

 PSA (prescaler assignment bit): xác định prescaler sẽ tác động lên timer 0 hay WDT Nếu PSA =1, WDT được chon Nếu PSA=0, thì timer 0 được chọn

 PS2PS0: dùng để lựa chọn tốc độ đếm của timer 0 hay của WDT(thời gian chờ của WDT) trước khi reset thiết bị

Trang 22

PS2 PS1 PS0 Tốc độ timer 0 Tốc độ của WDT Thời gian chờ

(1 chu kì máy =4/tần số dao động của thạch anh)

Vd: đối với thạch anh 4MHz thì 1 chu kì máy là 1us

o Hoạt động của bộ định thời

Có hai chế độ hoạt động cho timer 0:

 Chế độ định thời: giá trị của timer 0 chứa trong thanh ghi TMR0 sẽ tăng lên1 sau mỗi x chu kì máy (với 1:x là tỉ lệ prescaler ) Nếu TMR0 đươc nạp giá trị mới, giá trị này sẽ không được tăng trong 2 chu kì máy kế tiếp Để khắc phục hiện tượng này, ta thường hiệu chỉnh giá trị được lưu vàøo trong timer 0

 Chế độ đếm: TMR0 sẽ tăng lên khi có cạnh lên hay cạnh xuống củaxung xuất hiện tại chân T0CKL (chân số 6)

o Ngắt timer 0

Ngắt trong timer 0 chỉ xảy ra khi giá trị trong TMR0 tràn từ FFh xuống 00h Khi xảy ra tràn, cờ báo tràn T0IF được bật lên vàø phải được xóa bằng phần mềm trong chương trình phục vụ ngắt (ISR) trước khi trở về chương trình chính

Ngắt này được cho phép bởi bit T0IE Ngắt này cũng không làm vi điều khiển thoát khỏi trạng thái ngủ

o Bộ Prescaler của timer 0

Một bộ đếm 8 bit được sử dụng như là bộ pre-scaler cho timer 0hay bộ post-scaler cho WDT Bit PSA sẽ quyết định bộ đếm này được sử dụng chotimer 0 hay WDT 3 bit PS2PS0 sẽ xác định tỉ lệ bộ đếm

Hình sau đây trình bày sơ đồ bộ prescaler cho timer 0 vàø WDT

Trang 23

Bộ định thời timer 1

o Giới thiệu

Timer 1 là mộtbộ định thời/đếm 16 bit bao gồm 2 thanh ghi 8 bit là TMR1H vàø TMR1L, có khả năng đọc vàø ghi được Cặp thanh ghi này đếm từ 0000H đến FFFFH rồi trở về 0000H

Trang 24

Sơ đồ bộ định thời timer 1

o Thanh ghi điều khiển (T1CON)

- - TICKPS

1 TICKPS0 T10SEN T1SYNC TMR1CS TMR1ON

Trong đó, chức năng các bit như sau:

 Bit 7:6: không sử dụng

 Bit 5:4: TICKPS1:T1CKPS0: chọn tỉ lệ xung ngõ vàøo cho timer 1

 T1SYNC: lựa chọn đồng bộ hóa xung clock ngòai của timer 1 Khi

nó bằng 1: không đồng bộ hóa xung clock ngoài Khi bit này bằng

0: đồng bộ hóa xung clock ngoài

 TM1CS: bit chọn nguồn xung clock cho timer 1 Nếu bit này bằng 1:chọn xung clock ngoài đưa qua hai chân T1OSO/T1CKI (tác động

Trang 25

theo cạnh lên của xung) Nếu bit này bằng 0: chọn xung clock nội (Fosc/4)

 TMR1ON: cho phép hoặc ngưng timer 1Nếu bit này bằng 1: cho phép timer 1Nếu bit này bằng 0: không cho phép timer 1

o Hoạt động của bộ định thời timer 1

Timer 1 có ba chế độ hoạt động:

 Chế độ hoạt động định thời đồng bộ: xung cấp cho timer 1 là Fosc/4 TMR1CS=0, T1SYNC không có tác dụng

 Chế độ đếm đồng bộ: Giá trị bộ đếm sẽ tăng lên khi có xung cạnh lên tại chân T1OSI/RC1 Xung clock ngoài này phải được đồng bộ với xung clock nội Chế độ đếm đồng bộ sẽ không hoạt đông trong Sleep Mode

 Chế độ đếm không đồng bộ: (được đặt bằng các set bit T1SYNC lên1) Bộ định thời sẽ tiếp tục đếm trong quá trình ngủ của PIC

16F877A vàø có thể xảy ra một ngắt khi bộ định thời tràn vàø làm cho PIC 16F877A thoát khỏi chế độ ngủ Ở chế độ này, để đọc giá trị timer, ta không cần dừng timer1, nhưng để đảm bảo việc ghi là chính xác, ta phải dừng timer

o Bộ dao động riêng của timer 1: ta có thể xây dựng một bộ dao động riêng

cho timer 1 (độc lập với bộ dao động của PIC 16F877A) nhờ đó, bộ đếm cóthể hoạt động ngay cả khi pic 16f877a rơi vàøo trạng thái ngủ

o Ngắt timer 1: xảy ra khi giá trị trong hai thanh ghi TMR1 có sự tràn từ

FFFFH xuống 0000H Khi xảy ra tràn, cờ TMR1IF được bật lên vàø phải được xóa bằng phầm mềm trước khi thoát khỏi chương trình phục vụ ngắt (isr) trở về chương trình chính Ngắt này cũng không làm cho PIC 16F877Athoát khỏi trạng thái ngủ, chỉ có chế độ đếm không đồng bộ mới làm cho PIC 16F877A thoát khỏi trạng thái ngủ

Bộ định thời timer 2

o Giới thiệu

Bộ định thời timer 2 là một bộ định thời 8 bit bao gồm một bộ prescaler vàømột bộ postscaler vàø một thanh ghi chu kì PR2 Có thể kết hợp timer 2 với hai bộ định tỉ lệ trên cho phép PIC 16F877A hoạt động như một bộ đếm 16

Trang 26

bit Module timer 2 cung cấp thời gian hoạt động cho chế độ điều rộng xung (PWM) nếu module CCP được chọn.

o Thanh ghi điều khiển (T2CON)

- TOUTPS

3

TOUTPS2

TOUTPS1

TOUTPS0

TMR2ON

T2CKPS1

T2CKPS0

Trong đó, chức năng các bit như sau:

 Bit7: không sử dụng

 TOUTSP3:TOUTSP0: chọn tỉ lệ ngõ ra cho timer 2

 T2CKPS1:T2CKPS0: bit chọn tỉ lệ ngõ vàøo cho timer 2

o Nguồn xung clock cho timer 2:

Timer 2 chỉ có một nguồn xung clock đó là xung clock nội của PIC 16F877A

o Thanh ghi TMR2 vàø PR2:

Đây là hai thanh gho đọc vàø ghi được TMR2 sẽ tăng từ 00h lên đến giá trị nằm trong PR2, sau đó sẽ được reset về 00h cho chu kì đếm kế tiếp

o Tín hiệu báo trạng thái cân bằng:

Khi giá trị trong thanh ghi TMR2 bằng giá trị trong thanh ghi PR2, bộ so sánh sẽ tạo ra một xung báo hiệu, xung này có thể được dùng cho bộ postscaler hoặc làm xung clock cho module truyền nối tiếp Ngoài ra, nó còn được dùng làm tín hiệu RESET cho timer 2

o Xóa các bộ tỉ lệ trong timer 2

Các bộ tỉ lệ được xóa khi:

 Ghi một giá trị bất kì vàøo TMR2

 Ghi một giá trị bất kì vàøo thanh ghi T2CON

Trang 27

 Bất cứ một dạng reset thiết bị nào.

o Hoạt động trong Sleep mode

Trong chế độ ngủ, timer 2 không hoạt động Các bộ định tỉ lệ sẽ được lưu lại vàø phục hồi sau khi thoát khỏi trạng thái ngủ

Các hàm trong CCS liên quan đến timer:

o Timer 0:

setup_TIMER_0(mode);

Ý nghĩa: chọn chế độ hoạt động cho timer 0Trong đó mode là một hoặc hai khai báo sau:

(nếu dùng cả hai thì sử dụng dấu “|” đặt ở giữa)

Khai báo Ý nghĩaRTCC_INTERNAL Chọn xung clock nộiRTCC_EXT_L_TO_H Chọn cho timer 0 bị tác động khi có cạnhlên tại chân RA4 (T0CKI)RTCC_EXT_H_TO_L Chọn cho timer 0 bị tác động khi có cạnhxuống tại chân RA4 (T0CKI)RTCC_DIV_2 Chọn tỉ lệ bộ prescaler là 1:2RTCC_DIV_4 Chọn tỉ lệ bộ prescaler là 1:4RTCC_DIV_8 Chọn tỉ lệ bộ prescaler là 1:8RTCC_DIV_16 Chọn tỉ lệ bộ prescaler là 1:16RTCC_DIV_32 Chọn tỉ lệ bộ prescaler là 1:32RTCC_DIV_64 Chọn tỉ lệ bộ prescaler là 1:64RTCC_DIV_128 Chọn tỉ lệ bộ prescaler là 1:128RTCC_DIV_256 Chọn tỉ lệ bộ prescaler là 1:256

setup_COUNTERS (rtcc_state, ps_state);

setup_WDT();

 Khai báo của rtcc_state: (chọn nguồn xung nhịp cho counter)

Khai báo Ý nghĩaRTCC_INTERNAL Chọn xung clock nội cho bộ đếmRTCC_EXT_L_TO_

H

Chọn cho timer 0 bị tác động khi có cạnh

lên tại chân RA4 (T0CKI)RTCC_EXT_H_TO_

L Chọn cho timer 0 bị tác động khi có cạnhxuống tại chân RA4 (T0CKI)

Trang 28

 Khai báo của ps_state (đặt tỉ lệ bộ prescaler cho cả timer 0 vàø WDT) (do timer 0 vàø WDT sử dụng cùng một bộ chia tần

Khai báo Ý nghĩaRTCC_DIV_2 Chọn tỉ lệ bộ prescaler là 1:2RTCC_DIV_4 Chọn tỉ lệ bộ prescaler là 1:4RTCC_DIV_8 Chọn tỉ lệ bộ prescaler là 1:8RTCC_DIV_16 Chọn tỉ lệ bộ prescaler là 1:16RTCC_DIV_32 Chọn tỉ lệ bộ prescaler là 1:32RTCC_DIV_64 Chọn tỉ lệ bộ prescaler là 1:64RTCC_DIV_128 Chọn tỉ lệ bộ prescaler là 1:128RTCC_DIV_256 Chọn tỉ lệ bộ prescaler là 1:256WDT_18MS WDT sẽ chờ 18 ms trước khi reset hệ thốngWDT_36MS WDT sẽ chờ 36 ms trước khi reset hệ thốngWDT_72MS WDT sẽ chờ 72 ms trước khi reset hệ thốngWDT_144MS WDT sẽ chờ 144 ms trước khi reset hệ thốngWDT_288MS WDT sẽ chờ 288 ms trước khi reset hệ thốngWDT_576MS WDT sẽ chờ 576 ms trước khi reset hệ thốngWDT_1152MS WDT sẽ chờ 1152 ms trước khi reset hệthốngWDT_2304MS WDT sẽ chờ 2304 ms trước khi reset hệthống

(nếu dùng cả hai thì sử dụng dấu “|” đặt ở giữa)

Khai báo Ý nghĩa

Trang 29

T1_DISABLE Tắt timer 1T1_INTERNAL Chọn nguồn xung clock nội cho timer 1(Fosc/4)T1_EXTERNAL Chọn nguồn xung clock ngoài cho timer 1tại chân RC0T1_EXTERNAL_SYN

C Chọn nguồn xung clock ngoài có đồng bộT1_CLK_OUT

T1_DIV_BY_1T1_DIV_BY_2T1_DIV_BY_4T1_DIV_BY_8

setup_TIMER_2(mode, period, postscale);

Ý nghĩa: chọn chế độ hoạt động cho timer 2

Khai báo Ý nghĩaT2_DISABLE Tắt timer 2T1_DIV_BY_1 Chọn tỉ lệ cho bộ postscaler là 1:1T1_DIV_BY_4 Chọn tỉ lệ cho bộ postscaler là 1:4T1_DIV_BY_16 Chọn tỉ lệ cho bộ postscaler là 1:16

Period: số nguyên từ 0255 xác định đến xung clock nào thì reset.Postscale: là số nguyên từ 016 xác định số lần tràn của timer 2 trước khi reset

F Giới thiệu về ngắt trong PIC 16F877A

a Giới thiệu chung về ngắt

Trang 30

Đối với vi điều khiển PIC 16F877A có nhiều nguồn ngắt Cứ mỗi một module ngoại vi thì có một nguồn ngắt, tuy nhiên, có một số module có nhiều nguồn ngắt.

Sau đây, em xin trình bày một số nguồn ngắt tiêu biểu trong PIC 16F877A:

 Ngắt ngoài trên các chân RB0

 Ngắt tràn timer 0

 Ngắt tràn timer 1

 Ngắt tràn timer 2

 Ngắt thay đổi trạng thái trên các chân PORTB từ RB4:RB7

 Ngắt so sánh điện thế

 Ngắt port song song

 Ngắt USART

 Ngắt nhận dữ liệu

 Ngắt truyền dữ liệu

 Ngắt hoàn tất chuyển đổi A/D

 Ngắt màn hình LCD

 Ngắt hoàn tất ghi EEPROM

 Ngắt module CCP

 Ngắt module SSP

Trang 31

Sơ đồ các nguồn ngắt bên trong pic 16f877a

Trong sơ đồ trên ,ta thấy có các chữ cái IE vàø IF, các chữ này có ý nghĩa như sau:

 IE: interrupts enable (cho phép ngắt)

Khi ta cho phép một loại ngắt nào đó thì bit có chữ cái tận cùng là IE phải được set lên 1 Mặc định, giá trị của các bit này đều là 0 Chĩ khi nào ta cho phép một ngắt nào đó thì ngắt đó mới có thể xảy ra

 IF: interrupts flag: cờ báo ngắt Khi có sự kiện ngắt xảy ra thì cờ này được set

lên 1 Nếu ngắt tương ứng được cho phép thì sẽ có sự kiện ngắt được xảy ra vàøProgram Counter (PC) sẽ nhảy vàøo chương trình phục vụ ngắt (isr) Các cờ

Trang 32

báo ngắt đôi khi không tự động được xóa mà phải được xóa bằng phần mềm trước khi thoát khỏi chương trình phục vụ ngắt (isr) trở về chương trình chính.

b Các lớp ngắt

Để sử dụng tất cả các ngắt thuộc các lớp ngắt được trình bày dưới đây, trước tiên, ta phải bật bit cho phép ngắt toàn cục GIE (Global Interrupts Enable) lên1

Lớp ngắt ngoại vi (lớp ngắt nằm ngoài cùng bên trái trong sơ đồ trên)

Vì lớp này có quá nhiều nguồn ngắt vàø vì các nguồn ngắt đều là một số chuẩn giao tiếp hoặc một số chức năng đặc biệt của PIC 16F877A nên ta phân thành các lớp ngắt ngoại vi Để cho phép các ngắt ngoại vi hoạt động thì trước tiên,

ta phải cho phép ngắt ngoại vi, tức là bật bit PIE lên Sau đó, muốn cho phép

ngắt ngoại vi cụ thể nào thì chúng ta bật bit có chứa kí hiệu IE ứng với ngắt đólên

Lớp ngắt thứ hai (lớp ngắt phổ thông)

Khi muốn dùng ngắt phổ thông nào thì chúng ta chỉ cần bật bit IE của nguồnngắt đó Do đó, bit PEIE cũng được coi là một nguồn ngắt phổ thông

c Vectơ ngắt

Vectơ ngắt của PIC 16F877A có địa chỉ là 0x0004 Do đó, khi có sự kiện ngắt xảy ra, PC sẽ nhảy đến địa chỉ 0x0004, thực thi chương trình con phục vụ ngắt tại đó vàø sau đó sẽ nhảy thoát khỏi chương trình phục vụ ngắt để trở về chương trình chính

d Các thanh ghi liên quan đến ngắt

Các thanh ghi liên quan đến ngắt là INTCON, PIE1, PIR1, PIE2, PIR2

Thanh ghi INTCON

Chức năng các bit:

 GIE: cho phép tổng quát với tất cả các nguồn ngắt

o GIE=1: các ngắt được cho phép

o GIE=0: các ngắt không được cho phép

 EEIE: cho phép ngắt ghi vàøo EEPROM hoàn tất

o EEIE=1: cho phép ngắt ghi EEPROM hoạt động

Trang 33

o EEIE=0: không cho phép ngắt ghi EEPROM hoạt động

 T0IE: cho phép ngắt khi tràn timer 0

o T0IE=1: cho phép ngắt khi timer 0 tràn

o T0IE=0: không cho phép ngắt khi timer 0 tràn

 INTE: cho phép ngắt ngoại vi trên chân RB0/INT

o INTE=1: cho phép ngắt ngoại vi

o INTE=0: không cho phép ngắt ngoại vi trên chân RB0/INT

 RBIE: cho phép ngắt khi trạng thái PORTB thay đổi

o RBIE=1: cho phép ngắt khi trạng thái PORTB thay đổi

o RBIE=0: không cho phép ngắt khi trạng thái PORTB thay đổi

 T0IF: cờ báo ngắt timer 0

o T0IF=1: báo hiệu TIMER 0 tràn

o T0IF=0: báo hiện TIMER 0 chưa tràn

 INTF: cờ báo ngắt ngoài RB0/INT

o INTF=1: báo hiệu ngắt ngoài trên chân RB0/INT

o INTF=0: báo hiệu ngắt ngoài trên chân RB0/INT chưa xuất hiện

 RBIF: cờ báo ngắt khi trạng thái PORTB thay đổi

o RBIF=1: báo hiệu có ngắt thay đổi trạng thái trên các chân RB4:RB7

o RBIF=0: ngắt thay đổi trạng thái trên các chân RB4:RB7 chưa xuất hiện

Thanh ghi PIE1 (thanh ghi cho phép ngắt ngoại vi)

PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

Chức năng các bit:

 PSPIE: cho phép ngắt ghi vàø đọc của port song song

o PSPIE=1: cho phép ngắt ghi/đọc của port song song

o PSPIE=0: không cho phép ngắt ghi/đọc của port song song

 ADIE: cho phép ngắt chuyển đổi A/D

o ADIE=1: cho phép ngắt chuyển đổi A/D

o ADIE=0: không cho phép ngắt chuyển đổi A/D

 RCIE: cho phép ngắt nhận USART

Trang 34

o RCIE=1: cho phép ngắt nhận USART.

o RCIE=0: không cho phép ngắt nhận USART

 TXIE: cho phép ngắt truyền USART

o TXIE=1: cho phép ngắt truyền USART

o TXIE=0: không cho phép ngắt truyền USART

 SSPIE: cho phép ngắt port nối tiếp đồng bộ

o SSPIE=1: cho phép ngắt port nối tiếp đồng bộ

o SSPIE=0: không cho phép ngắt port nối tiếp đồng bộ

 CCP1IE: cho phép ngắt CCP1

o CCP1E=1: cho phép ngắt CCP1

o CCP1E=0: không cho phép ngắt CCP1

 TMR2IE: cho phép ngắt xảy ra khi nội dung TMR2 bằng thanh ghi PR2

o TMR2IE=1: cho phép ngắt xảy ra khi TMR2 bằng thanh ghi PR2

o TMR2IE=0: không cho phép ngắt trên xảy ra

 TMR1IE: bit cho phép ngắt tràn timer 1

o TMR1IE=1: cho phép ngắt khi timer 1 bị tràn

o TMR1IE=0: không cho phép ngắt khi timer 1 bị tràn

Thanh ghi PIR1 (Thanh ghi cờ của các ngắt ngoại vi)

PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

Chức năng các bit:

 PSPIF: cờ ngắt ghi vàø đọc của port song song

o PSPIF=1: một tác vụ ghi/đọc đã diễn ra

o PSPIF=0: tác vụ ghi/đọc chưa diễn ra

 ADIF: cờ báo ngắt chuyển đổi A/D

o ADIF=1: quá trình chuyển đổi A/D đã hoàn thành

o ADIF=0: quá trình chuyển đổi A/D chưa hoàn tất

 RCIF: cờ báo ngắt nhận USART

o RCIF=1: buffer nhận USART đã đầy

o RCIF=0: buffer nhận USART còn trống

 TXIF: cờ báo ngắt phát USART

o TXIF=1: buffer truyền USART còn trống

o TXIF=0: buffer truyền USART còn trống

Trang 35

 SSPIF: cờ báo ngắt SSP

o SSPIF=1: ngắt SSP đã xảy ra vàø phải được xóa bằng phần mềm trước khi trở về chương trình chính

o SSPIF=0: ngắt SSP chưa xảy ra

 CCP1IF: cờ báo ngắt CCP1

o Chế độ bắt giữ:

 CCP1F=1: việc bắt giữ theo timer 1 đã xảy ra (phải được xóa bằng phần mềm)

 CCP1F=0: việc bắt giữ theo timer 1 chưa xảy ra

o Chế độ so sánh:

 CCP1F=1: khi các giá trị so sánh trong thanh ghi TMR1 được thỏa (phải được xóa bằng phần mềm)

 CCP1E=0: các giá trị so sáng trong thanh ghi TMR1 không thỏa

 TMR2IF: cờ báo ngắt xảy ra khi nội dung TMR2 bằng thanh ghi PR2

o TMR2IF=1: khi TMR2 bằng thanh ghi PR2 (phải được xóa bằng phần mềm)

o TMR2IF=0: khi TMR2 chưa bằng PR2

 TMR1IF: báo có hiện tượng tràn timer 1

o TMR1IF=1: khi timer 1 bị tràn (phải được xóa bằng phần mềm)

o TMR1IF=0: khi timer 1 chưa bị tràn

Thanh ghi PIE2 (Thanh ghi cho phép ngắt ngoại vi 2)

Chức năng các bit:

 Bit 7: không sử dụng (đọc về là 0)

 CMIE: cho phép ngắt bộ so sánh điện thế

o CMIE=1: cho phép ngắt bộ so sánh điện thế

o CMIE=0: không cho phép ngắt bộ so sánh điện thế

 Bit 5: không sử dụng (đọc về là 0)

 EEIE: cho phép ngắt ghi EEPROM

o EEIE=1: cho phép ngắt ghi EEPROM

o EEIE=0: không cho phép ngắt ghi EEPROM

Trang 36

 BCLIE: cho phép ngắt do xung đột bus

o BCLIE=1: cho phép ngắt do xung đột bus

o BCLIE=0: không cho phép ngắt do xung đột bus

 Bit 2: bit1: không sử dụng (đọc về là 0)

 CCP2IE: cho phép ngắt CCP2

o CCP2IE=1: cho phép ngắt CCP2

o CCP2IE=0: không cho phép ngắt CCP2

Thanh ghi PIR2

Chức năng các bit:

 Bit 7: không sử dụng (đọc về là 0)

 CMIF: cờ báo ngắt bộ so sánh điện thế

o CMIF=1: ngõ vàøo bộ so sánh đã thay đổi

o CMIF=0: ngõ vàøo bộ so sánh không thay đổi

 Bit 5: không sử dụng (đọc về là 0)

 EEIF: cờ báo ngắt ghi EEPROM

o EEIF=1: ghi EEPROM đã hoàn thành (phải được xóa bằng phần mềm)

o EEIF=0: ghi EEPROM chưa hoàn thành hay chưa bắt đầu

 BCLIF: cờ báo ngắt do xung đột bus

o BCLIF=1: xung đột bus đã xuất hiện trong chế độ SSP

o BCLIF=0: không xuất hiện xung đột bus

 Bit 2: bit1: không sử dụng (đọc về là 0)

 CCP2IF: cờ báo ngắt CCP2

o Chế độ bắt giữ:

 CCP2IF=1: việc bắt giữ theo timer 1 đã hoàn thành (phải được xóa bằng phần mềm)

 CCP2IF=0: việc bắt giữ theo timer 1 chưa hoàn thành

o Chế độ so sánh:

 CCP2IF=1:khi các giá trị so sánh trong TMR1 được thoả (phải được xóa bằng phần mềm)

 CCP2IF=0: khi các giá trị so sáng trong TMR1 chưa đượcthỏa

Trang 37

e Vàán đề sử dụng ngắt trong CCS

Các hàm thiết lập hoạt động ngắt:

enable_interrupts(level)

Trong đó level bao gồm:

INT_AD Chuyển đổi A/D đã hoàn tất

INT_BUSCOL Ngắt xung đột bus

INT_BUTTON Ngắt nút nhấn

INT_CCP1 Có capture hay compare trên CCP1

INT_CCP2 Có capture hay compare trên CCP2

INT_COMP Kiểm tra bằng nhau trên comparator

INT_EEPROM Hoàn thành ghi EEPROM

INT_EXT Ngắt ngoài

INT_I2C Ngắt khi có hoạt động I2C

INT_LCD Ngắt khi có hoạt động LCD

INT_LOWVOL

T Ngắt khi phát hiện điện áp thấp

INT_PSP Ngắt khi có data ra/vàøo parallel slave port

INT_RB Ngắt khi có bất kì thay đổi nào trên chân từ RB4:RB7

INT_RC Ngắt khi có bất kì thay đổi nào trên các chân từ RC4:RC7INT_RDA Ngắt khi data nhận từ giao tiếp RS232 đã sẵn sàng

INT_RTCC Ngắt khi tràn timer 0

INT_TIMER0 Ngắt khi tràn timer 0

INT_TIMER1 Ngắt khi tràn timer 1

INT_TIMER2 Ngắt khi tràn timer 2

INT_OSCF Ngắt khi có lỗi OSC

INT_PWMTB Ngắt của PWM time base

Để cho phép một ngắt nào đó, trước tiên, ta phải bật bit GIE bằng cách thực hiện lệnh: enable_interrupts(global)

Ví dụ: để cho phép ngắt timer0 vàø timer1 hoạt động:

Ta thực hiện các lệnh sau:

enable_interrupts ( global );

enable_interrupts (int_timer0);

enable_interrupts (int_timer1 ) ;

Trang 38

disable_interrupts(level)

Chức năng: vô hiệu hóa một ngắt bằng cách xóa bit cho phép ngắt về 0 Trong đó, khai báo level hoàn toàn tương tự như phầntrước Không dùng hàm này trong chương trình phục vụ ngắt vì không có tác dụng, cờ ngắt luôn bị xóa tự động

Disable_interrupts(global) sẽ có chức năng cấm tất cả các ngắt

Khai báo chương trình phục vụ ngắt:

(Sẽ được trình bày trong phần phụ lục về CCS)

G Sử dụng giao tiếp theo chuẩn giao tiếp I2C trong PIC 16F877A

a Giới thiệu chung về chuẩn giao tiếp I2C

 I2C (Inter- Intergrated Circuit) là một chuẩn giao tiếp do Philips phát triển,được sử dụng rộng rãi trong việc kết nối các ngoại vi có tốc độ thấp vàøo các mạch thích hợp

 I2C sử dụng hai đường truyền tín hiệu hai chiều, một đường CLOCK vàø một đường DATA, sử dụng hiệu điện thế 5V Các đường day này được kéo lên nguồn bằng các điện trở

 I2C có thể hoạt động ở nhiều mode: mode chuẩn (standard mode) 100kbits/

s, mode tốc độ thấp (low-speed mode) 10kbits/s

 I2C sử dụng 7 bit để định địa chỉ Do đó có tất cả 112 thiết bị có thể kết nốivàøo một bus (16 địa chỉ được sử dụng vàøo các mục đích riêng) Điểm mạnh

Trang 39

của I2C là với hai chân của vi điều khiển có thể giao tiếp cả một mạng thiết bị.

b Giao thức giao tiếp trong chuẩn i2c

Một số khái niệm:

 Master: thiết bị kiểm soát thông điệp (message), có nhiệm vụ tạo xung clock, tạo điều kiện START, STOP

 Slave: Thiết bị được kiểm soát bởi master

Sơ lược về các trạng thái của bus I2C:

Bus không bận: cả hai đường SCL vàø SDA đều ở mức cao

Điều kiện start: xảy ra khi có sự chuyển tiếp từ mức cao sang mức

thấp trên SDA khi SCL đang ở mức cao

Điều kiện stop: xảy ra khi có sự chuyển tiếp từ mức thấp sang mức

cao trên SDA khi SCL đang ở mức cao

Dữ liệu phù hợp:

o Sau điều kiện START, dữ liệu phải ổn định trên SDA khi SCL đang ở mức cao Dữ liệu phải được thay đổi trên đường SDA khi SCL đang ở mức thấp

o Mỗi lần chuyển dữ liệu, dữ liệu phải nằm giữa hai điều kiện START vàø điều kiện STOP, số byte được truyền không bị giới hạn Sau mỗi lần truyền, nếu thiết bị nhận nhận được dữliệu thì nó sẽ tạo ra một bit thứ 9 (acknowledge)

Acknowledge:

o Mỗi thiết bị nhận (đã được xác đinh đúng địa chỉ của mình phải tạo ra một điều kiện Acknowledgebằng cách kéo bus SDA xuống mức thấp trongsuốt thời gian mức cao của SCL ứng với bịt ACK do master tạo ra (xem hình vẽ)

o Để kết thúc việc truyền nhận dữ liệu, master sẽ không tạo raxung ACK Trong điều kiện này, slave phải để đường SDA ởmức cao để cho master có thể tạo điều kiện STOP

Ngày đăng: 06/10/2014, 11:43

HÌNH ẢNH LIÊN QUAN

Sơ đồ chân cuả PIC 16F877A - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
Sơ đồ ch ân cuả PIC 16F877A (Trang 6)
Bảng tóm tắt chức năng các chân Port B - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
Bảng t óm tắt chức năng các chân Port B (Trang 10)
Hỡnh sau đõy trỡnh bày sơ đồ bộ prescaler  cho timer 0 vàứ WDT - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh sau đõy trỡnh bày sơ đồ bộ prescaler cho timer 0 vàứ WDT (Trang 22)
Sơ đồ các nguồn ngắt bên trong pic 16f877a - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
Sơ đồ c ác nguồn ngắt bên trong pic 16f877a (Trang 30)
Hình II.1. Sơ đồ khối cấp nguồn - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.1. Sơ đồ khối cấp nguồn (Trang 53)
Hình II.2. Sơ đồ khối ma trận phím nhấn 4x4 - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.2. Sơ đồ khối ma trận phím nhấn 4x4 (Trang 54)
Hình II.3 Sơ đồ khối vi xử lí - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.3 Sơ đồ khối vi xử lí (Trang 55)
Hình II.4. Sơ đồ kết nối LCD. - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.4. Sơ đồ kết nối LCD (Trang 56)
Hình II.5. Khối giao tiếp với PC - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.5. Khối giao tiếp với PC (Trang 57)
Hình II.6. Sơ đồ kết nối của IC real-time DS1307 - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.6. Sơ đồ kết nối của IC real-time DS1307 (Trang 58)
Hình II.8. Trình tự thực hiện việc ghi dữ liệi lên DS1307 - đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thông
nh II.8. Trình tự thực hiện việc ghi dữ liệi lên DS1307 (Trang 61)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w