Mạch có thể kết nối giao tiếp với máy tính thích hợp cho những người quản lí tại phòng kĩ thuật nắm bắt được tình hình sản xuất qua màn hình máy vi tính.c Phương pháp đếm sản phẩm dùng
Trang 1DẪN NHẬP 3
1 ĐẶT VẤN ĐỀ 3
2 CHỌN PHƯƠNG ÁN THIẾT KẾ 4
3 MỤC ĐÍCH YÊU CẦU CỦA ĐỀ TÀI 5
4 GIỚI HẠN CỦA ĐỀ TÀI 5
PHẦN 1 : KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F877A 6
CHƯƠNG 1 : CẤU TRÚC PHẦN CỨNG CỦA PIC 16F877A 6
1.1 Sơ lượt về vi điều khiển PIC 16F877A 6
1.2 Sơ lượt về các chân của PIC 16F877A 7
1.3 Một số điểm đặc biệt của PIC 16F877A 12
1.4 Tổ chức bộ nhớ 17
1.5 I/O port 33
CHƯƠNG 2 : BỘ ĐỊNH THỜI 40
2.1 Bộ định thời Timer0 40
2.2 Bộ định thời Timer 1 41
2.3 Bộ định thời Timer 2 44
CHƯƠNG 3 : MODULE CCP 47
3.1 Giới thiệu 47
3.2 Thanh ghi điều khiển module CCP 48
3.3 Chế độ Capture 49
3.4 Chế độ Compare 50
3.5 Chế độ điều biến xung PWM 50
CHƯƠNG 4 : BỘ BIẾN ĐỔI ADC 10 BIT 54
4.1 Giới thiệu module ADC 10 bit 54
4.2 Các thanh ghi điều khiển 54
4.3 Hoạt động của module ADC 56
4.4 Thời gian lấy mẫu 57
4.5 Lựa chọn xung clock cho biến đổi ADC 58
4.6 Cấu hình các chân Analog 59
4.7 Chuyển đổi ADC 59
4.8 Hoạt động của module ADC trong chế độ ngủ 60
4.9 Ảnh hưởng của Reset 60
Trang 2CHƯƠNG 5 : ĐIỆN THẾ THAM CHIẾU VÀ CÁC BỘ SO SÁNH 62
5.1 Module Comparator 62
5.2 Module điện áp tham chiếu 67
5.3 Giao tiếp nối tiếp 69
5.4 I2C 79
PHẦN 2 : GIỚI THIỆU LINH KIỆN VÀ TÍNH TOÁN LINH KIỆN 81
CHƯƠNG 7 : GIỚI THIỆU LINH KIỆN 81
7.1 Điện trở 81
7.2 Tụ điện 84
7.3 Diode 88
7.4 Transistor 95
7.5 Led đơn 99
7.6 Led 7 đoạn 101
7.7 Led Thu-Phát hồng ngoại 103
7.8 IC ổn áp LM78xx và LM79xx 103
7.9 IC giải mã 74LS247 106
7.10 IC giải mã 74HC138 107
PHẦN 3 : CÁC KHỐI TRONG MẠCH VÀ NGUYÊN LÝ HOẠT ĐỘNG CỦA MẠCH 110
CHƯƠNG 8 : CÁC KHỐI TRONG MẠCH ……… ………110
8.1 Khối nguồn 111
8.2 Khối hiển thị 112
8.3 Khối cảm biến……… 112
8.4 Khối PIC……… 113
8.5 Khối rơle……… 114
CHƯƠNG 9: NGUYÊN LÝ HOẠT ĐỘNG 114
PHẦN 4 : LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH 115
CHƯƠNG 10:LƯU ĐỒ GIẢI THUẬT……… … …… …115
CHƯƠNG 11:CHƯƠNG TRÌNH ASSAMLY CHO PIC……… ….117
PHẦN 5 : TỒNG KẾT……… …138 Tài liệu tham khảo
Trang 3có chọn lọc
Tuy nhiên tại một số doanh nghiệp vừa và nhỏ thì việc tự động hóa vẫn chưa được áp dụng trong những khâu đếm và phân loại sản phẩm mà vẫn sử dụng nhân công Qua đó, chúng em cảm thấy nên nghiên cứu và thiết kế một mạch dếm sản phẩm, dù chỉ là một mô hình đơn giản nhưng đây là bước đầu để sự tựđộng hóa trong sản suất ngày càng được quan tâm và ngành điện tử, cụ thể là ngành công nghiệp điện tử ngày càng được chú trọng
Để làm được mạch này cần quan tâm đến hai khâu là khâu đếm và khâu càm biến:
Khâu đếm: Có nhiều phương pháp thực thi như:
Lắp mạch kỹ thuật số với các IC đếm, chốt, so sánh ghép lại
Lắp mạch dung kỹ thuật vi xử lí
Lắp mạch dung kỹ thuật vi điều khiển
Khâu cảm biến: Gồm phần phát và phần thu Thông thường người ta sử dụng cảm biến quang có tích hợp phần thu và phát nhằm mục đích chống nhiễu Ngoài ra ta còn có thể sử dụng cảm biến hồng ngoại cho
Trang 4phần phát và transistor quang cho phần thu để giảm bớt chi phí với dộ chính xác tương đương.
2 CHỌN PHƯƠNG ÁN THIẾT KẾ:
a) Phương pháp đếm sản phẩm dùng IC số:
Các ưu điểm như sau:
Cho phép tăng hiệu suất lao động
Đảm bảo độ chính xác cao
Tần số đáp ứng nhanh, cho phép đếm với tần số cao
Khoảng cách đặt phần phát xa nhau cho pháp đếm những sản phẩm lớn
Tổn hao công suất bé, mạch có thể sử dụng pin hoặc acquy
tế mà nhiều khi yêu cầu không đươc đáp ứng bằng cách này Với
sự phát triển mạnh của ngành kỹ thuật số đặc biệt là cho ra đời các họ vi xử lí và vi điều khiển nhiều chức năng Do đó việc dùng kĩ thuật vi xử lí, vi điều khiển đã giải quyết những bế tắc
và kinh tế hơn mà phương pháp dùng IC rời kết nối không thể thực hiên được
Số linh kiện sử dũng trong mạch ít hơn
Trang 5 Mạch có thể kết nối giao tiếp với máy tính thích hợp cho những người quản lí tại phòng kĩ thuật nắm bắt được tình hình sản xuất qua màn hình máy vi tính.
c) Phương pháp đếm sản phẩm dùng vi điều khiển:
Ưu điểm: Ngoài những ưu điểm trên phương pháp này còn có những ưuđiểm:
Trong mạch có thể sử dụng ngay bộ nhớ trong đối với những chương trình có quy mô nhỏ, rất tiện lợi mà vi xử lí không thực hiện được
Có thể giao tiếp trực tiếp với máy tính Vi xử lí cũng có thể giao tiếp được nhưng là giao tiếp song song nên cần có linh kiện để chuyển đổi từ song song sang nối tiếp để giao tiếp với máy tính
Trong sản xuất người ta thường sử dụng phương pháp tối ưu nhất nhưng do kinh tế nên chúng em sử dụng phương pháp đếm sản phẩm dùng vi điều khiển
3 MỤC ĐÍCH YÊU CẦU CỦA ĐỀ TÀI:
Trong mạch này chúng em thực hiện mạch đếm sản phẩm bằng phương pháp đếm xung Như vậy mỗi sản phẩm đi qua băng truyền phải có một thiết bị để cảm nhận sản phẩm người ta gọi là cảm biến Khi sản phẩm đi qua cảm biến sẻ nhận và tao ra một xung điện đưa về khối xử lí để tăng dần
số đếm Tại một thời điểm tức thời để xác định được số đếm cần phải có bộphận hiển thị Tuy nhiên mỗi khu vực sản xuất hay mỗi ca sản xuất lai yêu cầu một số đếm khác nhau Do đó cần phải có sự linh hoạt trong việc chuyển đổai số đếm Bộ phận trực quan nhất là bàn phím Khi cần thay đổi
số đếm người ta chỉ cần nhập số đếm trên bàn phím và mạch tự đông đếm Khi số sản phẩm đếm bằng với số đã nhập thì mạch tự dộng dừng Từ đó suy ra yêu cầu, mục đích của đề tài:
Số đếm phài chính xác và việc cài đặt số đếm phải linh hoạt
Mạch hiển thị phải rõ ràng
Mạch điện không quá phức tạp, đảm bảo an toàn, dể sử dụng
Giá thành phù hợp
4 GIỚI HẠN CỦA ĐỀ TÀI:
Trong sản xuất có nhiều loại sản phẩm khác nhau, với kich cỡ, vật liệu và màu sắc khác nhau Tuy nhiên mạch chỉ đếm dược 3 loại sản phẩm, sản
Trang 6phẩm phải là vật có thể che chắn ánh sáng Mỗi loại sản phẩm chỉ đếm được tối đa 99 sản phẩm kích thước sản phẩm có giới hạn.
PHẦN I : KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F877A
CHƯƠNG 1 : CẤU TRÚC PHẦN CỨNG CỦA PIC 16F877A
1.1 Sơ lượt về vi điều khiển PIC 16F877A
Đâ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ố độ 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, 40châ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ủaPIC16F877A như sau:
8K Flash ROM
368 Bytes RAM
256 Bytes EEPROM
ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập
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 ngoài
bô CCP( Capture / Compare/ PWM)
1 bộ biến đổi AD 10 bits, 8 ngõ vào
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
Trang 7 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 ngồi
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 :
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 SerialProgramming) thơng qua 2 chân Watchdog Timer với bộ dao độngtrong
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ượt về các chân của PIC
Trang 11độ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 PIC 16F877A :
1.3 MỘT SỐ ĐIỂM ĐẶC BIỆT CỦA CPU :
Trang 12sử 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:
Lưu ý :Tụ có giá trị lớn sẽ tăng tính ổn Chế độ dao động RC được sử dụng
như
định của dao động nhưng cũng làm tăng một giải pháp tiết kiệm trong các ứngthời gian khởi động dụng không cần sự chính xác về thời gian
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
Trang 13 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)
1.3.3 MCLR :
đư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ị
Trang 14
1.3.4 I N T E R R U P T S
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 151.3.5 C H Ế Đ Ộ N G U Ồ N T H Ấ P S L EE P ( P O W E R D O W N M O D E )
Đâ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ếptụ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 khilệ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
Trang 16 Để ý chức năng ñiện trở kéo lên của PORTB.
Pin MCLR phải ở mức logic cao
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âninput 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ươngtrình, bạn compiled nó thành công, và ngay cả bạn đã cho chạy mô phỏngtừ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ườnghợ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ềumicroprocessors và microcontrollers đã có mạch Watchdog, nhưng mà nó làmviệc ra sao ?
Bên trong vi xử lí Pic có một mạch RC, mạch này cung cấp 1 xungClock độc lập với bất kỳ xung Clock nào cung cấp cho Pic Khi WatchdogTimer (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ì WDTvẫ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à đếnFF+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 ?
Trang 171 4 TỔ CHỨC 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 gian nhớ 8K x 14bits Khơng gian bộ nhớ này được chia làm 8 trang, cĩ địa chỉ từ 0005h đến 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ộ nhớ chương trình cịn bao gồm một ngăn xếp (Stack) 8 mức Vector Reset được đặt tại địa chỉ 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ềutrang ( từ page0 đến page 3) Nhờ vậy bộ nhớ chương trình cĩ khả năngchứa được 8*1024 = 8192 lệnh (vì một lệnh sau khi mã hĩa sẽ cĩ dunglượng 1 word (14 bit)
Để mã hĩa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếmchương trình cĩ dung lượng 13 bit (PC<12:0>) Khi vi điều khiển được reset,
Trang 18bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector) Khi có ngắtxảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector).
Bộ đếm 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 19thể của bộ nhớ dữ liệu PIC16F877A như sau:
Trang 21tiế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 25Each 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 P D : 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ứană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
Trang 26Bit 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/INTBit 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 0: Xung Clock cung cấp bởi nguồn dao động nội
Bit 4 T0SE: Bit lựa chọn cạnh nào của xung clock tác động lên timer0
36s 72s
144 ms
288 ms
576 ms 1.1 s
1.4.3.3 Thanh Ghi Điều Khiển Ngắt INTCON ( Interrupt Control Register) :
Trang 270: 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 timer0 tràn
1: Cho phép ngắt khi timer0 tràn
0: Không cho phép ngắt khi timer0 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
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: Cho phép
0: Không cho phép
Trang 28Bit 6 ADIE: Bit cho phép ngắt chuyển đổi A/D
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)
0: Không có hoạt động đọc/ghi
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
Trang 291: 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ế
Trang 30Bit 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
Chế độ Capture (bắt giữ):
1: Một sự bắt giữ thanh ghi TMR1 đã xảy ra (phải được
xóa bằng phần mềm)0: Không xảy ra Capture thanh ghi TMR1
Chế độ Compare (So sánh):
1: Một thuật toán so sánh trong thanh ghi TMR1 xảy ra (phải
được xóa bằng phần mềm)0: Không xảy ra thuật toán so sánh
Trang 31Bộ đếm chương trình PC
(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
Trang 32cá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 CP sẽ bị xĩa
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à la2mot65vùng nhớ đặc biệt khơng cho phép đọc hay ghi Khi lệnh CALL được thực hiệnhay 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ươngtrình PC tự động được vi điều khiển cắt vào trong stack Khi một trong các lệnhRETURN, RETLW hat RETFIE được thực thi, giá trị PC sẽ tự động đượclấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng quitrì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 trong Stack lần đầu tiên và giá trị cắtvào bộ nhớ Stack lần thứ 10 sẽ ghi đề lên giá trị cắt vào trong 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ơngbiết được khi nào stack tràn Bên cạnh đĩ tập lện của vi điều khiển PIC cữngkhong cĩ lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hồn tồnđược điều khiển của 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ì
Trang 33M
và Fla
sh Progra
m MemoryEE
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 địachỉ 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 đối với thế giới bên ngoài Sự tương tác này rất đa dạng và thông quaquá 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ới số lượngchân trong có thể khác nhau Bên cạnh đó, do vi điều khiển được tích hợp sẵnbên trong các đặc tính giao tiếp ngoại vi nên bên cạch chức năng là cổng xuấtnhậ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 đều
Trang 34Chức nagn8 của từng chân xuất nhập trong hoàn toàn có thể được xác lập và điềukhiển 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 PortA 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 ngoà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 35Chức năng của portA
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ìnhbà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 đọcthanh ghi PortB sẽ đọc trạng thái của các chân ở Port B Việc ghi giá trị vào thanhghi Port B sẽ thay đổi trạng thái của các chân PortB
Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger vàLow Voltage Programming function: RB3/PGM, RB6/PGC, RB7/PGD Mỗi chânPort B có 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ânPortB thay đổi (Khi Port B được quy định là output thì chức năng này không hoạt
Trang 36độ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ậtlên Ngắt có thể làm cho VđK thoá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 Port B
Trang 37PORTB (đị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 PortC 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 PortC
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, ngoà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 38Các thanh ghi điều khiển liên quan đến PORTC:
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ấtnhập, PortD còn có thể hoạt động như một cổng song song bằng cách set bitPSPMODE (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
Trang 39Cá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
Ngoà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
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
Trang 40Bả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 gia tiếp PSP
ADCON1 : thanh ghi điều khiển khối ADC
CHƯƠNG 2 : BỘ ĐỊNH THỜI
2.1 Bộ Định Thời Timer0 :
2.1.1 Giới Thiệu :
Module Timer0 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 xungclock trong hoặc ngoài, có ngắt khi Timer tràn, có bit lựa chọn cạnh tác động củaxung clock ngoài