1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Đồ án kit thực tập đa năng PIC

213 218 0

Đ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 213
Dung lượng 7,04 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Khi ñó nếu ñược cho phép hoạt ñộng, bộ ñếm của WDT sẽ bị xóa nhưng WDT vẫn tiếp tục hoạt ñộng bit PD STATUS ñược reset về không, bit TO ñược set, oscillator ngưng hoạt ñộng và các PORT

Trang 1

MỤC LỤC CHƯƠNG 0 DẪN NHẬP trang 9

PHẦN I : KHẢO SÁT VI đIỀU KHIỂN PIC 16F877A trang 10

CHƯƠNG I: CẤU TRÚC PHẦN CỨNG CỦA 16F877A trang 11

1.1 Sơ lượt về vi ựiều khiển PIC 16F877A trang 11

1.2 Sơ lượt về các chân của PIC 16F877A trang 17

1.3 Một số ựiểm ựặc biệt của CPU trang 17

1.3.1 Dao ựộng trang 17

1.3.2 Reset trang 18

1.3.3 MCLR (Master clear) trang 18

1.3.4 Interrupts trang 19

1.3.5 Chế ựộ nguồn thấp Sleep (Power down Mode) trang 20

1.3.6 Bộ ựịnh thời giám sát (Watch Dog Timer Ờ WDT) trang 20

1.4 Tổ chức bộ nhớ trang 21

1.4.1 Bộ nhớ chương trình trang 21

1.4.2 Bộ nhớ dữ liệu trang 22

1.4.2.1Vùng Ram đa Mục đắch trang 24

1.4.2.2 Vùng thanh ghi chức năng ựặt biệt trang 24

1.4.3 Các thanh ghi chức năng ựặc biệt trang 27

1.4.3.1.Thanh ghi trạng thái (Status register) trang 27

1.4.3.2 Thanh ghi tùy chọn (Option Reg_Register) trang 28

1.4.3.3 Thanh ghi ựiều khiển ngắt INTCON trang 29

1.4.3.4 Thanh ghi cho phép ngắt ngoại vi 1 trang 30

1.4.3.5 Thanh ghi cờ của các ngắt ngoại vi 1 trang 30

1.4.3.6 Thanh ghi cho phép ngắt ngoại vi 2 trang 31

1.4.3.7 Thanh ghi cờ của các ngắt ngoại vi 2 trang 32

1.4.4 PCL và PCLATH trang 32

1.4.5 Ngăn xếp Stack trang 33

1.4.6 định ựịa chỉ trực tiếp và ựịa chỉ gián tiếp, thanh ghi INF và FSR trang 33

1.5 I/O port trang 34

1.5.1 Port A và thanh ghi TRIS A trang 35

1.5.2 Port B và thanh ghi TRIS B trang 36

1.5.3 Port C và thanh ghi TRIS C trang 38

1.5.4 Port D và thanh ghi TRIS D trang 39

1.5.5 Port E và thanh ghi TRIS E trang 39

CHƯƠNG II: BỘ đỊNH THỜI trang 41

2.1 Bộ ựịnh thời timer 0 trang 41

2.1.1 Giới thiệu trang 41

2.1.2 Hoạt ựộng của bộ ựịnh thời trang 41

2.1.3 Ngắt Timer 0 trang 41

2.1.4 Sử dụng Timer 0 với nguồn xung clock ngoài trang 42

2.1.5 Bộ tiền ựịnh tỉ lệ 8 bit của Timer 0 trang 42

2.2 Bộ ựịnh thời Timer 1 trang 42

2.2.1 Giới thiệu trang 42

2.2.2 Thanh ghi ựiều khiển Timer 1 trang 43

2.2.3 Chế ựộ ựịnh thời trong hoạt ựộng của Timer 1 trang 43

Trang 2

2.2.5 Giao ñộng riêng của Timer 1 trang 44 2.2.6 Ngắt Timer 1 trang 44 2.3 Bộ ñịnh thời Timer 2 trang 44 2.3.1 Giới thiệu trang 44 2.3.2 Thanh ghi ñiều khiển T2CON trang 45 2.3.3 Xóa các bộ tỉ lệ trang 45 2.3.4 Nguồn xung clock cho Timer 2 trang 45 2.3.5 Thanh ghi TMR2 và PR2 trang 46 2.3.6 Tín hiệu báo trạng thái cân bằng trang 46 2.3.7 Chế ñộ ngủ trang 46 CHƯƠNG III: MODULE CCP trang 47 3.1 Giới thiệu trang 47 3.2 Thanh ghi ñiều khiển module CCP trang 47 3.3 Chế ñộ Capture trang 48 3.3.1 Bộ ñịnh tỉ lệ của CCP trang 48 3.4 Chế ñộ Compare trang 48 3.5 Chế ñộ ñiều biến xung PWM trang 49 3.5.1 Chu kỳ PWM trang 49 3.5.2.Chu kỳ nhiệm vụ của PWM trang 50 3.5.3 Cài ñặt hoạt ñộng cho PWM trang 50 3.5.4 Module MSSP trang 51 CHƯƠNG IV: BỘ BIẾN ðỔI ADC 10 BIT trang 53 4.1 Giới thiệu module ADC 10 bit trang 53 4.2 Các thanh ghi ñiều khiển trang 53 4.3 Hoạt ñộng của Module ADC trang 54 4.4.Thời gian lấy mẫu trang 55 4.5 Lựa chọn xung clock cho biến ñổi ADC trang 56 4.6 Cấu hình các chân Analog trang 57 4.7 Chuyển ñổi ADC trang 57 4.8 Hoạt ñộng của module ADC trong chế ñộ ngủ trang 58 4.9 Ảnh hưởng của Reset trang 58 CHƯƠNG V: ðIỆN THẾ THAM CHIẾU VÀ CÁC BỘ SO SÁNH ðIỆN trang 59 5.1 Module Comparator trang 59 5.1.1 Giới thiệu về module comparator trang 59 5.1.2 Cài ñặt chế ñộ cho bộ so sánh trang 59 5.1.3 Nguồn tham chiếu của bộ so sánh trang 61 5.1.3.1 Tín hiệu ñiện áp tham chiếu ngoại trang 61 5.1.3.2 Tín hiệu ñiện áp tham chiếu nội trang 61 5.1.4 Thời gian ñáp ứng trang 61 5.1.5 Tín hiệu ngõ ra của bộ so sánh trang 61 5.1.6 Ngắt của các bộ so sánh trang 62 5.1.7 Hoạt ñộng của các bộ so sánh trong chế ñộ ngủ trang 62 5.1.8 Ảnh hưởng của Reset trang 62 5.2 Module ñiện áp tham chiếu trang 62 5.2.1 Giới thiệu module ñiện áp tham chiếu trang 62 5.2.2 Thanh ghi ñiều khiển CVRCON trang 63 5.2.3 ðộ chính xác của ñiện áp tham chiếu trang 63

