2 ĐỒ ÁN NHÚNG 2 DÙNG PIC ĐO VÀ HIỂN THỊ KHÔI LƯỢNG CÂN ĐƯỢC THEO HIỆU ỨNG LED CÓ CODE Ở PHẦN 3.2
Trang 1DÙNG PIC ĐO VÀ HIỂN THỊ KHÔI LƯỢNG CÂN ĐƯỢC THEO HIỆU ỨNG
LED
CÓ CODE Ở PHẦN 3.2
Trang 2MỤC LỤC
Trang 31.1 .Giới thiệu đề tài 8
1.2 .Mục đích nghiên cứu 9
1.3 .Đối tượng nghiên cứu 9
1.4 .Phạm vi nghiên cứu 10
1.5 .Dự đoán kết quả 10
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 10
2.1 TỔNG QUAN VỀ PIC 16F877A 10
2.1.1 Khái niệm và 1 vài thông tin về vi điều khiển PIC16F877A 10
2.1.2 Sơ đồ khối vi điều khiển PIC16F877A 14
2.1.3 Tổ chức bộ nhớ 15
2.1.3.1 Bộ nhớ chương trình (Program memory) 16
2.1.3.2 Bộ nhớ dữ liệu (Data memory) 17
2.1.3.2.1 Thanh ghi chức năng đặc biệt SFR 19
2.1.3.2.2 Thanh ghi mục đích chung GPR 21
2.1.3.3 Stack 21
2.1.4 Các cổng xuất nhập của PIC16F877A 22
2.1.4.1 Cổng PORTA 22
2.1.4.2 Cổng PORTB 24
2.1.4.3 Cổng PORTC 26
2.1.4.4 Cổng PORTD 28
2.1.4.5 Cổng PORTE 29
2.1.5 Timer0 30
2.1.6 Timer1 32
2.1.7 Timer2 34
Trang 42.2 CẢM BIẾN CÂN NẶNG (LOADCELL) 36
2.2.1 Tổng quan về cảm biến cân nặng (Loadcell) 36
2.2.1.1 Cảm biến Loadcell là gì? 36
2.2.2 Mạch chuyển đổi HX711 38
2.3 THIẾT BỊ HIỂN THỊ LCD 39
2.3.1 Tổng quan về LCD 39
CHƯƠNG 3 THIẾT KẾ VÀ THI CÔNG 42
3.1 SƠ ĐỒ KHỐI CỦA HỆ THỐNG 42
3.1.1 Khối cảm biến LOADCELL 42
3.1.2 Khối nút nhấn 44
3.1.3 Khối hiển thị LCD 44
3.1.4 Khối vi điều khiển PIC16F877A 46
3.2 CHƯƠNG TRÌNH ĐIỀU KHIỂN 48
3.2.1 phần code điều khiển 48
3.2.2 phần mô phỏng proteus 51
3.2.3 phần mô hình 52
CHƯƠNG 4: GIẢI THUẬT VÀ ĐIỀU KHIỂN 53
4.1 NGUYÊN LÝ LÀM VIỆC CỦA HỆ THỐNG 53
4.2 Lưu đồ giải thuật 54
CHƯƠNG 5 : THỰC NGHIỆM 55
5.1 Các bước tiến hành thực nghiệm 55
5.2 kết quả thực nghiệm 56
CHƯƠNG 6 : KẾT LUẬN 57
6.1 Ưu điểm: 57
6.2 Nhược điểm 57
6.3 Hướng phát triển 57
Trang 5MỤC LỤC HÌNH
Hình 2.1: Cấu trúc vi điều khiển 12
Hình 2.2 : sơ đồ khối vi điều khiển PIC16F877A 15
Hình 2.3: Bộ nhớ chương trình PIV16F877A 17
Hình 2.4: Sơ đồ bộ nhớ dữ liệu PIC16F877A 19
Hình 2.5: Sơ đồ khối của Timer0 31
Hình 2.6: Sơ đồ khối của Timer 1 33
Hình 2.7: Sơ đồ khối Timer2 35
Hình 2.8: Cấu tạo LOADCELL 37
Hình 2.9: Cấu tạo mạch HX711 39
Hình 2.10: Màn hình LCD 16x2 40
Hình 2.11: Chức năng chân của LCD 41
Hình 3.1 : Khối cảm biến Loadcell 42
Hình 3.2 : Sơ đồ chân của LCD 45
Hình 3.3: Vi điều khiển PIC 16F877A 46
Hình 4.1 : LCD hiển thị thông tin 53
Hình 4.2 : Lưu đồ giải thuật 54
Hình 5.1: Mô hình 56
Trang 6CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI1.1 Giới thiệu đề tài
Ngày nay với những ứng dụng của khoa học kĩ thuật tiên tiến, thế giới của chúng ta đã và đang ngày một thay đổi, văn minh và hiện đại hơn Trong đó sự phát triển của kĩ thuật tự động hóa đã đóng góp vai trò quan trọng, tạo ra hàng loạt những thiết bị với các đặc điểm nổi bật như: sự chính xác, an toàn, tốc độ nhanh, gọn nhẹ Ý tưởng đề tài xuất phát từ bài toán thực tế là thiết kế hệ thống đo cân nặng, từ đó dựa vào thực tế để có những giá trị chính xác về cân nặng
Trong các máy móc thiết bị sử dụng trong cuộc sống hằng ngày đa phần có
sử dụng liên quan đến cân nặng như cân thực phẩm thức ăn mỗi ngày cho đến cân nặng của các giá trị khác, nếu sử dụng những loại cân không chính xác hay cân bị lệch dẫn đến ảnh hưởng người tiêu dung và bị thiệt hại về kinh tế gia đình và cũng như của xã hội Vì vậy ta cần thiết kế cân để kiểm tra cân nặng của vật mình mong muốn thật chính xác, thiết bị vận hành bền bỉ Để đáp ứng nhu cầu trên nên em
quyết định chọn đề tài “Đo và hiển thị khối lượng theo hiệu ứng LED” là đề tài
cho đồ án nhúng
Em đã kết hợp nhiều mạch điện tử cơ bản và và những phần tử trong chương trình giảng dạy, vận dụng nhiều kiến thức lý thuyết và kỹ năng thực hành của nhiều môn cơ sở để thiết kế mạch điện đo cân nặng và hiển thị theo LED
1.2 Mục đích nghiên cứu
- Dựa trên những kiến thức đã học lập trình PIC, tiến hành nghiên cứu cách sử dụng và
Trang 7LED để thiết lập 1 hệ thống có thể ứng dụng vào đời sống hằng ngày cũng như trong công nghiệp ,…
1.3 Đối tượng nghiên cứu
- Nghiên cứu nguyên lý hoạt động và phướng pháp điều khiển PIC 16F877A
- Nghiên cứu phương pháp của bộ cảm biến cân nặng (LOADCELL, HX711)
- Nghiên cứu phương pháp đo và hiển thị giá trị nhiệt độ trên LCD và LED
- Phần mềm lập trình CCS
- Phần mềm mô phỏng PROTERUS
1.4 Phạm vi nghiên cứu
Ở góc độ là đồ án nhúng, hạn chế về mặt thời gian và kinh phí thực hiện nên phạm
vi nghiên cứu giới hạn ở việc lập trình PIC và mô phỏng hoạt động của mạch trong phần mềm trên máy tính với mô hình đơn giản
1.5 Dự đoán kết quả
Phần code đã cho kết quả hoạt động hiển thị chính xác kết quả trọng lượng
do cảm biến HX711 đo được và phần đọc kết quả cũng được thực hiện trên các thaotác do người dùng điều khiển
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
Trang 82.1 TỔNG QUAN VỀ PIC 16F877A
2.1.1 Khái niệm và 1 vài thông tin về vi điều khiển PIC16F877A
Các dòng PIC
- PIC12xxxx: độ dài lệnh là 12 bit
- PIC16xxxx: độ dài lệnh là 14 bit
- PIC18xxxx: độ dài lệnh là 16 bit
C: PIC có bộ nhớ EEPROM
F: PIC có bộ nhớ flash
LF,LV: PIC có bộ nhớ flash hoạt động ở điện áp thấp
Nhưng điển hình có một số vi điều khiển có kí hiệu xxFxxx là EPROM nhưng nếu có thêm chữ A ở cuối thì nó là flash điển hình là PIC 16F877A
Trong khi lựa chọn các vi điều khiển chúng ta nên lựa chọn một cách phù hợp với nhu cầu của mình
- Đầu tiên là số chân PIC
- Thứ 2 nên chọn PIC có bộ nhớ flash để có thể nạp xóa chương trình được nhiều lần
- Thứ 3 chú ý đến các khối chức năng được tích hợp sẵn trong vi điều khiển, các chuẩn giao tiếp bên trong
Trang 9Hình 2.1: Cấu trúc vi điều khiển Thông số bên ngoài:
- Có 35 chân I/O cho phép lựa chọn hướng độc lập:
+ Mỗi ngõ ra có thể nhận/cấp dòng lớn khoảng 25mA nên có thể trực tiếp điều khiển led
+ Có các port báo ngắt khi có thay đổi mức logic
+ Có các port có điện trở kéo lên bên trong có thể lập trình
+ Có ngõ vào báo thức khỏi chế độ công suất cực thấp
- Có module so sánh tương tự:
+ Có 2 bộ so sánh điện áp tương tự
Trang 10+ Có module nguồn điện áp tham chiếu có thể lập trình
+ Có nguồn điện áp tham chiếu cố định có giá trị bằng 0,6V
+ Có các ngõ vào và các ngõ ra của bộ so sánh điện áp
+ Có bộ dao động công suất thấp có tần số 32kHz
- Có timer2: 8 bit hoạt động định thời với thanh ghi chu kỳ, có bộ chia trước
và chia sau
- Có module capture, compare và điều chế xung PWM+ nâng cao
+ Có bộ capture 16 bit có thể đếm được xung với độ phân giải cao nhất là 12,5ns + Có bộ điều chế xung PWM với số kênh ngõ ra là 1, 2 hoặc 4, có thể lập trình với tần số lớn nhất là 20kHz
+ Có ngõ ra PWM điều khiển lái
- Có module capture, compare và điều chế xung PWM
+ Có bộ capture 16 bit có thể đếm được xung với chu kỳ cao nhất là 12,5ns + Có
bộ so sánh 16 bit có thể so sánh xung đếm với chu kỳ lớn nhất là 200ns + Có bộ điều chế xung PWM có thể lập trình với tần số lớn nhất là 20kHz
Trang 11- Có module truyền dữ liệu nối tiếp đồng bộ MSSP hổ trợ chuẩn truyền 3 dây SPI, chuẩn I2C ở 2 chế độ
2.1.2 Sơ đồ khối vi điều khiển PIC16F877A
Sơ đồ khối PIC16F877A:
Hình 2.2 : sơ đồ khối vi điều khiển PIC16F877A
- Có thanh ghi trạng thái (status register) cho biết trạng thái sau khi tính toán của khối ALU
- Có thanh ghi FSR
- Có khối ALU cùng với thanh ghi working hay thanh ghi A để xử lý dữ liệu
Trang 12- Có khối giải mã lệnh và điều khiển (Instruction Decode and Control)
- Có khối dao động nội (Internal Oscillator Block)
- Có khối dao động kết nối với 2 ngõ vào OSC1 và OSC2 để tạo dao động
- Có khối các bộ định thời khi cấp điện PUT, có bộ định thời chờ dao động ổn định, có mạch reset khi có điện, có bộ định thời giám sát watchdog, có mạch reset khi phát hiện sụt giảm nguồn
- Có khối bộ dao động cho timer1 có tần số 32kHz kết nối với 2 ngõ vào T1OSI và T1OSO
- Có khối CCP2 và ECCP
- Có khối mạch gỡ rối (In-Circuit Debugger IDC)
- Có khối timer0 với ngõ vào xung đếm từ bên ngoài là T0CKI
- Có khối truyền dữ liệu đồng bộ/bất đồng bộ nâng cao
- Có khối truyền dữ liệu đồng bộ MSSP cho SPI và I2C
- Có khối bộ nhớ Eeprom 256 byte và thanh ghi quản lý địa chỉ EEADDR và thanh ghi dữ liệu EEDATA
- Có khối chuyển đổi tín hiệu tương tự sang số ADC
- Có khối 2 bộ so sánh với nhiều ngõ vào ra và điện áp tham chiếu
- Có khối các port A, B, C, E và D
2.1.3 Tổ chức bộ nhớ
Cấu trúc bộ nhớ vi điều khiển PIC16F877A bao gồm bộ nhớ chương trình (Programmemory) và bộ nhớ dữ liệu (Data Memmory)
Trang 132.1.3.1 Bộ nhớ chương trình (Program memory)
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 thanh nhiều trang (từ page 0 đến page 3) Như vậy bộ nhớ chương trình có khả năng chứa được 8x1024 = 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 có dung lượng 3 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
Trang 14Hình 2.3: Bộ nhớ chương trình PIV16F877A
2.1.3.2 Bộ nhớ dữ liệu (Data memory)
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 28 byte, bao gồm các thanh ghi có chức năng đặc biệt SFR (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
Trang 15SFR thường xuyên được sử dụng (ví dụ thanh ghi STATUS) sẽ được đặt ở tất cả cácbank 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 16Hình 2.4: Sơ đồ bộ nhớ dữ liệu PIC16F877A
2.1.3.2.1 Thanh ghi chức năng đặc biệt SFR
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều khiển các khối chức năng được tích hợp bên trong vi điều khiển Có thể phân thanh ghi SFR thành 2 loại: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và thanh ghi SFR dùng để thiết lập và điều khiển các khối chức năng bên ngoài (ADC, PWM, )
Thanh ghi STATUS (03h, 83h, 103h, 183h): thanh ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu
Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0
Thanh ghi INTCON (0Bh, 8Bh, 10Bh,18Bh): thanh ghi cho phép đọc và ghi,chứa các bit điều khiển và các bit cờ hiệu khi Timer0 bị tràn, ngắt ngoại vi
RB0/INT và ngắt interrupt-on-change tại các chân của PORTB
Trang 17Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức năng ngoại vi
Thanh ghi PIR1 (0Ch): chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM
Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ resetcủa vi điều khiển
2.1.3.2.2 Thanh ghi mục đích chung GPR
Trang 18
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSR (File Select Register) Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình
2.1.3.3 Stack
Stack không nằm trong bộ nhớ chương trình hay bộ 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 hay 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 quy trình định trước
Bộ nhớ stack trong vi điều khiển PIC họ 16Fxxxx 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 stack lần thứ 10 sẽ ghi đè lên giá trị 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
Trang 192.1.4 Các cổng xuất nhập của PIC16F877A
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dung để 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 đó thì chức năng vi điều khiển được thể hiện 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 của mỗi cổng có thể khác nhau Chức năng của từng chân xuất nhập hoàn toàn
có thể được xác lập và điều khiển thông qua 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, PORTE Cấu trúc và chức năng của từng cổng xuất nhập cụ thểnhư sau:
2.1.4.1 Cổng PORTA
PORTA (RPA) gồm 6 I/O pin Đây là các chân “hai chiều” (bidirectional pin), nghĩa là có thể xuất và nhập được Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h) Muốn xác lập chức năng của một chân trong
PORTA là input, ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập chức năng của một chân trong PORTA là
output, ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA Thao tác này hoàn toàn tương đối với các PORT và các thanh ghi điều khiển tương ứng TRIS ( đối với PORTA là TRISA, PORTB là TRISB, PORTC là TRISC, ) Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so 10 sánh, ngõ vào analog ngõvào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master
Synchronous Serial Port)
Trang 20Các thanh ghi SFR liên quan đến PORTA gồm:
- PORTA: chứa giá trị các pin trong PORTA
- TRISA: điều khiển xuất nhập
- CMCON: thanh ghi điều khiển bộ so sánh
- CVRCON: thanh ghi điều khiển bộ so sánh điện áp
- ADCON1: thanh ghi điều khiển bộ ADC
• Chân RA0/AN0/ULPWU/C12IN0- (2): có 4 chức năng:
+ RA0: xuất/ nhập số – bit thứ 0 của port A
+ AN0: ngõ vào tương tự của kênh thứ 0
• Chân RA1/AN1/C12IN1- (3): có 3 chức năng:
+ RA1: xuất/nhập số – bit thứ 1 của port A
+ AN1: ngõ vào tương tự của kênh thứ 1
• Chân RA2/AN2/VREF-/CVREF/C2IN+ (4): có 5 chức năng:
+ RA2: xuất/nhập số – bit thứ 2 của port A
+ AN2: ngõ vào tương tự của kênh thứ 2
+ VREF-: ngõ vào điện áp chuẩn (thấp) của bộ ADC
+ CVREF: điện áp tham chiếu VREF ngõ vào bộ so sánh
• Chân RA3/AN3/VREF+/C1IN+ (5): có 4 chức năng:
+ RA3: xuất/nhập số – bit thứ 3 của port A
+ AN3: ngõ vào tương tự kênh thứ 3
Trang 21+ C1IN+: ngõ vào dương của bộ so sánh C1
+ Chân RA4/TOCKI/C1OUT (6): có 3 chức năng:
• RA4: xuất/nhập số – bit thứ 4 của port A
+ TOCKI: ngõ vào xung clock từ bên ngoài cho Timer0
+ C1OUT: ngõ ra bộ so sánh 1
+ Chân RA5/AN4/ SS / C2OUT (7): có 4 chức năng:
+ RA5: xuất/nhập số – bit thứ 5 của port A
+ AN4: ngõ vào tương tự kênh thứ 4
+ SS : ngõ vào chọn lựa SPI tớ (Slave SPI device)
+ C2OUT: ngõ ra bộ so sánh 2
• Chân RA6/OSC2/CLKOUT (14): có 3 chức năng:
+ RA6: xuất/nhập số – bit thứ 6 của port A
+ OSC2: ngõ ra dao động thạch anh Kết nối đến thạch anh hoặc bộ cộng hưởng
• Chân RA7/OSC1/CLKIN (13): có 3 chức năng
+ RA7: xuất/nhập số – bit thứ 7 của port A
+ OSC1: ngõ vào dao động thạch anh hoặc ngõ vào nguồn xung ở bên ngoài
2.1.4.2 Cổng PORTB
PORTB (RPB) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISB Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0 PORTB còn được tích hợp chức năng điện trởkéo lên được điều khiển bởi chương trình Các thanh ghi SFR liên quan đến
PORTB gồm:
- PORTB: chứa giá trị các pin trong PORTB
Trang 22- TRISB: điều khiển xuất nhập
- OPTION_REG: điều khiển ngắt ngoại vi và bộ Timer0
• Chân RB0/AN12/INT (33): có 3 chức năng:
+ RB0: xuất/nhập số – bit thứ 0 của port B
+ AN12: ngõ vào tương tự kênh thứ 12
+ INT: ngõ vào nhận tín hiệu ngắt ngoài
+ Chân RB1/AN10/C12IN3- (34): có 3 chức năng:
• RB1: xuất/nhập số – bit thứ 1 của port B
+ AN10: ngõ vào tương tự kênh thứ 10
+ C12IN3-: ngõ vào âm thứ 3 của bộ so sánh C1 hoặc C2
+ Chân RB2/AN8 (35): có 2 chức năng:
• RB2: xuất/nhập số – bit thứ 2 của port B
+ AN8: ngõ vào tương tự kênh thứ 8
+ Chân RB3/AN9/PGM/C12IN2 (36): có 4 chức năng:
• RB3: xuất/nhập số – bit thứ 3 của port B
+ AN9: ngõ vào tương tự kênh thứ 9
+ PGM: Chân cho phép lập trình điện áp thấp ICSP +
C12IN1-: ngõ vào âm thứ 2 của bộ so sánh C1 hoặc C2 + Chân
RB4/AN11 (37): có 2 chức năng: • RB4: xuất/nhập số –
bit thứ 4 của port B
+ AN11: ngõ vào tương tự kênh thứ 11
+ Chân RB5/ AN13/T1G (38): có 3 chức năng:
• RB5: xuất/nhập số – bit thứ 5 của port B
Trang 23+ T1G (Timer1 gate input): ngõ vào Gate cho phép time1 đếm dùng để đếm độ rộngxung
+ Chân RB6/ICSPCLK (39): có 2 chức năng:
• RB6: xuất/nhập số
+ ICSPCLK: xung clock lập trình nối tiếp
+ Chân RB7/ICSPDAT (40): có 2 chức năng:
• RB7: xuất/nhập số
+ ICSPDAT: ngõ xuất nhập dữ liệu lập trình nối tiếp
2.1.4.3 Cổng PORTC
PORTC (RPC) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tƯơng ứng là
TRISC Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART Các thanhghi đ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
• Chân RC0/T1OSO/T1CKI (15): có 3 chức năng:
+ RC0: xuất/nhập số – bit thứ 0 của port C
+ T1OSO: ngõ ra của bộ dao động Timer1
+ T1CKI: ngõ vào xung clock từ bên ngoài Timer1
• Chân RC1/T1OSI/CCP2 (16): có 3 chức năng:
+ RC1: xuất/nhập số – bit thứ 1 của port C
+ T1OSI: ngõ vào của bộ dao động Timer1
Trang 24+ CCP2: ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2
• Chân RC2 /P1A/CCP1 (17): có 3 chức năng:
+ RC2: xuất/nhập số – bit thứ 2 của port C + P1A:
ngõ ra PWM
+ CCP1: ngõ vào Capture1, ngõ ra compare1, ngõ ra PWM1
• Chân RC3/SCK/SCL (18): có 3 chức năng: + RC3: xuất/nhập số – bit thứ 3 của port C
+ SCK: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ SPI
+ SCL: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ I2C
• Chân RC4/SDI/SDA (23): có 3 chức năng:
+ RC4: xuất/nhập số – bit thứ 4 của port C
+ SDI: ngõ vào dữ liệu trong truyền dữ liệu kiểu SPI
+ SDA: xuất/nhập dữ liệu I2C
• Chân RC5/SDO (24): có 2 chức năng:
+ RC5: xuất/nhập số – bit thứ 5 của port C
+ SDO: ngõ xuất dữ liệu trong truyền dữ liệu kiểu SPI
• Chân RC6/TX/CK (25): có 3 chức năng:
+ RC6: xuất/nhập số – bit thứ 6 của port C
+ TX: ngõ ra phát dữ liệu trong chế độ truyền bất đồng bộ USART
+ CK: ngõ ra cấp xung clock trong chế độ truyền đồng bộ USART
• Chân RC7/RX/DT (26): có 3 chức năng:
+ RC7: xuất/nhập số – bit thứ 7 của port C
+ RX: ngõ vào nhận dữ liệu trong chế độ truyền bất đồng bộ EUSART
+ DT: ngõ phát và nhận dữ liệu ở chế độ truyền đồng bộ EUSART
Trang 252.1.4.4 Cổng PORTD
PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng làTRISD PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port) Các thanh ghi liên quan đến PORTD 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 TRISE: điều khiển xuất nhập PORTE và chuẩn giao tiếp PSP
Trang 26- 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
- SDCON1: thanh ghi điều khiển khối ADC
• Chân RE0/AN5 (8): có 2 chức năng:
+ RE0: xuất/nhập số
+ AN5: ngõ vào tương tự 5
• Chân RE1/AN6 (9): có 2 chức năng:
+ RE1: xuất/nhập số
+ AN6: ngõ vào tương tự kênh thứ 6
• Chân RE2/AN7 (10): có 2 chức năng:
+ RE2: xuất/nhập số
+ AN7: ngõ vào tương tự kênh thứ 7
• Chân RE3/ MCLR /VPP (1): có 3 chức năng:
+ RE3: xuất/nhập số – bit thứ 3 của port E
Trang 27+ VPP: ngõ vào nhận điện áp khi ghi dữ liệu vào bộ nhớ nội flash + Chân
Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển
PIC16F877A Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn Bit TMR0IE
(INTCIN) là bit điều khiển của Timer0 TMR0IE=1 cho phép ngắt Timer0 tác động,TMR0IF=0 không cho phép ngắt Timer0 tác động Sơ đồ khối của Timer0 như sau:
Hình 2.5: Sơ đồ khối của Timer0
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC