• strchr(source, c) - tìm vị trí sự xuất hiện đầu tiên của c trong dãy kí tự source và trả về con trỏ chỉ tới vị trí đó hay con trỏ trống nếu c không tìm thấy trong source
• strcmp(a, b) - so sánh hai dãy kí tự a và b (theo thứ tự từ điển); trả về số âm nếu a nhỏ hơn b, 0 nếu chúng bằng nhau, dương nếu a lớn hơn
• strcpy(dest, source) - chép và thay các kí tự của dãy dest vào dãy dest
• strlen(st) - trả về độ dài của st
• strncat(dest, source, n) - nối tối đa n kí tự từ dãy source tiếp vào vị trí cuối của dãy dest; các kí tự sau dấu kết thúc null sẽ không được chép vào
• strncmp(a, b, n) - so sánh từ kí tự đầu cho đến tối đa n kí tự từ hai dãy a và b (theo thứ tự từ điển); hàm trả về số âm nếu phần so sánh của a nhỏ hơn b, 0 nếu bằng nhau, và dương nếu lớn hơn
86 trang |
Chia sẻ: lethao | Lượt xem: 5906 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Báo cáo Đồ án mẫu đọc nhiệt độ hiển thị lên lcd, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
họn bằng cách set bit T0CS (OPTION_REG ). 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, xóa bit T0SE sẽ lựa chọn cạnh lên).
Ngắt Timer 0
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) được bật lên. Ngắt có thể được ngăn chặn bằng cách xóa bit T0IE (INTCON). Cờ ngắt T0IF phải được xóa bằng phần mềm truớc khi thoá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 Vi Điều Khiển thoát khỏi trạng thái ngủ.
Sử dụng Timer 0 với nguồn xung Clock bên ngoà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.
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) 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 Timer 0
TMR0 (địa chỉ 01h, 101h) : chứa giá tri đếm 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.1.4.2) Bộ định thời Timer 1:
Timer1 là một bộ định thời 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.
Thanh ghi điều khiển Timer 1
Hình 2.22 T1CON Register
Bit 7,6 Không sử dụng, đọc là 0.
Bit 5,4 T1CKPS1 : T1CKPS0 : Các bit chọn tỉ lệ xung ngõ vào cho Timer1.
11 1 : 8
10 1 : 4
01 1 : 2
00 1 : 1
Bit 3 T10SCEN : Bit cho phép bộ dao động Timer 1 Oscillator
1 : Cho phép dao động
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.
Chế độ định thời trong hoạt động cuả Timer 1
Chế độ định thời được lựa chọn bằng cách xóa bit TMR1CS (T1CON). Trong chế độ này, xung clock cung cấp cho Timer 1 là Fosc/4, bit đồng bộ T1SYNC (T1CON) không có tác dụng vì xung clock nội đã luôn luôn được đồng bộ.
Chế độ đếm
Timer 1 có thể hoạt động ở cả chế độ đồng bộ hoặc bất đồng bộ tùy thuộc vào việc cài đặt bit TMR1CS (T1CON).
- Đếm Đồng Bộ
Chế độ này được lựa chọn bằng cách set bit TMR1CS và xóa bit T1SYNC. Trong chế độ này giá trị của Timer 1 sẽ tăng khi có xung cạnh lên trên chân T1OSI/RC1 ( nếu bit T1OSCEN được set) hoặc chên trân T1OSO (nếu bit T1OSCEN được xóa).
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 khi bộ định thời tràn và làm VĐK thoát khỏi trạng thái ngủ.
* Một số đặc điềm lưu ý khi đọc ghi vào Timer :
Việc đọc thanh ghi TMR1H hoặc TMR1L trong khi bộ định thời đang chạy từ một nguồn xung clock ngoài không đồng bộ sẽ cho giá trị tức thời (không phải ngưng Timer lại). Tuy nhiên, phải chú ý rằng việc đọc Timer 1 sẽ phải bao gồm 2 lần đọc giá trị 8 bit, do đó có thể phát sinh vấn đề là Timer có thể bị tràn giữa 2 lần đọc. Để ghi vào Timer tốt nhất chúng ta nên dừng Timer lại và ghi giá trị chúng ta mong muốn. Chúng ta có thể ghi giá trị váo khi Timer đang chạy nhưng việc đó có thể tạo ra một giá trị không như ta mong muốn.
Dao động riêng của Timer 1
Chúng ta có thể tạo một bộ dao động độc lập cho Timer 1 bằng cách sử dụng thạch anh có tần số tối đa 200Khz. Với bộ dao động này Timer có thể đếm ngay cả khi VĐK rơi vào trạng thái ngủ.
Ngắt Timer 1
Khi ngắt được cho phép, nó sẽ xảy ra khi Timer tràn từ giá trị FFFFh xuống 0000h. Khi xảy ra tràn, cờ báo ngắt TMR1IF sẽ bật lên. Ngắt có thể ngăn chặn bằng cách xóa bit TMR1IE, cờ TMR1IF 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 trở về chương trình chính.
Lưu ý : Ngắt của Timer 1 ở chế độ định thời và chế độ đếm đồng bộ không làm cho VĐK thoát khỏi trạng thái ngủ, chỉ có ngắt ở chế độ đếm bất đồng bộ mới làm cho VĐK thoát khỏi trạng thái ngủ.
Các thanh ghi liên quan đến Timer 1
INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): cho pheùp ngaét hoaït ñoäng (GIE vaø PEIE).
PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF).
PIE1(địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE).
MR1L (địa chỉ 0Eh): chứa 8bit thấp vào bộ Timer1.
TMR1H (địa chỉ 0Eh): chứa 8bit cao vào Timer1.
T1CON (địa chỉ 10h): xác lập các tham số cho Timer1.
2.1.4.3) Bộ định thời Timer 2:
Timer2 là một bộ định thời 8 bit bao gồm một bộ tiền định tỉ lệ và một bộ hậu định tỉ lệ, Timer2 cung cấp thời gian hoạt động cho chế độ PWM nếu module CCP được chọn. Thanh ghi TMR2 là một thanh ghi có thể đọc và ghi được, nó bị xóa bởi bất cứ tác đông reset nào. Xung clock ngõ vào (Fosc/4) có các tùy chọn tỉ lệ là 1:1, 1:4, 1:16, được lựa chọn bằng các bit điều khiển T2CKPS1 : T2CKPS0 (T2CON).
Timer 2 có một thanh ghi khoảng thời gian 8 bit PR2, đây là một thanh ghi có khả năng đọc được và ghi được. Timer 2 sẽ tăng từ 00h đến khi bằng giá trị ở thanh ghi PR2 nó sẽ reset về 00h ở chu kỳ tăng tiếp theo.
Thanh ghi điều khiển Timer 2 T2CON
Hình 2.24 T2CON Register
Bit 7: không sử dụng
Bit 6:3 TOUTPS3:TOUTPS0: Bit chọn tỉ lệ ngõ ra của Timer 2
0000: 1:1
0001: 1:2
0010: 1:3
….
1111: 1:16 Tỷ lệ ngõ ra
Bit 2 TMR2ON: Bit cho phép hoạt động của Timer 2
1: Cho phép
0: Không cho phép.
Bit 1:0 T2CKPS1:T2CKPS0: Bit chọn tỉ lệ ngõ vào của Timer 2
00 : Prescaler 1
01 : Prescaler 4
1x : Prescaler 16
Xóa các bộ tỉ lệ
Hai bộ đếm prescaler và postcaler sẽ bị xóa bởi một trong các nguyên nhân sau đây:
- Ghi một giá trị vào thanh ghi TMR2
- Ghi một giá trị vào thanh ghi TCON2
- Bất cứ một reset thiết bị nào.
Nhận xét:
Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là bộ đếm 16 bit (giá trị đếm tối đa là FFFFh). Timer0, Timer1 và Timer2 đều có hai chế độ hoạt động là timer và counter. Xung clock có tần số bằng ¼ tần số của oscillator. Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độ khác nhau (tần số tác động, cạnh tác động) trong khi các thông số của xung tác động lên Timer1 là cố định. Timer2 được hỗ trợ bởi hai bộ chia tần số prescaler và postcaler độc lập, tuy nhiên cạnh tác động vẫn được cố định là cạnh lên. Timer1 có quan hệ với khối CCP, trong khi Timer2 được kết nối với khối SSP. Một vài so sánh sẽ giúp ta dễ dàng lựa chọn được Timer thích hợp cho ứng dụng.
2.1.5) Module CCP:
Chế độ điều chế xung PWM:
Trong chế độ điều chế độ rộng xung PWM, chân CCP tạo ra một tín hiệu có độ phân giải 10 bit. Chân CCP phải được mặc định là ngõ ra. Việc xóa thanh ghi CCPxCON sẽ đẩy chân ngõ ra CCPx xuống mức mặc định thấp.
Hình 2.25:PWM Output
Hình 2.26: Sơ đồ khối module PWM
I. Chu kỳ PWM
Chu kỳ PWM được chỉ định trong thanh ghi PR2. Chu kỳ có thể được tính bằng công thức:
Chu kỳ PWM = [(PR2 + 1)*4*Tosc*giá trị tỉ lệ TMR2)
Tần số PWM = 1/ chu kỳ PWM.
Khi giá trị trong hai thanh ghi TMR2 và PR2 bằng nhau, ba tác vụ sau đây sẽ diễn ra:
- Thanh ghi TMR2 bị xóa
- Chân CCPx được set lên mức 1
- Giá trị Duty cycle ( Chu kỳ nhiệm vụ) từ thanh ghi CCPRxL sẽ chuyển sang thanh ghi CCPRxH.
Lưu ý: Bộ postcaler của Timer 2 không có tác dụng trong việc quyết định tần số PWM. Bộ prescaler được kết hợp với thanh ghi TMR2 để tạo ra bộ đếm 10 bit tương ứng.
II. Giá trị chu kỳ nhiệm vụ PWM
Giá trị chu kỳ nhiệm vụ của PWM được quy định bằng 10 bit : 8 bit trong thanh ghi
CCPRxL và 2 bit trong thanh ghi CCPxCON (DCxB1, DCxB0). Chu kỳ nhiệm vụ PWM có thể được tính theo công thức sau:
Ton PWM = ( Giá trị của DCxB9:DcxB0) * Tosc * giá trị tỉ lệ tiền định TMR2
Giá trị DCxB9:DcxB0 có thể thay đổi tùy ý nhưng giá trị này sẽ không được tải vào trong thanh ghi CCPRxH cho đến khi trạng thái cân bằng xảy ra giữa 2 thanh ghi PR2 và TMR2. Trong chế độ PWM thanh ghi CCPRxH là thanh ghi chỉ đọc.
III Cài đặt hoạt động cho PWM
Để cài đặt hoạt động cho chế độ PWM ta tiến hành các bước sau:
- Định chân CCPx là ngõ ra.
- Thiết lập chu kỳ PWM bằng việc ghi vào thanh ghi PR2
- Thiết lập chu kỳ nhiệm vụ PWM bằng việc ghi giá trị vào các bit DCxB9:DCxB0.
- Cài đặt giá trị tỉ lệ cho Timer 2 và cho phép Timer 2 hoạt động bằng cách ghi vào
thanh ghi T2CON.
- Cấu hình cho module CCP hoạt động trong chế độ PWM.
Hình 2.27:ví dụ về tần số PWM
2.1.6) Module ADC:
2.1.6.1) Giới thiệu Module ADC 10 bit:
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương tự và số. PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thể chuẩn được xác lập trên hai chân RA2 và RA3. Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghi ADRESH:ADRESL, bit (ADCON0) được xóa về 0 và cờ ngắt ADIF được set
Module ADC bao gồm 4 thanh ghi:
-Thanh ghi chứa byte cao của kết quả ADRESH
-Thanh ghi chứa byte thấp của kết quả ADRESL
-Thanh ghi chứa các bit điều khiển ADCON0
-Thanh ghi chứa các bit điều khiển ADCON1.
2.1.6.2) Các thanh ghi điều khiển
Thanh ghi điều khiển ADCON0
Hình 2.28: ADCON0 Register
Bit 7:6 ADCS1:ADCS0: Các bit lựa chọn tần số chuyển đổi A/D
00 =FOSC/2
01 =FOSC/4
10 =FOSC/32
11 =FRC (xung clock được lấy từ dao đông nội RC)
Bit 5:3 CHS2:CHS0: Các bit lựa chọn kênh Analog
000: Kênh 0, (AN0)
001: Kênh 1, (AN1)
010: Kênh 2, (AN2)
011: Kênh 3, (AN3)
100: Kênh 4, (AN4)
101: Kênh 5, (AN5)
110: Kênh 6, (AN6)
111: Kênh 7, (AN7)
Bit 2 GO/ DONE: Bit báo trạng thái chuyển đổi A/D
Khi bit ADON = 1
1: Quá trình A/D đang thực hiện (Khi chúng ta set bit này lên thì quá trình chuyển đổi sẽ xảy ra, khi quá trình kết thúc nó sẽ tự động được xóa bằng
phần mềm).
0: Quá trình A/D không xảy ra hoặc đã hoàn tất.
Bit 1 Không sử dụng, giá trị là 0
Bit 0 ADON : Bit cho phép module A/D hoạt động.
1: Nguồn được cung cấp cho A/D
0: Ngưng cung cấp nguồn cho A/D.
Thanh ghi điều khiển ADCON1:
Hình 2.29 ADCON1 Register
Bit 7 ADFM: Bit lựa chọn định dạng kết quả A/D
1: Canh phải, 6 bit cao nhất của thanh ghi ADRESH có giá trị 0
0: Canh trái, 6 bit thấp nhất của thanh ghi ADRESL có giá trị 0
Bit 6 ADCS2: Bit lựa chọn clock chuyển đổi A/D
Hình 2.30 lựa chọn Clock chuyển đổi ADC
Bit 5,4 không sử dụng
Bit 3:0 PCFG3:PCFG0: Các bit điều khiển cấu hình các chân ADC.
Hình 2.31Các bit điều khiển cấu hình chân ADC
2.1.6.3) Hoạt động của Module ADC:
Hai thanh ghi ADRESH và ADRESL chứa giá trị 10 bit của kết quả ADC. Khi quá trình chuyển đổi hoàn tất, kết quả ADC sẽ được lưu lại trong cặp thanh ghi này. Bit GO/DONE bị xóa và cờ ngắt ADIF được bật lên.
Sau khi module ADC đã được cấu hình như mong muốn, chúng ta phải lựa chọn kênh chuyển đổi A/D trước khi chuyển đổi ADC xảy ra. Các chân Analog phải được chọn là ngõ vào bằng cách set các bit trong thanh ghi TRIS tương ứng.
Để tiến hành chuyển đổi ADC, tiến hành theo các bước sau:
Bước 1: Cấu hình cho module ADC:
- Cấu hình cho các chân ngõ vào/ điện thế chuẩn và I/O số (ADCON1)
- Lựa chọn kênh ngõ vào A/D (ADCON0)
- Lựa chọn tần số chuyển đổi (ADCON0)
- Cấp nguồn cho module ADC (ADCON0)
Bước 2: Cấu hình các ngắt ADC (nếu cần):
- Xóa cờ ngắt ADIF
- Set bit GIE (Cho phép ngắt toàn cục)
- Set bit ADIE (Cho phép ngắt chuyển đổi ADC)
Bước 3: Đợi thời gian Acquisition (lấy mẫu) cần thiết
Bước 4: Bắt đầu quá trình chuyển đổi ADC
Set bit GO/ DONE (ADCON0)
Bước 5: Đợi quá trình ADC hoàn tất:
Chạy vòng lập đợi bit GO/DONE bị xóa hoặc cờ ngắt ADIF bật lên
Bước 6 : Đọc kết quả trong 2 thanh ghi ADRESH và ADRESL, xóa bit ADIF ( nếu cần thiết)
Bước 7: Nếu muốn tiếp tục thực hiện chuyển đổi ADC trong chu kỳ kế tiếp thì quay lại bước 1 hoặc bước 2.
Sơ đồ khối của bộ biến đổi ADC 10 bit:
Hình 2.32: sơ đồ khối bộ biến đổi ADC 10bit.
2.1.6.4) Thời gian lấy mẫu:
Thời gian lấy mẫu bao gồm hai giai đoạn:
Thời gian acquition: Là thời gian cần để tụ điện của bộ sample and hold (tạm dịch là bộ lấy mẫu và giữ) nạp điện để có giá trị điện thế bằng với giá trị của nguồn analog cần lấy mẫu.Thời gian chuyển đổi từ tương tự sang số: Vào khoảng 12 chu kỳ của bộ ADC. Tổng 2 thời gian đó ta được thời gian lấy mẫu Cách tính thời gian acquition:
TACQ = Thời gian ổn định của phần cứng khuếch đại + Thời gian nạp của tụ + hệ số nhiệt độ
TACQ = TAMP + TC + TCOFF
= 2µs + TC +[(Nhiệt độ - 250C)(0.05/0C)]
= 19.72 µs
Hình 2.33 sơ đồ thời gian lấy mẫu
2.1.6.5) Lựa chọn xung Clock cho biến đổi ADC:
Thời gian chuyển đổi 1 bit được định nghĩa là chu kỳ TAD. Để biến đổi 10 bit chúng ta cần thời gian xấp xỉ 12TAD . Nguồn xung clock cung cấp cho ADC được lựa chọn bằng phần mềm. Có 4 giá trị để lựa chọn:
- 2 Tosc
- 8 Tosc
- 32 Tosc
- Dao động nội RC của module ADC (2-6µs)
Để đảm bảo quá trình ADC chính xác thì xung clock ADC (TAD) phải được lựa chọn để đảm bảo rằng giá trị tối thiểu của TAD là 1.6µs.
Bảng sau đây chỉ ra môi liên hệ giữa TAD và tần số của thiết bị:
Hình 2.34 Mối liên hệ giữa TAD và tần số của thiết bị
2.1.6.6) Cấu hình các chân Analog:
Các thanh ghi ADCON1 và TRIS điều khiển hoạt động của các chân ADC. Đối với các chân cần được quy định là ngõ vào Analog thì các bit tương ứng trong thanh ghi TRIS phải được set, nếu các bit trong thanh ghi TRIS bị xóa (output) thì các ngõ ra số (VOH hoặc VOL) sẽ được chuyển đổi. Hoạt động của bộ ADC sẽ phụ thuộc vào trạng thái của các bit CHS2:CHS0 và các bit trong thanh ghi TRIS.
2.1.6.7) Chuyển đổi ADC:
Việc xóa bit GO/DONE trong quá trình chuyển đổi sẽ bỏ qua chuyển đổi hiện tại. Cặp thanh ghi kết quả chuyển đổi ADC sẽ không được cập nhật những mẫu chuyển đổi ADC đã hoàn tất. Do đó, cặp thanh ghi ADRESH và ADRESL sẽ chứa giá trị của lần chuyền đổi hoàn tất cuối cùng ( hoặc giá trị được ghi cuối cùng vào 2 thanh ghi này).
Sau khi một chuyển đổi ADC bị bỏ qua, việc lấy mẫu tiếp theo dựa trên kênh ADC đã chọn sẽ tự động diễn ra. Sau đó bit GO/DONE có thể được set để bắt đầu chuyển đổi ADC. Chú ý: Bit GO/DONE không nên được set trong cùng một lệnh với lệnh mở module ADC.
Cặp thanh ghi ADRESH và ADRESL dùng để lưu kết quả ADC 10 bit. Module ADC cho phép ta lựa chọn việc canh trái hay canh phải kết quả 10 bit trong thanh ghi kết quả bằng cách xóa hoặc set bit ADFM. Các bit còn lại mang giá trị là 0.
Hình 2.35:ADRESH và ADRESL Register
2.1.6.8) Hoạt động của Module ADC trong chế độ ngủ:
Module ADC có thể hoạt động trong chế độ ngủ (Sleep). Điều này yêu cầu nguồn xung clock cung cấp cho ADC phải từ dao động RC (ADCS1:ADCS0 = 11). Khi xung clock RC được chọn, module ADC sẽ đợi một chu kỳ máy trước khi bắt đầu tiến hành chuyển đổi ADC. Điều này cho phép lệnh SLEEP có thể được thực thi mà không gây nhiễu đến quá trình ADC. Khi chuyển đổi ADC hoàn tất, bit GO/DONE sẽ bị xóa và kết quả được lưu vào cặp thanh ghi ADRESH, ADRESL. Nếu ngắt ADC được cho phép, nó sẽ làm VĐK thoát khỏi chế độ ngủ. Nếu ngắt không được cho phép, module ADC sau đó sẽ bị tắt mặc dù bit ADCON vẫn còn ở mức cao.
Khi nguồn xung clock khác được chọn chứ không phải RC, lệnh SLEEP sẽ làm cho chuyển đổi ADC hiện tại bị bỏ qua và module ADC sẽ bị tắt dù bit ADCON vẫn còn đang ở mức 1.
2.1.6.9) Ảnh hưởng của Reset:
Một reset thiết bị sẽ buộc tất cả các thanh ghi rơi vào trạng thái Reset của chúng.Điều này buộc module ADC bị tắt và bất kỳ chuyển đổi ADC nào cũng bị bỏ qua. Tất cả các chân ngõ vào A/D sẽ được cấu hình là các ngõ vào Analog.
Giá trị trong cặp thanh ghi ADRESH:ADRESL không bị thay đổi trong một Reset Power-on. Cặp thanh ghi này sẽ chứa một giá trị không biết trước sau reset Power-on.
2.1.7) Các ngắt của Pic 16F877a.
Pic 16F877a có 14 nguồn ngắt, thanh ghi INTCON là thanh ghi điều khiển các ngắt, mỗi ngắt có một bít cờ ngắt và một bít cho phép hoặc cấm ngắt. Bit GIE (INTCON) điều khiển chung cho 14 ngắt khi bít này set thì các ngắt mới có tác dụng, khi bit GIE bị xóa thì các ngắt bị cấm.
Bit GIE bị xóa khi reset. Khi bít cờ ngắt thiết lập, bit GIE thiết lập và bit PEIE thiết lập với ngắt ngoại vi. Đồng thời bít cho phép ngắt của ngắt đó cho phép thì ngắt đó xảy ra.
Khi một ngắt xảy ra thì bộ đếm chương trình PC được nạp giá trị 0004h và bit GIE bị xóa để cấm sự chồng ngắt, khi chỉ lệnh RETFIE thực hiện trả lại địa chỉ cho PC nơi xảy ra ngắt, đồng thời thiết lặp lại GIE
Khi xảy ra ngắt PC luôn được nạp giá trị 0004h vì ngắt được phân biệt bởi bit cờ ngắt của ngắt đó.
Ngắt ngoài từ chân RB0/INT, và ngắt từ sự thay đổi trang thái của chân RB4:RB7 có thể đánh thức bộ xử lý từ chế độ SLEEP.
Các thanh ghi PIE1, PIR1, PIE2, PIR2 điều khiển các ngắt ngoại vi
Sơ đồ bit điều khiển ngắt:
Khi một ngắt xảy ra chỉ có PC được lưu trong stack. Do đó, người sử dụng phải lưu vào các thanh ghi W, STATUS, PCLATH khi xảy ra ngắt.
2.2) GIỚI THIỆU CÁC LINH KIỆN KHÁC:
2.2.1) Liquid crystal display ( LCD ) :
2.2.1.a) Cấu tạo
Chức năng các chân của Module LCD 16x2:
Chân số
Ký hiệu
Mức logic
I/O
Chức năng
1
Vss
-
-
Nguồn cung cấp(GND)
2
Vdd
-
-
Nguồn cung cấp(+5V)
3
Vee
-
I
Điện áp để điều chỉnh độ tương phản
4
RS
0/1
I
Lựa chọn thanh ghi
0= thanh ghi lệnh
1=thanh ghi dữ liệu
5
R/W
0/1
I
0=ghi vào LCD module
1=đọc từ LCD module
6
E
1,1=>0
I
Tín hiệu cho phép
7
DB1
0/1
I/O
Data bus line 0(LSB)
8
DB2
0/1
I/O
Data bus line1
9
DB3
0/1
I/O
Data bus line2
10
DB4
0/1
I/O
Data bus line3
11
DB5
0/1
I/O
Data bus line4
12
DB6
0/1
I/O
Data bus line5
13
DB7
0/1
I/O
Data bus line6
14
DB8
0/1
I/O
Data bus line7(MSB)
15
Vcc
-
-
Nguồn cung cấp
16
GND
-
-
mass
2.2.1.b) Sơ đồ nguyên lý
2.2.1.c) Nguyên tắc hiển thị ký tự trên LCD:
Một chương trình hiển thị ký tự trên LCD sẽ đi theo bốn bước sau:
Xóa toàn bộ màn hình.
Đặt chế độ hiển thị.
Đặt vị trí con trỏ (nơi bắt đầu của ký tự hiển thị).
Hiển thị ký tự.
Chú ý:
+Các bước 3, 4 có thể lặp lại nhiều lần nếu cần hiển thị nhiều ký tự.
+ Mỗi khi thực hiện ghi lệnh hoặc ghi dữ liệu hiển thị lên LCD cần phải kiểm tra cờ bận trước. Vì vậy, cần phải chủ động phân phối thời gian khi ra lệnh cho LCD( ví dụ sau khi xóa màn hình sau khoảng 2ms mới ra lệnh khác vì thời gian để LCD xóa màn hình là 1,64ms).+chế độ hiển thị mặc định sẽ là hiển thị dịch, vị trí con trỏ mặc định sẽ là đầu dòng thứ nhất.
2.2.1.d). Mã lệnh của LCD HD4480
Lệnh
Mã lệnh
Mô tả
Thời gian thi hành
RS
R/W
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
Xóa màn hình
0
0
0
0
0
0
0
0
0
1
Xóa màn hình đưa con trỏ về vị trí đầu
1.64ms
Đưa con trỏ về vị trí đầu
0
0
0
0
0
0
0
0
1
x
Đưa con trỏ về vị trí đầu
1.64ms
Thiết lập chế độ
0
0
0
0
0
0
0
1
I/D
S
Thiết lập hướng dịch chuyển con trỏ(I/D), dịch hiển thị(S)
40us
Bật tắt hiển thị
0
0
0
0
0
0
1
D
C
B
Bật tắt hiển thị, con trỏ; bật tắt chế độ nhấp nháy con trỏ
40us
Dịch con trỏ hiển thị
0
0
0
0
0
1
S/C
R/L
*
*
Thiết lập chiều dịch chuyển của con trỏ và hiển thị
40us
Thiết lập chức năng
0
0
0
0
1
DL
N
F
*
*
Thiết lập độ dài của dữ liệu, số dòng và font chữ
40us
Thiết lập địa chỉ CGRAM
0
0
0
1
CGRAM address
Thiết lập địa chỉ CGRAM
40us
Thiết lập địa chỉ DDRAM
0
0
1
DDRAM address
Thiết lập địa chỉ DDRAM
40us
Đọc cờ báo bận và địa chỉ CGRAM/
DDRAM
0
1
BF
CGRAM/ DDRAM address
Đọc cờ báo bận và địa chỉ của CGRAM hoặc DDRAM( tùy vào lệnh trước đó)
40us
Ghi CGRAM/
DDRAM
1
0
Write data
Ghi dữ liệu vào CGRAM hoặc DDRAM.
40us
Đọc CGRAM/
DDRAM
1
1
Read data
Đọc dữ liệu từ CGRAM hoặc DDRAM
40us
2.2.1.e) Các bit viết tắt trong mã lệnh.
Tên bit
Mô tả
I/D
0=không dịch chuyển vị trí con trỏ
1=dịch chuyển vị trí con trỏ
S
=0 không dịch chuyển hiển thị
=1 dịch chuyển hiển thị
D
0=tắt hiển thị
=1 bật hiển thị
C
0=tắt con trỏ
=1 bật con trỏ
B
0=con trỏ không nhấp nháy
=1 con trỏ nhấp nháy
S/C
0=di chuyển con trỏ
=1 dịch chuyển hiển thị
R/L
0= dịch trái
=1 dịch phải
DL
0=chế độ 4bit dữ liệu
=1 chế độ 8bit dữ liệu
N
0=1 dòng
1= 2 dòng
F
0= font 5x7
1= font 5x10
BF
0= không bận
1= đang bận
2.2.2) Cảm biến nhiệt độ LM35:
LM35DZ là loại cảm biến nhiệt độ được sử dụng rộng rãi trong công nghiệp,bởi giá thành thấp và cách vận hành đơn giản.LM35DZ có mức điện áp thay đổi trực tiếp theo độ C (10mV/*C).
Sơ đồ chân của LM35DZ:
Chân +Vs là chân cung cấp điện áp cho LM35DZ hoạt động (4—20V).
Chân Vout là chân điện áp ngõ ra của LM35DZ,được đưa vào chân Analog của các bộ ADC.
Chân GND là chân nối mass,lưu ý cần nối mass chân này để trành làm hỏng cảm biến cũng như làm giảm sai số trong quá trình đo.
CHƯƠNG 3 : TẬP LỆNH CHƯƠNG TRÌNH
3.1 Nhóm lệnh hợp ngữ
3.1.1. NHÓM LỆNH DI CHUYỂN
3.1.1.1. Lệnh MOVLW
Cú pháp: MOVLW k (0≤ k≤255)
Tác dụng: Đem giá trị k vào thanh ghi W
3.1.1.2. Lệnh MOVWF
Cú pháp: MOVWF f (0≤ k≤255)
Tác dụng: Đem giá trị của thanh ghi W vào thanh ghi f
Để gián cho thanh ghi một giá trị cụ thể, đầu tiên đưa giá trị cần gián cho thanh ghi W, sau đó ta thực hiên lệnh MOVWF để di chuyển giá trị trong thanh ghi W sang thanh ghi cần gián.
Tuy nhiên, còn có cách khác thông qua thanh ghi “con trỏ” FSR, khi thanh ghi “con trỏ” FSR trỏ đến byte có địa chỉ nào thì nội dung của thanh ghi đó di chuyển vào thanh ghi INDF.
Để hiểu một cách đơn giản ta hiểu thanh ghi FSR chứa địa chỉ còn thanh ghi INDF chứa nội dung.
3.1.1.3. Lệnh MOVF
Cú pháp: MOVF f,W
Tác dụng: Đem giá trị của thanh ghi f vào thanh ghi W
Để di chuyển giá trị ở thanh ghi COUNT1 sang thanh ghi COUNT2 thì ta bắt buộc qua thanh ghi “trung gian” W thông qua lệnh MOVF.
3.1.2. NHÓM LỆNH SỐ HỌC
3.1.2.1 Lệnh ADDLW
Cú pháp: ADDLW k (0≤ k≤255)
Tác dụng: Cộng giá trị k vào thanh ghi W,kết quả được chứa trong thanh ghi W.
Bit trạng thái: C, DC, Z
3.1.2.2.Lệnh ADDWF
Cú pháp: ADDWF f,d
(0≤f≤255, d ∈[0,1]).
Tác dụng: Cộng giá trị hai thanh ghi W và thanh ghi f. Kết quả được chứa trong thanh ghi W nếu d = 0 hoặc thanh ghi f nếu d =1.
Bit trạng thái: C, DC, Z
3.1.2.3. Lệnh SUBLW
Cú pháp: SUBLW k
Tác dụng: Lấy giá trị k trừ giá trị trong thanh ghi W. Kết quả được chứa trong thanh ghi W.
Bit trạng thái: C, DC, Z
3.1.2.4. Lệnh SUBWF
Cú pháp: SUBWF f,d
(0≤f≤127, d ∈ [0,1])
Tác dụng: Lấy giá trị trong thanh ghi f đem trừ cho thanh ghi W. Kết quả được lưu trong thanh ghi W nếu d=0 hoặc thanh ghi f nếu d=1.
Bit trạng thái: C, DC, Z
3.1.2.5. Lệnh INCF
Cú pháp: INCF f,d
(0≤f≤127, d ∈ [0,1])
Tác dụng: Tăng giá trị thanh ghi f lên 1 đơn vị. Kết quả được đưa vào thanh ghi W nếu
d = 0 hoặc thanh ghi f nếu d = 1.
Bit trạng thái: Z
3.1.2.6. Lệnh DECF
Cú pháp: DECF f,d
(0≤f≤127, d ∈[0,1]).
Tác dụng: Giá trị thanh ghi f được giảm đi 1 đơn vị. Kết quả được đưa vào thanh ghi
W nếu d = 0 hoặc thanh ghi f nếu d = 1.
Bit trạng thái: Z
3.1.3. NHÓM LỆNH LOGIC
3.1.3.1. Lệnh BCF
Cú pháp: BCF f,b (0≤b≤7)
Tác dụng: Xóa bit b trong thanh ghi f về giá trị 0.
Bit trạng thái: không có.
3.1.3.2. Lệnh BSF
Cú pháp: BSF f,b (0≤b≤7)
Tác dụng: Set bit b trong thanh ghi f.
Bit trạng thái: không có
3.1.3.3. Lệnh CLRW
Cú pháp CLRW
Tác dụng: Xóa thanh ghi W và bit Z được set.
Bit trạng thái: Z
3.1.3.4. Lệnh CLRF
Cú pháp CLRF f (0≤f≤127)
Tác dụng: Xóa thanh ghi f và bit Z được set.
Bit trạng thái: Z
3.1.3.5. Lệnh CLRWDT
Cú pháp: CLRWDT
Tác dụng: Reset Watchdog Timer, đồng thời prescaler cũng được reset, các bit và được set lên 1.
3.1.3.6. Lệnh ANDLW
Cú pháp: ANDLW k (0≤k≤255)
Tác dụng: Thực hiện phép toán AND giữa thanh ghi và giá trị k, kết quả được chứa trong thanh ghi W.
Bit trạng thái: Z
Chú ý: And các bit tương ứng
3.1.3.7. Lệnh ANDWF
Cú pháp: ANDWF f,d
(0≤f≤127, d ∈[0,1]).
Tác dụng: Thực hiện phép toán AND giữa các giá trị chứa trong hai thanh ghi W và
Các file đính kèm theo tài liệu này:
- Mẫu báo cáo đồ án Đọc nhiệt độ hiển thị lên LCD.doc