Trang 3

5.2.4 Hoạt động của module VREF trong chế độ ngủ trang 63 5.2.5 Trạng thái của module khi Reset trang 63 5.2.6 Sử dụng module với các mạch ngồi trang 64 5.3 Giao Tiếp Nối Tiếp trang 64 5.3.1 Usart trang 64 5.3.1.1 Usart bất đồng bộ trang 65 5.3.1.2 Truyền Dữ Liệu Qua Chuẩn Giao Tiếp Usart Bất Đồng Bộ trang 65 5.3.1.3 Nhận Dữ Liệu Qua Chuẩn Giao Tiếp Usart Bất Đồng Bộ trang 66 5.3.2 Usart Đồng Bộ trang 68 5.4.2.1 Truyền dữ liệu qua chuẩn giao tiếp usart đồng bộ master mode trang 68 5.3.2.2 Nhận dữ liệu qua chuẩn giao tiếp usart đồng bộ master mode trang 69 5.3.3 Truyền dữ liệu qua chuẩn giao tiếp usart đồng bộ slave mode trang 69 5.3.4 Nhận dữ liệu qua chuẩn giao tiếp usart đồng bộ slave mode trang 70 5.4 MSSP trang 71 5.5 SPI trang 71 5.6 I2C trang 74 5.6.1 I2C Slave Mode trang 75 5.6.2 I2C Master Mode trang 81 5.7 Cổng Giao Tiếp Song Song Psp (Parallel Slave Port) trang 86 5.8 Các Đặc Tính Của Oscillator trang 87 CHƯƠNG VI: TÂP LỆNH SỬ DUNG TRONG CCS trang 88 PHẦN II: CÁC THÀNH PHẦN CỦA KIT THỰC TÂP PIC 16F877A trang 113 CHƯƠNG I: HIỂN THỊ LED ðƠN trang120 1.1 Giới thiệu chung trang120 1.2 Mạch nguyên lý trang120 CHƯƠNG II: HIỂN THỊ LED 7 ðOẠN trang121 2.1 Các khái niệm cơ bản trang121 2.2 Kết nối với vi điều khiển trang122 2.3 Giao tiếp vi điều khiển với nhiều led 7 đoạn trang122 2.4 Lưu đồ giải thuật trang123 2.5.Mạch nguyên lý trang124 CHƯƠNG III: ðÈN GIAO THƠNG trang125 3.1 Giới thiệu trang125 3.2 Sơ đồ nguyên lý trang125 3.3 Lưu đồ giải thuật trang126 CHƯƠNG IV: LED MA TRẬN trang127 4.1 Hiện thị led ma trận trang127 4.1.1 Giới thiệu trang128 5.1.2 Led ma trận 8x8 trang128 4.2 Phương pháp hiển thị bằng IC chốt trang129 4.2.1 Chốt hàng trang129 4.2.2 Chốt cột trang129 4.3 Phương pháp dùng thanh ghi dịch trang130 4.3.1 Quét hàng trang130 4.3.1.1 Giới thiệu chung về phương pháp quét hàng trang131 4.3.1.2 Quá trình thực hiện quét hàng trang131

Trang 4

4.3.2 Quét cột trang133 4.3.2.1 Giới thiệu chung về phương pháp quét cột trang133 4.3.2.2 Quá trình thực hiện quét cột trang133 4.3.2.3 Ví dụ trang134 4.4 Mạch nguyên lý trang134 CHƯƠNG V: LCD trang135 5.1 Giới thiệu chung về LCD trang136 5.1.1 Các thanh ghi trang137 5.1.2 Cờ báo bận BF trang137 5.1.3 Bộ ñếm ñịa chỉ AC trang138 5.1.4 Vùng RAM hiển thị DDRAM trang138 5.1.5 Vùng ROM chứa ký tự CGROM trang139 5.1.6 Vùng RAM chứa ký tự ñồ họa CGRAM trang140 5.2 Tập lệnh của LCD trang141 5.3 Khởi tạo LCD trang143 5.3.1 Mạch khởi tạo bên trong chip HD44780 trang143 5.3.2 Khởi tạo bằng lệnh trang144 5.4 Lưu ñồ giải thuật trang145 5.5 Mạch nguyên lý trang146 CHƯƠNG VI: ADC trang147 6.1 Giới thiệu về module ADC trang147 6.1.1 Cơ bản về ADC trang148 6.1.2 ADC trong PIC 16F877A trang148 6.2 Sơ ñồ nguyên lý trang148 CHƯƠNG VII: BÀN PHÍM GIAO TIẾP LCD trang149 7.1 Keypad và nguyên lý hoạt ñộng trang149 7.2 Keypad giao tiếp với LCD trang149 7.3 Sơ ñồ giải thuật trang150 CHƯƠNG VIII: EEPROM 24C04 trang151 8.1 Giới Thiệu trang151 8.2 Hình dạng trang151 8.3 Sơ ñồ cấu tạo trang152 8.4 Sơ ñồ chân .trang152 8.5 Mạch nguyên lý trang153 CHƯƠNG IX: ðO NHIỆT ðỘ DÙNG LM35 trang154 9.1 Giới thiệu trang154 9.2 Một số ñặc tính cơ bản của LM35 trang154 9.3 Mạch nguyên lý .trang155

PHẦN III: CÁC BÀI TẬP THỰC HÀNH trang156 Bài 1: hiển thị trạng thái port trên led trang157 Bài 2: hiển thị trạng thái các port và thay ñổi thời gian delay trang158 Bài 3: hiển thị ngày tháng năm sinh trên led 7 trang159 Bài 4: hiển thị ñồng hồ trên led 7 trang160 Bài 5: chương trình ñèn giao thông trang161 Bài 6: chẠy chữ led ma trận trang162 Bài 7: hiển thỊ ký tự trên lcd trang163

