24
Mô tả tóm tắt

báo cáo PIC

  • Upload
    lang-tu

  • View
    244

  • Download
    2

Embed Size (px)

Citation preview

Page 1: báo cáo PIC

Mô tả tóm tắt

Page 2: báo cáo PIC

Là bộ vi điều khiển 8 bit Tần số hoạt động 20MHz,Chu kỳ lệnh thực hiện trong 200ns Bộ nhớ chương trình Flash 8K Bộ nhớ dữ liệu 368 bytes Bộ nhớ EEPROM 256 bytes Số nguồn ngắt 15 5 cổng vào ra 3 Timer 2 bộ so sánh ,băm xung Truyền thông nối tiếp MSSP,USART hoặc song song PSP Bộ ADC 10 bit với 8 đầu vào Tập lệnh 35 lệnh

Số chân Tên chân linh kiện Chức năng

1 MCLRNẩẩ - Reset CPU- Cáp nguồn Vdd cho chip ở chê độ lập trình

2 RA0/AN0 - Bit DO của cổng giao tiếp song song (Port A)- Ngõ vào analog 0 của ADC

3 RAI/AN 1 - Bit DI của cổng giao tiếp song song (Port A)- Ngõ vào analog 1 của ADC

4 RA2/AN2/VREF- - Bit D2 của cổng giao tiếp song song (Port A).- Ngõ vào analog 2 của ADC.- Cực điện thê tháp của nguồn điện áp chuẩn cho ADC