Trang 5

19183173Bài 8: giao tiếp bàn phím số hex hiển thị lcd trang164 Bài 9: ñiều chỉnh adc hiển thị led ñơn trang165 Bài 10: ño nhiệt ñộ trang166

PHẦN VI: GIẢI CÁC BÀI TẬP THỰC HÀNH trang167 Bài 1: hiển thị trạng thái port trên led ñơn trang168 Bài 2: hiển thị trạng thái các port và thay ñổi thời gian delay trang171 Bài 3: hiển thị ngày tháng năm sinh trên led 7 trang179 Bài 4: hiển thị ñồng hồ trên led 7 trang181 Bài 5: chương trình ñèn giao thông trang183 Bài 6: chạy chữ led ma trận trang186 Bài 7: hiển thị ký tự trên lcd trang191 Bài 8: giao tiếp bàn phím số hex hiển thị lcd trang192 Bài 9: ñiều chỉnh adc hiển thị led ñơn trang196 Bài 10: ño nhiệt ñộ trang197

PHẦN VI: PHỤ LỤC trang206 Phụ lục 1: 16F877A trang207 Phụ lục 2: DEFS_16F877A trang213

Trang 6

I ðẶT VẤN ðỀ:

Ngày nay với sự phát triển của công nghiệp vi ñiện tử, kỹ thuật số các hệ thống ñiều khiển dần ñược tự ñộng hóa Với các kỹ thuật tiên tiến như vi xử lý, vi mạch số…ñược ứng dụng vào lãnh vực ñiều khiển, thì các hệ thống ñiều khiển cơ khí thô sơ, với tốc ñộ

xử lý chậm chạm ít chính xác ñược thay thế bằng các hệ thống ñiều khiển tự ñộng với các lệnh chương trình ñã ñược thiết lập trước

ðể có thể học tốt môn vi ñiều khiển chúng ta phải có thiết bị học tập một trong những thiết bị ñó là kit thực tập, và ñược sự ñồng ý của khoa ðiện Tử - Tin Học Trường Cao ðẳng Kỹ Thuật Cao Thắng Nhóm chúng em quyết ñịnh làm ñề tài tốt nghiệp: “Kit Thực Tập Vi ðiều Khiển Pic”

II GIỚI HẠN ðỀ TÀI:

Với thời gian gần năm tuần thực hiện ñề tài cũng như trình ñộ chuyên môn có hạn, chúng em ñã cố gắng hết sức ñể hoàn thành ñồ án này nhưng chỉ giải quyết ñược những vấn ñề sau:

III MỤC ðÍCH NGHIÊN CỨU :

Mục ñích trước hết khi thực hiện ñề tài này là ñể hoàn tất chương trình môn học ñể

ñủ ñiều kiện ra trường Cụ thể khi nghiên cứu ñề tài là chúng em muốn phát huy những thành quả ứng dụng của vi ñiều khiển ñể tạo ra những sản phẩm cho các bạn sinh viên khóa sau Không những thế nó còn là tập tài liệu cho các bạn sinh viên tham khảo

Ngoài ra quá trình thực hiện ñề tài là một cơ hội ñể chúng em tự kiểm tra lại những kiến thức ñã học ở trường ðồng thời phát huy tính sáng tạo, khả năng giải quyết một vấn

ñề theo nhu cầu ñặt ra Và ñây cũng là dịp ñể chúng em khẳng ñịnh mình trước khi ra trường ñể tham gia vào các hoạt ñộng sản xuất của xã hội

Trang 8

1.1 SƠ LƯỢC VỀ VI ðIỀU KHIỂN PIC16F877A

Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài

14 bit Mỗi lệnh đều được thực thi trong một chu kì xung clock Tốc độ hoạt động tối

đa cho phép là 20 MHz

PIC 16F877A là dịng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng, 40 chân,

bộ nhớ đủ cho hầu hết các ứng dụng thơng thường) Cấu trúc tổng quát của PIC16F877A

như sau:

- 8 K Flash ROM

- 368 Bytes RAM

- 256 Bytes EEPROM

- 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập

- 2 bộ định thời 8 bits (Timer 0 và Timer 2)

- Một bộ định thời 16 bits (Timer 1) cĩ thể hoạt động trong chế độ tiết kiệm năng lượng (SLEEP MODE) với nguồn xung Clock ngồi

- 2 bơ CCP( Capture / Compare/ PWM)

- 1 bộ biến đổi AD 10 bits, 8 ngõ vào

- 2 bộ so sánh tương tự (Compartor)

- 1 bộ định thời giám sát (WatchDog Timer)

- Một cổng song song 8 bits với các tín hiệu điều khiển

- Một cổng nối tiếp

- 15 nguồn ngắt

- Cĩ chế độ tiết kiệm năng lượng

- Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Programming)

- ðược chế tạo bằng cơng nghệ CMOS

- 35 tập lệnh cĩ độ dài 14 bits

- Tần số hoạt động tối đa 20MHz

CÁC ĐẶC TÍNH NGOẠI VI BAO GỒM CÁC KHỐI CHỨC NĂNG SAU

 Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit

 Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm

dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ

sleep

 Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler

 Hai bộ Capture/so sánh/điều chế độ rông xung

 Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C

 Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ

 Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển

RD, WR,

 CS ở bên ngoài

Trang 9

 Các đặc tính Analog:

 8 kênh chuyển đổi ADC 10 bit

 Hai bộ so sánh

 Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:

 Bộ nhớ flash với khả năng ghi xóa được 100.000 lần

 Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần

 Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm

 Khả năng tự nạp chương trình với sự điều khiển của phần mềm Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân Watchdog Timer với bộ dao động trong

 Chức năng bảo mật mã chương trình

 Chế độ Sleep

 Có thể hoạt động với nhiều dạng Oscillator khác nhau

1.2 SƠ LƯỢC VỀ CÁC CHÂN CỦA PIC16F877A

Trang 13

PIC16F877A là họ vi ñiều khiển có 40 chân, mỗi chân có một chức năng khác nhau Trong ñó có một số chân ña công dụng: mỗi chân có thể hoạt ñộng như một ñường xuất nhập hoặc là một chân chức năng ñặc biệt dùng ñể giao tiếp với các thiết bị ngoại vi

SƠ ðỒ KHỐI PIC16F877A

Trang 14

1.3 MỘT SỐ ðIỂM ðẶC BIỆT CỦA CPU

sử dụng thạch anh dao ñộng nối vào các chân

OSC1 và OSC2 ñể tạo dao ñộng

Việc lựa chọn tụ trong dao ñộng thạch anh dựa vào bảng sau:

Cách Tính Chu Kì Máy

Ví dụ ta sử dụng thạch anh 10Mhz Khi ñó: Tần số dao ñộng của thạch anh là Fosc = 10Mhz → Chu kỳ dao ñộng của thạch anh là Tosc = 1/Fosc= 1/10*106

(s) Chu kỳ máy: T_instruction = 4*Tosc = 4/10*106

(s) = 0.4 µs = 400 ns

1.3.2 RESET

PIC16F877A có thể bị reset bởi nhiều nguyên nhân khác nhau như:

Power-on Reset (POR)

MCLR Reset during sleep

MCLR Reset during normal operation

WDT Reset (during normal operation)

WDT Wake-up (during sleep)

Brown-out Reset (BOR)

Lưu ý: Tụ có giá trị lớn sẽ tăng tính ổn

ñịnh của dao ñộng nhưng cũng làm tăng

thời gian khởi ñộng

Chế ñộ dao ñộng RC ñược sử dụng như một giải pháp tiết kiệm trong các ứng dụng không cần sự chính xác về thời gian

Trang 15

1.3.3 MCLR

PIC16F877A có một bộ lọc nhiễu ở phần MCLR Bộ lọc nhiễu này sẽ phát hiện và

bỏ qua các tín hiệu nhiễu Ngõ vào MCLR trên chân 4 của PIC16F877A Khi ñưa chân này xuống thấp thì các thanh ghi bên trong VðK sẽ ñược tải những giá trị thích hợp ñể khởi ñộng lại hệ thống (Lưu ý: Reset do WDT không làm chân MCLR xuống mức thấp)

Trang 16

1.3.4 INTERRUPTS

PIC16F877A có nhiều nguồn ngắt khác nhau ðây là một số ngắt tiêu biểu :

- Ngắt ngoài xảy ra trên chân INT

Trang 17

1.3.5 CHẾ ðỘ NGUỒN THẤP SLEEP (POWER DOWN MODE)

ðây là chế ñộ hoạt ñộng của VðK khi lệnh sleep ñược thực thi Khi ñó nếu ñược cho phép hoạt ñộng, bộ ñếm của WDT sẽ bị xóa nhưng WDT vẫn tiếp tục hoạt ñộng bit

PD (STATUS <3>) ñược reset về không, bit TO ñược set, oscillator ngưng hoạt ñộng và các PORT giữ nguyên trạng thái như trước khi lệnh sleep ñược thực thi

Do khi chế ñộ sleep dòng cung cấp cho VðK là rất nhỏ nên ta cần thực hiện các bước sau trước khi VðK thực thi lệnh sleep

• ðưa tất cả các chân về trạng thái VDD hoặc VSS.

• Cần ñảm bảo rằng không có mạch ngoại vi nào ñược ñiều khiển bởi dòng

ñiện của VðK vì dòng ñiện nhỏ không ñủ khả năng cung cấp cho các mạch

ngoại vi hoạt ñộng

• Tạm ngưng hoạt ñộng của khối A/D và không cho phép các xung clock bên

ngoài tác dụng vào VðK

• ðể ý chức năng ñiện trở kéo lên của PORTB

1.3.6 BỘ ðỊNH THỜI GIÁM SÁT (WATCH DOG TIMER -WDT)

Giả sử bạn viết một chương trình, bạn mong ñợi chương trình này sẽ chạy nếu không có gì trục trặc xảy ra thì nó sẽ không bao giờ dừng lại, như vậy bạn phải làm một vòng lặp ñể khi chương trình chạy ñến ñiểm cuối thì nó lại quay trở về ñiểm bắt ñầu Nhưng mà hãy xem một trường hợp: Giả sử chương trình kiểm tra một chân input, nếu

nó lên mức cao thì Pic16f877A sẽ tiếp tục kiểm tra một chân input thứ hai có lên mức cao hay không, nếu chân input thứ hai không lên mức cao, con Pic sẽ ngồi ñó chờ và nó sẽ chỉ thoát ra khỏi chỗ ngồi của nó nếu chân input thứ hai lên mức cao

Bây giờ hãy xem một trường hợp khác, giả sử như bạn viết một chương trình, bạn compiled nó thành công, và ngay cả bạn ñã cho chạy mô phỏng từng bước, từng bước một trên máy tính, bằng MPLAB chẳng hạn, có vẻ như mọi chuyện ñều tốt, bạn ñem nạp vào con Pic Sau một thời gian chạy thử, con Pic thình lình bị kẹt vào nơi nào ñó trong chương trình mà không thể thoát ra ñược trạng thái hiện tại ðiều gì là cần thiết ñể giải quyết hai trường hợp trên, reset lại hay vẫn ñể cho nó bị kẹt không thoát ra ñược, ñó là mục ñích của mạch Watchdog

Mạch Watchdog thì không phải là mới mẽ gì, có rất nhiều microprocessors và microcontrollers ñã có mạch Watchdog, nhưng mà nó làm việc ra sao ?

Bên trong vi xử lí Pic có một mạch RC, mạch này cung cấp 1 xung Clock ñộc lập với bất kỳ xung Clock nào cung cấp cho Pic Khi Watchdog Timer (viết tắt là WDT) ñược cho phép (enabled), nó sẽ ñếm bắt ñầu từ 00 và tăng lên 1 cho ñến FFh, khi nó tăng

từ FFh ñến 00 ( FFh+1) thì con Pic sẽ bị Reset bất kể ñang làm gì, chỉ có 1 cách là ngăn không cho WDT ñếm tới 00

Khi Pic16F877A bị kẹt không thể thoát ra khỏi tình trạng hiện tại thì WDT vẫn tiếp tục ñếm mà không bị bất kỳ ñiều gì ngăn cấm nó ñếm tới FF và ñến FF+1, vì vậy nó sẽ reset làm cho chương trình phải khởi ñộng lại từ ñầu