5 RA3/AN3/VREF+ - Bit D3 của cổng giao tiếp song song (Port A).- Ngõ vào analog 3 của ADC.- Cực điện thê cao của nguồn điện áp chuẩn cho ADC (dùng

6 RA4/T0CKI - Bit D4 của cổng giao tiếp song song (Port A).- Nguồn cáp xung nhịp từ bên ngoài cho timer 0

7 RA5/AN4/XS - Bit D5 của cổng giao tiếp song song (Port A).- Ngõ vào analog 4 của ADC.- Chọn tớ (Slave) cho cộng nôi tiếp bất đồng bộ

8 RE0/^Ỡ/AN5 - Bit DO của cổng giao tiếp song song (Port E).- Ngõ vào analog 5 của ADC.- Cho phép đọc dữ liệu song song từ các ngoại vi.

9 RE1/^Ỡ/AN6 - Bit DI của cổng giao tiếp song song (Port E).- Ngõ vào analog 6 của ADC.- Cho phép ghi dữ liệu song song từ các ngoại vi.

10 RE2/RD/AN7 - Bit D2 của cổng giao tiếp song song (Port E).- Ngõ vào analog 7 của ADC.- Cho phép chọn ngoại vi.

Page 3: báo cáo PIC

11 Vdd - Nguồn cung cấp cho vi điều khiển

12 Vss - Mass nguồn cung cấp

13 OSC1/CLKIN - Cấp xung nhịp.

14 OSC2/CLKOUT - Cấp xung nhịp.

15 RC0/T1OSO/T1CKI - Bit DO của cổng giao tiếp song song (Port C).- Bộ phát xung nhịp từ timerl- Cáp xung nhịp từ bên ngoài cho timerl

16 RC1/T10SI/CCP2 - Bit DI của cổng giao tiếp song song (Port C).- Cáp xung nhịp từ bên ngoài cho timerl- Bộ bắt giữ ngõ vào 2 hoặc so sánh ngõ ra 2 hoặc ngõ ra

17 RC2/CCP1 - Bit D2 của cổng giao tiếp song song (Port C).- Bộ bắt giữ ngõ vào 1 hoặc so sánh ngõ ra 1 hoặc ngõ ra điều rộng xung 1.

18 RC3/SCK/SCL - Bit D3 của cổng giao tiếp song song (Port C).- Xung nhịp ngõ vào hoặc ngõ ra trong chê độ truyền

đồng bộ trong cả 2 chê độ SPI và I2C.

19 RD0/PSP0 - Bit DO của cổng giao tiếp song song (Port D).20 RD1/PSP1 - Bit D I của cổng giao tiếp song song (Port D).21 RD2/PSP2 - Bit D2 của cổng giao tiếp song song (Port D).22 RD3/PSP3 - Bit D3 của cổng giao tiếp song song (Port D).23 RC4/SDI/SDA - Bit D4 của cổng giao tiếp song song (Port C).

- Đường nhập dữ liệu trong mode SPI hoặc đường xuât nhập dữ liệu trong mode I2 C

24 RC5/SDO - Bit D5 của cổng giao tiếp song song (Port C).- Đường xuất dữ liệu trong mode SPI.

25 RC6/TX/CK - Bit Dó của cổng giao tiếp song song (Port C).- Đường truyền dữ liệu nôi tiếp bất đồng bộ trong chế độ truyền bất đồng bộ.- Xung nhịp trong chế độ truyền nôi tiếp đồng bộ.

26 RC7/RX/DT - Bit D7 của cổng giao tiếp song song (Port C).- Đường nhận dữ liệu nôi tiếp bất đồng bộ trong chê độ truyền bất đồng bộ.- Đường dữ liệu trong chê độ truyền nôi tiếp đồng bộ.

Page 4: báo cáo PIC

27 RD4/PSP4 - Bit D4 của cổng giao tiếp song song (Port D).28 RD5/PSP5 - Bit D5 của cổng giao tiếp song song (Port D).29 RD6/PSP6 - Bit Dó của cổng giao tiếp song song (Port D).30 RD7/PSP7 - Bit D7 của cổng giao tiếp song song (Port D).31 vss - Nguồn cung cáp cho vi điều khiển32 VDD - Mass nguồn cung cáp33 RBO/INT - Bit DO của cổng giao tiếp song song (Port B).

- Ngắt ngoài.

34 RB1 - Bit D I của cổng giao tiếp song song (Port B).35 RB2 - Bit D2 của cổng giao tiếp song song (Port B).36 RB3/PGM - Bit D3 của cổng giao tiếp song song (Port B).

- Chê độ lập trình

37 RB4 - Bit D4 của cổng giao tiếp song song (Port B).38 RB5 - Bit D5 của cổng giao tiếp song song (Port B).39 RB6/PGC - Bit Dó của cổng giao tiếp song song (Port B).40 RB7/PGD - Bit D7 của cổng giao tiếp song song (Port B).

-

I. Tìm hiểu các cổng vào ra

5 cổng vào ra la Port A(RA0÷RA5),Port B(RB0÷RB7),Port C(RC0÷RC7),Port D(RD0÷RD7),Port E(RE0÷RE2). Port A: có 6 bit (tương ứng với 6 chân RA0÷RA5) các chân của cổng A có tích hợp một số chức năng ngoại vi,nếu một thiết bị ngoại vi được enable thì cổng này sẽ không hoạt động như một cổng vào ra . Bình thường Port A sẽ là một cổng vào ra 2 chiều. Thanh ghi xác định chiều tương ứng của các chân port A là thanh ghi TrisA. Các bit ở thanh ghi TrisA bằng 1 sẽ xác định các chân ở port A là đầu vào ngược lại sẽ là đầu ra. Port B: rộng 8 bit(tương ứng với 8 chân RB0÷RB7),là một cổng vào ra 2 chiều. Thanh ghi qui đinh chiều của cổng B là thanh ghi Tris B. thiết lập các bit ở thanh ghi TrisB bằng 1 sẽ làm cho cổng B là cổng vào ngược lại sẽ là cổng ra. Port C: rộng 8 bit(tương ứng với các chân RC0÷RC7),bình thường nó là một cổng vào ra 2 chiều, thanh ghi qui định chiều của cổng là thanh ghi TrisC.

Page 5: báo cáo PIC

Các chân RC3,RC4 dùng để kết nối truyền nhận thông tin với các thiết bị ngoại vi. Port D: rộng 8 bit (RD0÷RD7),nó có thể là cổng vào hoặc cổng ra. Port D có thể được cấu hình như một cổng vi xử lý rộng 8 bit (cổng slave song song) bằng cách thiêt lập bit điều khiển PSPSTATUS (TrisE.4). ở chế độ này thì đầu vào là tín hiệu TTL. Port E: rộng 3 bit(RE0÷RE2), được cấu hình là đầu ra hoặc đầu vào. Port E có thể là đầu vào điều khiển I/O khi bit PSPSTATUS (TrisE.4) được thiết lập

II.Tìm hiểu về ngắt

Hoạt động của vi điều khiển khi có sự kiện ngắt xảy ra và ngắt đó đã được cho phép :

- Thực hiện nốt lệnh đang thực hiện- Dừng chương trình đang thực hiện- Lưu lại địa chỉ của lệnh kế tiếp trong chương trình đang thực hiện vào bộ nhớ stack- Nhảy tới địa chỉ 0x04 trong bộ nhớ chương trình- Tại đây, vi điều khiển sẽ thực hiện chương trình con phục vụ ngắt do người lập trình đã lập trình từ trước.- Sau khi thực hiện xong chương trình con phục vụ ngắt, vi điều khiển lấy lại địa chỉ của lệnh kế tiếp đã được lưu và thực hiện tiếp chương trình đang thực hiện dở lúc chưa có ngắt

 Các thuật ngữ dùng cho xử lý ngắt trong vi điều khiển:

- Nguồn ngắt: nguồn ngắt là nguyên nhân gây ra ngắt

- Sự kiện ngắt: khi nguồn ngắt xảy ra- Chương trình con phục vụ ngắt: là chương trình vi điều khiển xử lý khi có sự kiện ngắt xảy ra do người lập trình lập trình ra

- Vecto ngắt: tức địa chỉ 0x04 nơi vi điều khiển chạy tới sau khi lưu địa chỉ trả về- Bit cho phép ngắt: tức việc cho phép vi điều khiển chạy chương trình con phục vụ

Page 6: báo cáo PIC

ngắt khi có sự kiện ngắt xảy ra. Trong vi điều khiển PIC, mỗi ngắt có bit cho phép của nó. Bit này tận cùng bằng chữ E (enable), nằm trong các thanh ghi chuyên dụng. Muốn cho phép ngắt đó, ta phải đưa bit cho phép ngắt tương ứng lên giá trị 1. Ngắt chỉ thực sự được cho phép ngắt khi ta cho bit cho phép ngắt toàn cục GIE (Global Interrupt Enable) lên mức 1

Một số các ngắt khác, như các ngắt ngoại vi bao gồm ADC, PWM v.v Muốn cho phép nó còn phải đưa bit cho phép ngắt ngoại vi lên mức 1

- Cờ ngắt: là bit phản ánh trạng thái của sự kiện ngắt. Mỗi ngắt có một bit cờ. Khi bit cờ này bằng 1 nghĩa là sự kiện ngắt tương ứng với cờ đó xảy ra. Các bit này tận cùng bằng từ F (Flag- cờ). Lưu ý là dù một ngắt có được cho phép hay không thì cờ ngắt vẫn được set lên 1 khi có sự kiện ngắt xảy ra.

 Các ngắt trong vi điều khiển PIC16F877A

Vi điều khiển PIC16F877A có 15 nguồn ngắt. Được chia làm 2 lớp ngắt:- Lớp ngắt cơ bản: bao gồm các ngắt cơ bản như ngắt tràn timer 0, ngắt ngoài, ngắt thay đổi trạng thái của các chân PortB (RB4-RB7).Để cho phép ngắt thực sự xảy ra phải có bit cho phép ngắt toàn cục GIE.- Lớp ngắt ngoại vi: bao gồm các ngắt ngoại vi như ngắt tràn timer 1 (TMR1IE, TMR1IF), ngắt tràn Timer 2(TMR2IE, TMR2IF), ngắt hoàn thành việc chuyển đổi ADC (ADCIE, ADCIF), ngắt hoàn thành việc nhận kí tự trong truyền thông RS232 (RCIE, RCIF), ngắt hoàn thành việc truyền kí tự trong truyền thông RS232 (TXIE, TXIF) v.v Muốn thực sự cho phép các ngắt này ngoài bit cho phép ngắt toàn cục được set phải set cả bỉt cho phép ngắt ngoại vi PEIE.

Thanh ghi INTCON

Bit 0 : Cờ báo ngắt cho các chân RB4-RB7

RBIF =1: Xuất hiện ít nhất một trong các ngắt tại các chân RB4-RB7

RBIF =0: Không xuất hiện ngắt tại các chân RB4-RB7

Bit 1: Cờ ngắt cho chân RB0

INTF =1: Xuất hiện ngắt trên chân ngắt ngoài RB0

Page 7: báo cáo PIC

INTF =0: Không xuất hiện ngắt trên chân ngắt ngoài RB0

Bit 2 : Cờ ngắt cho bộ TIMER 0

TMR0IF =1: Xảy ra tràn trong bộ TIMER 0

TMR0IF =0: Chưa xảy ra tràn trong bộ TIMER 0

Bit 3:

RBIE =1: Cho phép ngắt trên các chân RB4-RB7

RBIE =0: Cấm ngắt trên các chân RB4-RB7

Bit 4:

INTE =1: Cho phép ngắt trên chân RB0

INTE =0: Cấm ngắt trên chân RB0

Bit 5 :

TMR0IE =1: Cho phép ngắt bằng bộ TIMER 0

TMR0IE =0: Cấm ngắt bằng bộ TIMER 0

Bit 6:

PEIE =1: Cho phép ngắt phục vụ cho thiết bị ngoại vi

PEIE =0: Cấm ngắt phục vụ cho thiết bị ngoại vi

Bit 7:

GIE =1: Cho phép tất cả các ngắt được thực hiện

GIE =0: Cấm tất cả các ngắt không được thực hiện

Page 8: báo cáo PIC

1.Ngắt ngoài

Hoạt động:- Nguồn ngắt: là xung đi vào chân RB0 của vi điều khiển PIC- Sự kiện ngắt: sự kiện ngắt xảy ra khi có xung đi vào chân RB0 của vi điều khiển. Xung là xung sườn dương hay sườn âm phụ thuộc bit cài đặt chọn dạng xung, bit INTEDG ( bit 6 của thanh ghi PTION_REG) là 1 hay không.- Bit cho phép ngắt: Để cho phép ngắt ngoài, bit cho phép ngắt ngoài INTIE (bit 4 của thanh ghi INTCON) phải được set lên 1. Ngoài ra, bit cho phép ngắt toàn cục GIE (bit 7 của thanh ghi INTCON) cũng phải được set lên 1.- Cờ ngắt: bit cờ ngắt ngoài là bit INTIF (bit 1 của thanh ghi INTCON) được tự động set lên 1 khi có sự kiện ngắt ngoài xảy ra. Cờ này phải được xóa bằng chương trình (cụ thể là trong chương trình con phục vụ ngắt) để vi điều khiển quản lý chính xác các lần ngắt kế tiếp

Quản lý ngắt ngoài trong chương trình CCS:Trong chương trình chính, cài đặt ngắt:

Page 9: báo cáo PIC

- Cài đặt chân RB0 là chân vào: SET_TRIS_B(0x01)- Cài đặt dạng xung đầu vào là sườn dương hay sườn âm: EXT_INT_EDGE(H_TO_L) hoặc EXT_INT_EDGE(L_TO_H)- Cho phép ngắt ngoài: ENABLE_INTERRUPTS(INT_EXT)- Cho phép ngắt toàn cục: ENABLE_INTERRUPTS(GLOBAL)Chương trình con phục vụ ngắt đặt sau chỉ định biên dịch #INT_EXT:#INT_EXTĐịnh nghĩa chương trình conTrong chương trình con phục vụ ngắt:- Xóa cờ ngắt: CLEAR_INTERRUPT(INT_EXT)- Cấm ngắt toàn cục, đề phòng lúc đang xử lý ngắt, lại có ngắt xảy ra:DISABLE_INTERRUPTS(GLOBAL)- Xử lý ngắt đó: tùy thuộc vào ý đồ của người lập trình- Cho phép ngắt toàn cục: ENABLE_INTERRUPTS(GLOBAL)

2. Ngắt Thay Đổi Trạng Thái Các Chân RB7-RB4:

Hoạt động:- Nguồn ngắt: là trạng thái của một trong các chân RB7-RB4 của vi điều khiển PIC- Sự kiện ngắt: sự kiện ngắt xảy ra khi có sự thay đổi trạng thái (1-0 hay 0-1) của một trong các chân RB7-RB4 của PortB- Bit cho phép ngắt: Để cho phép ngắt này, bit cho phép ngắt RBIE (bit 3 của thanh ghi INTCON) phải được set lên 1. Ngoài ra, bit cho phép ngắt toàn cục GIE (bit 7 của thanh ghi INTCON) cũng phải được set lên 1.- Cờ ngắt: bit cờ ngắt ngoài là bit RBIF (bit 0 của thanh ghi INTCON) được tự động set lên 1 khi có sự kiện ngắt ngoài xảy ra. Cờ này phải được xóa bằng chương trình (cụ thể là trong chương trình con phục vụ ngắt) để vi điều khiển quản lý chính xác các lần ngắt kế tiếp.

Quản lý ngắt RB trong chương trình CCS:Trong chương trình chính, cài đặt ngắt:- Cài đặt chân RB4-RB7 là chân vào: SET_TRIS_B(0xF0)- Cho phép ngắt RB: ENABLE_INTERRUPTS(INT_RB)- Cho phép ngắt toàn cục: ENABLE_INTERRUPTS(GLOBAL)Chương trình con phục vụ ngắt đặt sau chỉ định biên dịch # INT_RB :#INT_RB

Page 10: báo cáo PIC

Định nghĩa chương trình conTrong chương trình con phục vụ ngắt:- Xóa cờ ngắt: CLEAR_INTERRUPT(INT_RB)- Cấm ngắt toàn cục, đề phòng lúc đang xử lý ngắt, lại có ngắt xảy ra:DISABLE_INTERRUPTS(GLOBAL)- Đoc cổng B để loại bỏ trạng thái mismatch????- Xử lý ngắt đó: tùy thuộc vào ý đồ của người lập trình, chú ý đến số lần ngắt- Cho phép ngắt toàn cục: ENABLE_INTERRUPTS(GLOBAL)

3.Ngắt TIMER

Hoạt động:- Nguồn ngắt: là trạng thái tràn của thanh ghi bộ đếm timer 0, TMR0 vi điều khiển PIC- Sự kiện ngắt: sự kiện ngắt xảy ra khi có sự tràn của TMR0, tức là khi TMR0=255 rồi bị xóa- Bit cho phép ngắt: Để cho phép ngắt này, bit cho phép ngắt TMR0IE (bit 5 của thanh ghi INTCON) phải được set lên 1. Ngoài ra, bit cho phép ngắt toàn cục GIE (bit 7 của thanh ghi INTCON) cũng phải được set lên 1.- Cờ ngắt: bit cờ ngắt ngoài là bit TMR0IF (bit 2 của thanh ghi INTCON) được tự động set lên 1 khi có sự kiện ngắt ngoài xảy ra. Cờ này phải được xóa bằng chương trình (cụ thể là trong chương trình con phục vụ ngắt) để vi điều khiển quản lý chính xác các lần ngắt kế tiếp.4.6.2 Quản lý ngắt Timer 0 trong chương trình CCS:Trong chương trình chính, cài đặt ngắt:- Gán giá trị ban đầu cho thanh ghi TMR0, tùy thuộc vào thời gian mà người lập trình muốn (xem lại bài 3): SET_TIMER0(giá trị)- Cho phép ngắt timer 0: ENABLE_INTERRUPTS(INT_TIMER0)- Cho phép ngắt toàn cục: ENABLE_INTERRUPTS(GLOBAL)Chương trình con phục vụ ngắt đặt sau chỉ định biên dịch # INT_TIMER0 :#INT_TIMER0Định nghĩa chương trình conTrong chương trình con phục vụ ngắt:- Xóa cờ ngắt: CLEAR_INTERRUPT(INT_TIMER0)- Cấm ngắt toàn cục, đề phòng lúc đang xử lý ngắt, lại có ngắt xảy ra:DISABLE_INTERRUPTS(GLOBAL)

Page 11: báo cáo PIC

- Xử lý ngắt đó: tùy thuộc vào ý đồ của người lập trình, chú ý đến số lần ngắt- Gán lại giá trị ban đầu cho thanh ghi TMR0 (tùy thuộc vào ý đồ của người lập trình): SET_TIMER0(giá trị)- Cho phép ngắt toàn cục: ENABLE_INTERRUPTS(GLOBAL)

III. Tìm hiểu về TIMER

1.Timer 0 là bộ định thời 8 bit

Page 12: báo cáo PIC

Cấu trúc Timer 0

Ta thấy vào bộ mux (bộ chọn kênh) có 2 nguồn xung đó là Fosc/4 và T0CKI pin. Ở đây chúng ta đề cập đến Timer0 với bộ Fosc/4 .Tiếp theo sau khi qua bộ mux thì nó lại rẽ ra 2 đường. Một đường là đi trực tiếp vào bộ mux thứ 2. Tức là xung nguồn từ Fosc/4 vào bao nhiêu thì vào bộ mux thứ 2 cũng bấy nhiêu. Đường thứ 2 là qua bộ presacle. Đây là bộ chia tần hay còn gọi là tham số cho bộ chia của timer. Tham số này được cài đặt bởi người dùng theo các tùy chọn định trước. Tương ứng với tham số prescaler được chọn, mỗi lần tăng của timer sẽ được quy định như sau:

Xung vào timer = Xung nguồn / Prescaler

- Vậy xung vào timer là gì??? Xung vào timer tức là tần số lệnh - Fcy. Cứ mỗi 1 tần số lệnh thì bộ đếm timer0 sẽ tăng lên 1 đơn vị. Giả sử nếu ta khai báo đi đường 1, tức ko qua bộ prescaler thì 1 xung nguồn (tần số máy - Fosc) = xung vào timer (tần số lệnh -Fcy).- Giả sử nếu ta khai báo xài prescaler là 1:256 chẳn hạn. Thì tức là bộ đếm timer0 sẽ tăng lên 1 sau 256 chu kỳ lệnh. Ý nói rằng phải có 256 xung vào thì sẽ có 1 xung ra

Page 13: báo cáo PIC

Nguyên lý hoạt động của timer0 :Khi có một xung timer clock thì bộ đếm TMR0L sẽ tăng lên 1 đơn vị. Đến khi nào giá trị của TMR0 = 255, và nhận tiếp 1 giá trị thì nó sẽ trở về 0, đồng thời sẽ bật cờ ngắt TIR0IF lên. Lúc này chương trình ngắt Timer0 sẽ chạy. Cờ ngắt này phải được xóa đi sau khi chạy xong chương trình ngắt để lần ngắt sau nó được bật lên lại.

Cách tính thông số cài đặt cho timer:

Timer bắt đầu = 2^số bít timer - 1 - timer*(Fosc/(4*Prescaler))

Các thanh ghi dùng trong Timer 0

Thanh ghi OPTION: Là thanh ghi cho phép đọc ghi dùng để thiết lập cấu hình cho Timer 0

Thanh ghi INTCON: là thanh ghi chứa cờ ngắt của timer 0

Thanh ghi TMRO: là thanh ghi 8bit,mỗi lần có xung tác động thì giá trị của thanh ghi sẽ tăng lên 1 cho đến khi tràn thì thanh ghi sẽ trở về 0

- Chế độ định thời

Page 14: báo cáo PIC

Ở chế độ này ta sẽ chọn xung tác động là xung nội (TOCS=0),lúc này xung tạo ra bởi bộ giao động sau khi được chia 4 sẽ cung cấp cho Timer 0 đếm.Sau khi một xung được đếm giá trị của thanh ghi TMR0 sẽ tăng lên 1 đơn vị,khi sảy ra tràn thì cờ TMR0IF sẽ được đặt lên 1

- Chế độ đếmỞ chế độ này ta sẽ chọn xung tác động là xung ngoài (TOCS=1), Timer 0 sẽ lấy xung từ bên ngoài thông qua chân RA4,thông qua bộ chia tần sẽ cung cấp cho Timer 0 như trên.Việc chọn kiểu xung tác động thông qua điều khiển bit TOSE

2.Timer 1Là bộ đếm hoặc định thời 16 bit gồm 2 thanh ghi TMR1H và TMR1L

Page 15: báo cáo PIC

Thanh ghi T1CON : Là thanh ghi thiết lập cấu hình cho Timer 1

Bit 0:

TMR1ON =1: cho phép timer hoạt động

TMR1ON =0: không cho phép timer hoạt động

Bit 1: TMRCS1 =1: Dùng nguồn xung từ bên ngoài thông qua chân RC0(sườn dương)

TMRCS1 =0: Dùng nguồn xung tạo từ bộ dao động

Bit 2:

khi TMR1CS =1:

T1SYNC=1: Không sử dụng xung ngoài là đồng bộ

T1SYNC=0: cho phép sử dụng xung ngoài là đồng bộ

khi TMR1CS =0:

bit này không được sử dụng

Bit 3:

T1OSCEN=1: Cho phép bộ tạo dao động hoạt động

T1OSCEN=0: Không cho phép bộ tạo dao động hoạt động

Bit 5 -4 :

Thiết lập giá trị cho bộ chia tần

THANH GHI TMR1: là thanh ghi lưu giữ giá trị định thời 16 bit được tạo thành từ 2 thanh ghi 8 bit TMR1L – TMR1H

Thanh ghi PIR1: là thanh ghi chứa cờ tràn TMR1IF của timer 1

Thanh ghi PIE1 : Là thanh ghi chứa bit TMR1IE cho phép ngắt Timer 1 hoạt động

Page 16: báo cáo PIC

3.Timer 2

Timer 2 (TMR2) là một timer 8 bit có tới 2 bộ chia tần có thể dùng trong ứng dụng để điều chế độ rộng xung (PWM)

Thanh ghi T2CON : thanh ghi thiết lập cấu hình cho timer

Bit 1- 0: Thiết lập giá trị cho bộ chia tần Prescale

00 = 1:1

01 = 1:4

1x = 1:16

Bit 2:

TMR2ON=1: cho phép sử dụng timer 2

TMR2ON=0: không cho phép sử dụng timer 2

Bit 6- 3: Thiết lập giá trị cho bộ chia tần Postcale

Thanh ghi PIR1 : chứa cờ tràn TMR2IF của timer

Thanh ghi PIE1 : chứa cờ cho phép ngắt TMR2IE của timer

Thanh ghi PR2 : ứng dụng trong PWM

Page 17: báo cáo PIC

Thanh ghi TMR2 : lưu giữ giá trị định thời 8 bit cho timer

Hoạt động của timer 2

- Chế độ định thời : nguồn xung từ bộ tạo dao động sau khi được chia 4 sẽ được bộ chia tần Prescale nạp vào thanh ghi TMR2 ,khi sảy ra tràn bit TMR2IF =1

- Chế độ PWM :trước hết chúng ta nạp giá trị cho thanh ghi PR2,sau đó giá trị của thanh ghi TMR2 sẽ được so sánh với giá trị của thanh ghi PR2.Nếu chúng bằng nhau,thì thanh ghi TMR2 sẽ được reset,đồng thời giá trị các chân PWM sẽ được thay đổi

IV.Tìm hiểu LCD

Page 18: báo cáo PIC

Sử dụng LCD 16x2 chế độ 4 bit,chỉ các chân D4-D7 được nối với vi điều khiển

Điều khiển LCD thông qua 3 chân RS,R/W và EN

Nếu muốn gửi mã lệnh lên LCD,chân RS=0,nếu muốn ghi mã ASCII của ký tự cần hiển thị,chân RS=1

Chân R/W =0,ghi dữ liệu vào LCD,chân R/W=1,đọc dữ liệu từ LCD

Chân EN cho phép LCD hoạt động.Muốn ghi dữ liệu, chân EN = 0,xuất dữ liệu đến các chân D4-D7,sau đó EN=1 và cuối cùng xóa EN =0.

Các hàm cơ bản trong ccs

LCD_Init(); //Khởi tạo LCD

LCD_Puts("Nội dung"); //Hàm gửi 1 chuỗi ký tự lên LCD

LCD_PutChar(ký_tự); //Hàm gửi 1 ký tự lên LCD

LCD_Clear(); //Hàm xoá trắng màn hình

LCD_Gotoxy(unsigned char x, unsigned char y);//Hàm thiết lập vị trí con trỏ

LCD_SendCommand (unsigned char command );// Hàm gửi 1 lệnh ra LCD