ðể Sử Dụng WDT Chúng Ta Cần Làm 3 Việc

• Thứ nhất, cần thời gian bao lâu ñể reset WDT ?

• Thứ hai, làm sao xoá WDT ?

• Cuối cùng, chúng ta phải nói cho Pic biết chương trình cho phép WDT hoạt ñộng

Trang 18

1.4 TỔ CHỨC BỘ NHỚ

Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương trình (Program memory) và bộ nhớ dữ liệu (Data Memory)

1.4.1 Bộ Nhớ Chương Trình

PIC16F877A cĩ bộ đếm chương trình dài 13 bits cĩ thể định địa chỉ cho khoảng khơng

1FFFh

Mọi sự truy cập ngồi vùng khơng gian nhớ này sẽ khơng cĩ tác dụng Ngồi ra, bộ

0000h và vector ngắt được đặt tại địa chỉ 0004h

Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang (từ page0 đến page 3) Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024 = 8192 lệnh (vì một lệnh sau khi mã hóa sẽ có dung lượng 1 word (14 bit)

Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit (PC<12:0>) Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector) Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector)

Bộ nhớ chương trình không bao gồm:

Bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình Bộ nhớ stack sẽ được đề cập cụ thể trong phần sau

Trang 19

1.4.2 Bộ Nhớ Dữ Liệu:

Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank Mỗi bank có dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau:

Trang 21

1.4.2.1 Vùng Ram đa Mục đắch

Vùng RAM ựa mục ựắch có chiều rộng 8 bit và có thể ựược truy nhập trực tiếp hoặc gián tiếp thông qua thanh ghi FSR Vùng RAM ựa mục ựắch ựược phân phối ở các Bank như sau:

- Bank 0: 96 Bytes từ ựịa chỉ 20h ựến ựịa chỉ 7Fh

- Bank 1: 80 Bytes từ ựịa chỉ A0h ựến ựịa chỉ EFh

- Bank 2: 96 Bytes từ ựịa chỉ 110h ựến ựịa chỉ 16Fh

- Bank 3: 96 Bytes từ ựịa chỉ 190h ựến ựịa chỉ 1EFh

1.4.2.2 Vùng Thanh Ghi Chức Năng đặc Biệt

Các thanh ghi chức năng ựặc biệt ựược sử dụng bởi bộ xử lý trung tâm CPU hoặc các module ngoại vi ựể ựiều khiển hoạt ựộng của VđK Các thanh ghi chức năng ựặc biệt này ựược chia làm 2 loại: loại thứ nhất dùng cho các chức năng của CPU, loại thứ 2 dùng cho các chức năng ngoại vi

Trang 22

Bảng tóm tắt các thanh ghi chức năng ñặc biệt

Trang 24

1.4.3 Các Thanh Ghi Chức Năng ðặc Biệt

1.4.3.1 Thanh Ghi Trạng Thái ( Status Register)

Trang 25

Thanh ghi trạng thái chứa các trạng thái số học của bộ ALU, trạng thái Reset và các bit chọn Bank của bộ nhớ dữ liệu

Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho ñịnh ñịa chỉ gián tiếp)

Each bank is 128 bytes

Bit 4 TO: Bit báo hiệu hoạt ñộng của WDT

1: Lệnh xóa WDT hoặc Sleep xảy ra

0: WDT hoạt ñộng

Bit 3 PD: Bit báo công suất thấp ( Power down bit)

1: Sau khi nguồn tăng hoặc có lệnh xóa WDT

0: Thực thi lệnh Sleep

Bit 2 Z: bit Zero

1: Khi kết quả của một phép toán bằng 0

0: Khi kết quả của một phép toán khác 0

Bit 1 DC: Digit Carry

1: Có một số nhớ ñược sinh ra bởi phép cộng hoặc phép trừ 4 bit thấp 0: Không có số nhớ sinh ra

Bit 0 C: cờ nhớ (Carry Flag)

1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ

0: Không có số nhớ sinh ra

1.4.3.2 Thanh Ghi Tùy Chọn (Option-Reg Register):

Thanh ghi tùy chọn chứa các bit ñiều khiển ñể cấu hình cho các chứa năng như: ngắt ngoài, Timer 0 chức năng kéo lên Vdd của các chân Port B, và thời gian chờ của WDT

Bit 7 RBPU : Bit cho phép PORTB ñược kéo lên nguồn

1: Không cho phép PORTB kéo lên nguồn

0: Cho phép PORTB kéo lên nguồn

Bit 6 INTEDG: Bít lựa chọn cạnh tác ñộng ngắt (INTERRUPT EDGE)

1: Ngắt sẽ ñược tác ñộng bởi cạnh lên của chân RB0/INT

0: Ngắt sẽ ñược tác ñộng bởi cạnh xuống của chân RB0/INT

Bit 5 T0CS: Bit lựa chọn nguồn xung Clock cho Timer 0

1: Xung Clock cung cấp bởi nguồn ngoài qua chân RA4/T0CKI

Trang 26

Bit 4 T0SE: Bit lựa chọn cạnh nào của xung clock tác ñộng lên timer 0

1.4.3.3 Thanh Ghi ðiều Khiển Ngắt INTCON (Interrupt Control Register)

Bit 7 GIE: Bit cho phép ngắt toàn cục

1: Cho phép ngắt toàn cục

0: Không cho phép ngắt

Bit 6 PEIE: Bit cho phép ngắt khi ghi vào EEPROM hoàn tất

1: Cho phép ngắt ghi vào EEPROM hoạt ñộng

0: Không cho phép ngắt ghi vào EEPROM hoạt ñộng

Bit 5 TMR0IE: Bit cho phép ngắt khi timer 0 tràn

1: Cho phép ngắt khi timer 0 tràn

0: Không cho phép ngắt khi timer 0 tràn

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

1: Cho phép ngắt ngoại vi

0: Không cho phép ngắt ngoại vi

Bit 3 RBIE: Cho phép ngắt khi trạng thái PORTB thay ñổi

Trang 27

0: Không xảy ra ngắt

Bit 0 RBIF:Cờ báo ngắt khi có thay ñổi trạng thái PORTB

1: Có thay ñổi

0: Không có thay ñổi xảy ra trên PORTB

1.4.3.4 Thanh Ghi Cho Phép Ngắt Ngoại Vi 1 (PIE1 Register)

Chú ý: Bit PEIE (INTCON<6>) phải ñược set ñể cho phép bất kì ngắt ngọai vi nào xảy ra

Bit 7 PSPIE: Bit cho phép ngắt ñọc/ ghi Port song song

1.4.3.5 Thanh Ghi Cờ Của Các Ngắt Ngoại Vi 1

Bit 7 PSPIF: Cờ ngắt ñọc/ ghi của Port song song

1: Một hoạt ñộng ñọc/ghi ñã diễn ra (phải xóa bằng phần mềm)

Trang 28

Bit 6 ADIF: Cờ báo ngắt chuyển ñổi A/D

1: Một quá trình chuyển ñổi A/D ñã hoàn thành

0: Chuyển ñổi A/D chưa hoàn tất

Bit 5 RCIF: Cờ báo ngắt nhận USART

1: Buffer nhận USART ñầy

0: Buffer nhận USART trống

Bit 4 TXIF: Cờ báo ngắt phát USART

1: Buffer truyền USART trống

0: Buffer truyền USART ñầy

Bit 3 SSPIF: Cờ báo ngắt port nối tiếp ñồng bộ (ngắt SSP)

1: Ngắt SSP xảy ra và phải ñược xóa bằng phần mềm trước khi trở lại chương trình chính từ chương trình phục vụ ngắt

0: Khi các giá trị so sánh trong thanh ghi TMR1 không ñược thỏa

Chế ñộ PWM: Không sử dụng trong chế ñộ này

Bit 1 TMR2IF: Cờ báo ngắt xảy ra khi giá trị trong thanh ghi TMR2 bằng trong thanh ghi PR2

1: Giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải ñược xóa bằng phần mềm)

0: Giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2

Bit 0 TMR1IF: Cờ báo tràn thanh ghi TMR1

1: Thanh ghi TMR1 tràn (phải ñược xóa bắng phần mềm)

0: Thanh ghi TMR1 chưa tràn

1.4.3.6 Thanh Ghi Cho Phép Ngắt Ngoại Vi 2

Chú ý: Bit PEIE (INTCON<6>) phải ñược set ñể cho phép bất kì ngắt ngọai vi nào xảy ra

Bit 7,5,2,1 Unimplemented : read as ‘0’

Bit 6 CMIE: Bit cho phép ngắt do bộ so sánh ñiện thế

1: Cho phép

0: Không cho phép

Trang 29

Bit 4EEIE: Bit cho phép ngắt do ghi EEPROM

1.4.3.7 Thanh Ghi Cờ Của Các Ngắt Ngoại Vi 2

Bit 7,5,2,1 Unimplemented : read as ‘0’

Bit 6 CMIF: Cờ báo ngắt do bộ so sánh

1: Ngõ vào bộ so sánh ñã thay ñổi (phải ñược xóa bằng phần mềm)

0: Ngõ vào bộ so sánh không thay ñổi

Bit 4 EEIF: Cờ báo ngắt ghi EEPROM

1: Ghi EEPROM hoàn tất (phải ñược xóa bằng phần mềm)

0: Ghi EEPROM chưa hoàn tất

Bit 3 BCLIF: Cờ báo ngắt do xung ñột bus

1: Xung ñột bus ñã xuất hiện trong chế ñộ SSP

0: Không có xung ñột bus xảy ra

Bit 0 CCP2IF: Cờ báo ngắt CPP2

(program counter) có ñộ dài 13 bit, ñược

dùng ñể chứa ñịa chỉ của lệnh ñược thực

thi kế tiếp Byte thấp chứa trong thanh

ghi PCL có thể ñọc/ghi một cách trực tiếp

Các bit cao (bit 12:8) chứa trong thanh ghi

PCLATH, không thể ñọc nhưng có thể ghi

gián tiếp bằng cách sử dụng thanh ghi

PCLATH Khi có bất kỳ sự Reset nào xảy

ra, các bit cao của bộ ñếm chương trình PC

sẽ bị xóa Xem thêm hai ví dụ sau ñây ñể

Trang 30

trình PC

1.4.5 Ngăn Xếp Stack

Stack cho phép 8 lệnh gọi chương trình con và ngắt hoạt động Stack chứa địa chỉ

mà chương trình chính sẽ quay về thực hiện từ sau chương trình con hay ngắt ðối với PIC16F877A Stack cĩ độ sâu 8 lớp

Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được vi điều khiển cất vào trong stack Khi một trong các lệnh RETURN, RETLW hat RETFIE được thực thi, giá trị PC sẽ tự động được lấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng qui trình định trước Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá tri6 cất vào Stack lần thứ 2

Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết được khi nào stack tràn Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển bởi CPU

1.4.6 ðịa Chỉ Trực Tiếp Và ðịa Chỉ Gián Tiếp, Thanh Ghi INF Và Thanh Ghi FSR Thanh ghi INF khơng phải là một thanh ghi vật lí Nĩ chứa giá trị của thanh ghi cĩ địa chỉ nằm ở thanh ghi FSR

Ví dụ: Thanh ghi tại địa chỉ 10h cĩ giá trị 5Ah Nếu ta đưa 10h vào thanh ghi FSR thì khi đọc thanh ghi INF ta sẽ cĩ giá trị 5Ah

Trang 31

Data EEPROM và Flash Program Memory

EEPROM là bộ nhớ cĩ khả năng đọc và ghi trong điều kiện làm việc bình thường (khi nguồn Vdd khơng đổi) Bộ nhớ này khơng được định địa chỉ trực tiếp trong bản đồ

bộ nhớ mà được định địa chỉ gián tiếp thơng qua các thanh ghi chức năng đặc biệt:

1.5 I/O PORTS

Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương tác với thế giới bên ngoài Sự tương tác này rất đa dạng và thông qua quá trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng

Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân trong mỗi cổng có thể khác nhau Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài Chức

Trang 32

khiển được thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó

Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD và PORTE

1.5.1 Port A Và Thanh Ghi TRISA

Port A gồm 6 chân từ RA0 đến RA5

Việc ghi giá trị vào thanh ghi TRISA sẽ qui

định các chân của Port A là input hay output

(nếu là 1 thì là input, là output nếu là 0) Việc

đọc thanh ghi Port A sẽ đọc trạng thái của các

chân ở Port A Việc ghi giá trị vào thanh ghi

Port A sẽ thay đổi trạng thái của các chân

Port A Riêng chân RA4 được tích hợp chức

năng là chân cung cấp xung clock ngồi cho

Timer 0 (RA4/T0CKI) Những chân khác

của Port A được đa hợp với các chân ngõ vào

Analog của ADC và chân ngõ vào điện thế so

sánh của bộ so sánh Comparator Hoạt động

của những chân này được quy định bằng

những bit tương ứng trong các thanh ghi

ADCCON1 và CMCON1

Khi các chân của Port A được sử dụng

làm ngõ vào Analog thì các bit trong thanh ghi

TRISA phải được set bằng 1

Trang 33

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

Cấu trúc bên trong và chức năng cụ thể của từng chân trong PORTA sẽ được trình bày cụ thể trong Phụ lục 1

Các thanh ghi SFR liên quan đến PORTA bao gồm:

PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA

TRISA (địa chỉ 85h) : điều khiển xuất nhập

CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh

CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp

ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC

Chi tiết về các thanh ghi sẽ được trình bày cụ thể trong phụ lục 2

1.5.2 Port B Và Thanh Ghi TRISB

Port B gồm 8 chân từ chân RB0-RB7 Việc ghi giá trị vào thanh ghi TRISB sẽ quy định các chân của Port B là input hay output (1: input, 0: output) Việc đọc thanh ghi PortB sẽ đọc trạng thái của các chân ở Port B Việc ghi giá trị vào thanh ghi Port B sẽ thay đổi trạng thái của các chân Port B

Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger và Low

Trang 34

một transistor kéo lên Vdd Chức năng này hoạt động khi bit RBPU (Option <7>) được xĩa Chức năng này sẽ tự động được xĩa khi Port B được quy định là input

Bốn chân của Port B từ RB7 đến RB4 cĩ chức năng ngắt khi trạng thái chân Port B thay đổi (Khi Port B được quy định là output thì chức năng này khơng hoạt động Giá trị chân của PortB được so sánh với giá trị đã được lưu trước đĩ, khi cĩ sự sai lệch giữa 2 giá trị này ngắt sẽ xảy ra với cờ ngắt RBIF (INTCON<0) sẽ bật lên Ngắt cĩ thể làm cho VðK thốt khỏi trạng thái SLEEP

Bất cứ sự truy xuất nào trên PortB sẽ xĩa trạng thái sai lệch, kết thúc ngắt và cho phép xĩa cờ ngắt RBIF

Bảng chức năng PortB

Các thanh ghi SFR liên quan đến PORTB bao gồm:

Trang 35

PORTB (địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB

TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập

OPTION_REG (địa chỉ 81h,181h) : điều khiển ngắt ngoại vi và bộ Timer0 1.5.3 Port C và Thanh Ghi TRISC

Port C gồm 8 chân từ chân RC0-RC7 Việc ghi giá trị vào thanh ghi TRISC sẽ quy định các chân của Port C là input hay output (1: input, 0: output) Việc đọc thanh ghi Port C sẽ đọc trạng thái của các chân ở Port C Việc ghi giá trị vào thanh ghi Port C sẽ thay đổi trạng thái của các chân Port C

Các chân của Port C được đa hợp với các chức năng ngoại vi

Khi các chức năng ngoại vi được cho phép ta cần quan tâm chặt chẽ tới giá trị các bit của thanh ghi TRISC Một số chức năng ngoại vi sẽ ghi đè giá trị 0 lên các bit của thanh ghi TRISC và mặc định các chân này là output, ngồi ra một số chức năng ngoại vi khác sẽ tự động mặc định một số chân là ngõ vào Do đĩ cần xem xét kĩ các tính năng của các hàm ngoại vi để thiết lập giá trị các bit trong thanh ghi TRISC cho thích hợp

Trang 36

Bảng chức năng Port C

Các thanh ghi điều khiển liên quan đến PORTC:

PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC

TRISC (địa chỉ 87h) : điều khiển xuất nhập

1.5.4 Port D Và Thanh Ghi TRISD

Port D gồm 8 chân từ chân RD0-RD7 Bên cạnh chức năng là port xuất nhập, PortD cịn cĩ thể hoạt động như một cổng song song bằng cách set bit PSPMODE (TRISD<4>), trong chế độ này buffer ngõ vào là TTL PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port)

Bảng chức năng Port D

Các thanh ghi liên quan đến PORTD bao gồm:

Thanh ghi PORTD : chứa giá trị các pin trong PORTD

Thanh ghi TRISD : điều khiển xuất nhập

Thanh ghi TRISD : điều khiển xuất nhập PORTD và chuẩn giao tiếp PSP

1.5.4 Port E Và Thanh Ghi TRISE

Port E cĩ 3 chân RE0 /RD/AN5, RE1/WR /AN6, RE2 /CS/AN7, cĩ thể được cấu hình như các chân xuất nhập thơng thường

Các chân của Port E cĩ thể trở thành các chân điều khiển cho cổng song song của VðK khi bit PSPMODE (TRISE<4>) được set bằng 1 Trong chế độ này, người sử dụng phải đảm bảo các chân của PortE là ngõ vào

Ngồi ra các chân Port E cịn cĩ thể được cấu hình như các ngõ vào Analog, tại chế độ này, khi đọc giá trị của các chân này sẽ cho ta giá trị là 0

Trang 37

Thanh ghi TRISE quy định chức năng xuất nhập của Port E ngay cả khi nĩ được sử dụng như các ngõ vào Analog Phải đảm bảo các chân này được quy định là ngõ vào trong chế độ này

Bảng chức năng các chân Port E

Các thanh ghi liên quan đến PORTE bao gồm:

PORTE: chứa giá trị các chân trong PORTE

TRISE: điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP ADCON1 : thanh ghi điều khiển khối ADC

Trang 38

2.1 Bộ ðịnh Thời Timer 0

2.1.1 Giới thiệu

Module Timer 0 là một bộ ñịnh thời/ ñếm 8 bit, có khả năng ñọc và ghi ñược , có một bộ tiền ñịnh tỉ lệ (Prescaler) 8 bit lập trình ñược, có bit lựa chọn nguồn xung clock trong hoặc ngoài, có ngắt khi Timer tràn, có bit lựa chọn cạnh tác ñộng của xung clock ngoài

2.1.2 Hoạt ðộng Của Bộ ðịnh Thời

Chế ñộ ñịnh thời ñược chọn bằng cách xóa bit T0CS (OPTION_REG <5>) Trong chế ñộ này thanh ghi TMR0 sẽ tăng lên sau mỗi chu kì (prescaler không có tác dụng hoặc tỉ lệ 1 :1) Nếu thanh ghi TMR0 ñược ghi một giá trị mới, giá trị trong thanh ghi này sẽ không tăng trong 2 chu kỳ lệnh kế tiếp.Vì vậy ñể khắc phục hiện tượng này chúng

ta có thể hiệu chỉnh giá trị nhập vào thanh ghi TMR0

Chế ñộ ñếm ñược lựa chọn bằng cách set bit T0CS (OPTION_REG <5>) Trong chế ñộ ñếm, thanh ghi TMR0 sẽ tăng lên khi có cạnh lên hoặc cạnh xuống xuất hiện trên chân T0CKL (cạnh lên hoặc cạnh xuống ñược lựa chọn bởi bit T0SE (OPTION_REG<4>, xóa bit T0SE sẽ lựa chọn cạnh lên)

2.1.3 Ngắt Timer 0

Trang 39

Ngắt Timer 0 được tạo ra khi thanh ghi TMR0 tràn từ 0FFh đến 00h Khi xảy ra tràn, cờ T0IF(INTCON<2>) được bật lên Ngắt cĩ thể được ngăn chặn bằng cách xĩa bit T0IE (INTCON<5>) Cờ ngắt T0IF phải được xĩa bằng phần mềm truớc khi thốt khỏi chương trình ngắt trở về chương trình chính

Lưu ý : Ngắt Timer 0 khơng làm VðK thốt khỏi trạng thái ngủ

2.1.4 Sử Dụng Timer 0 Với Nguồn Xung Clock Ngồi

Khi bộ tiền định tỉ lệ khơng được sử dụng, ngõ vào xung clock ngoại cũng giống như ngõ ra bộ tiền định tỉ lệ Nguồn xung clock ngoại sẽ được đồng bộ với xung clock nội bằng cách: nĩ sẽ được lấy mẫu tại chu kỳ Q2 và Q4 của xung clock nội Do đĩ, T0CKI phải ở mức cao ít nhất 2 Tosc và ở mức thấp ít nhất cũng là 2 Tosc

2.1.5 Bộ Tiền ðịnh Tỉ Lệ 8 Bit Của Timer 0

Bộ đếm 8 bit được sử dụng như bộ tiền định tỉ lệ cho Timer 0 hoặc bộ hậu định tỉ lệ cho WDT Bit PSA (OPTION_REG<3>) sẽ lựa chọn bộ đếm này sẽ sử dụng cho Timer0 hay WDT, các bit PS2, PS1, PS0 sẽ xác định tỉ lệ của bộ đếm

Các thanh ghi điều khiển liên quan đến Timer0 bao gồm:

TMR0 (địa chỉ 01h, 101h) : chứa giá trị đếm của Timer0

INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE) OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler

2.2 Bộ ðịnh Thời Timer 1

2.2.1 Giới Thiệu

Timer 1 là một bộ định thời đếm 16 bit bao gồm hai thanh ghi 8 bit (TMR1H và TMR1L), cĩ khả năng đọc được và ghi được Cặp thanh ghi TMR1H và TMR1L sẽ tăng từ 0000h lên FFFFh rồi sau đĩ tràn về 0000h Nếu được cho phép (bit TMR1IE được set), ngắt sẽ xảy ra khi giá trị TMR1 tràn từ FFFFh về 0000h, lúc đĩ cờ ngắt TMR1IF sẽ bật lên

Trang 40

2.2.2 Thanh Ghi ðiều Khiển Timer 1

0 : Không cho phép dao ñộng

Bit 2 T1SYNC : Bit lựa chọn ñồng bộ hóa xung clock ngoài của Timer 1

(Chú ý: Bit này chỉ có tác dụng khi bit TMR1CS = 1)

1: Không ñồng bộ hóa xung clock ngoại

0: ðồng bộ hóa xung clock ngoại

Bit 1 TMR1CS : Bit chọn nguồn xung clock cho Timer 1

1: Chọn xung clock ngoài qua chân T1OSC/T1CKI ( tác ñộng cạnh lên)

0: Chọn xung clock nội (Fosc/4)

Bit 0 TMR1ON: Bit cho phép ngoặc ngưng Timer 1

1: Cho phép

0: Không cho phép

2.2.3 Chế ðộ ðịnh Thời Trong Hoạt ðộng Của Timer 1

này, xung clock cung cấp cho Timer 1 là Fosc/4, bit ñồng bộ T1SYNC (T1CON<2>) không có tác dụng vì xung clock nội ñã luôn luôn ñược ñồng bộ

Xung clock ngoại sẽ ñược ñồng bộ với xung clock nội, hoạt ñộng ñồng bộ ñược thực hiện ngay sau bộ tiền ñịnh tỉ lệ xung (prescaler) Trong chế ñộ ngủ hoạt ñộng ñồng

bộ sẽ bị tắt cho dù có xung clock ngoài thì Timer 1 cũng không tăng ðiều này có nghĩa

là chế ñộ ñếm ñồng bộ sẽ không hoạt ñộng ñược trong chế ñộ ngủ (SLEEP)

Khi chế ñộ sử dụng xung clock ngoài ñược lựa chọn cho Timer 1 ở chế ñộ ñếm ñồng bộ, chúng ta phải ñảm bảo xung clock ngoài ñã ñược ñồng bộ với xung clock nội ðếm bất ñồng bộ :

Nếu bit T1SYNC ñược set, xung clock ngoài sẽ không ñược ñồng bộ hóa Bộ ñịnh thời sẽ tiếp tục ñếm trong suốt quá trình Sleep của VðK và có khả năng tạo ra một ngắt

Ngày đăng: 07/09/2017, 12:01

TỪ KHÓA LIÊN QUAN

w