Đăng ký Đăng nhập
Trang chủ Thể loại khác Chưa phân loại Tài liệu hướng dẫn-tài liệu thực tập chuyên đề 1...

Tài liệu Tài liệu hướng dẫn-tài liệu thực tập chuyên đề 1

.PDF
35
136
81

Mô tả:

ĐẠI HỌC ĐÀ NẴNG TRUỜNG ĐẠI HỌC BÁCH KHOA  TÀI LIỆU THỰC TẬP CHUYÊN ĐỀ 1 (LƯU HÀNH NỘI BỘ, KHÓA 09CVL TRƯỜNG ĐH SƯ PHẠM) Biên soạn: Phạm Xuân Trung Bộ môn Kỹ thuật Máy tính Khoa Điện tử Viễn thông     TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   Mục tiêu: Sinh viên sau khi đọc xong tài liệu này có thể: - Lập trình được một chương trình đơn giản cho Vi điều khiển PIC16F877A - Sử dụng phần mềm mô phỏng PIC Simulator IDE để lập trình và mô phỏng một chương trình đơn giản. - Sử dụng bộ công cụ MPLAB để lập trình và nạp chương trình cho KIT PICDEM2 PLUS. - Đọc được các thông số hiển thị trên chương trình mô phỏng. - Sử dụng được KIT PICDEM2 PLUS để thực hiện các bài thực hành đơn giản. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang Page 1  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   1.1. Lý thuyết Vi điều khiển PIC16F877A PIC là chữ viết tắt của "Peripheral Interface Controller" (Bộ điều khiển giao tiếp ngoại vi). Vi điều khiển PIC16F877A (có kèm chữ “A” ở cuối đồng nghĩa với việc Vi điều khiển này sử dụng bộ nhớ chương trình Flash) thuộc họ vi điều khiển PIC16F, sở hữu hầu hết các chức năng phổ biến thường gặp ở các vi điều khiển trong họ. Một số đặc điểm của Vi điều khiển PIC16F877A: CPU kiểu RISC hiệu suất cao: - Tập lệnh gồm 35 lệnh - Các lệnh chỉ thực hiện trong 1 chu kỳ máy ngoại trừ các lệnh rẽ nhánh lúc thực hiện hoạt động rẽ nhánh. - Bộ nhớ chương trình flash dung lượng 8Kx14 words - Bộ nhớ dữ liệu RAM tĩnh dung lượng 368x8 bytes - Bộ nhớ dự liệu EEPROM dung lượng 256x8 bytes - Số lượng chân là 40 Các đặc trưng ngoại vi: - 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(bắt xung/phát hiện xung) /so sánh/điều chế độ rông xung (PWM) o Bộ Capture 16-bit, độ phân giải tối đa là 12.5 ns o Bộ so sánh 16-bit, độ phân giải tối đa là 200 ns o Bộ PWM độ phân giải tối đa là 10-bit - 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. 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. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 2  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   - 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.1.1. Sơ đồ chân, một số chức năng các chân cần quan tâm 1.1.1.1. Sơ đồ chân và 3 kiểu đóng gói Hiện nay, Microchip đưa ra thị trường 3 kiểu đóng gói khác nhau cho vi điều khiển PIC16F877A: 40 chân kiểu PDIP, 44 chân kiểu PLCC và TQFP. Kiểu 40 chân PDIP được sử dụng khá nhiều trong các ứng dụng thực tế không yêu cầu cao về độ phức tạp bởi nó dễ thiết kế mạch, dễ thay thế chip nếu có xảy ra hỏng hóc. Vì vậy, trong tất cả những nội dung được trình bày đều sử dụng cho PIC16F877A có kiểu đóng gói 40 chân PDIP. PDIP: Plastic Dual In-line Package PLCC: Plastic Leaded Chip Carrier TQFP: Thin Quad Flat Pack Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 3  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   1.1.1.2. Một số chức năng các chân cần quan tâm Chân 1 2 3 4 5 6 7 Tên Chức năng : Hoạt động Reset ở mức thấp - VPP : ngõ vào áp lập trình - RA0 : xuất/nhập số RA0/AN0 - AN0 : ngõ vào tương tự - RA1 : xuất/nhập số RA1/AN1 - AN1 : ngõ vào tương tự - RA2 : xuất/nhập số RA2/AN2/VREF-/CVREF - AN2 : ngõ vào tương tự - VREF -: ngõ vào điện áp chuẩn (thấp) của bộ A/D - RA3 : xuất/nhập số RA3/AN3/VREF+ - AN3 : ngõ vào tương tự - VREF+ : ngõ vào điện áp chuẩn (cao) của bộ A/D - RA4 : xuất/nhập số RA4/TOCKI/C1OUT - TOCKI : ngõ vào xung clock bên ngoài cho timer0 - C1 OUT : Ngõ ra bộ so sánh 1 - RA5 : xuất/nhập số RA5/AN4/ /C2OUT - AN4 : ngõ vào tương tự 4 /VPP Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 4  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   8 RE0/ /AN5 RE1/ /AN6 RE2/ /AN7 9 10 11 12 13 VDD VSS OSC1/CLKI 14 OSC2/CLKO 15 RC0/T1 OCO/T1CKI 16 RC1/T1OSI/CCP2 17 RC2/CCP1 18 RC3/SCK/SCL - SS : ngõ vào chọn lựa SPI phụ - C2 OUT : ngõ ra bộ so sánh 2 - RE0 : xuất nhập số - RD : điều khiển việc đọc ở port nhánh song song - AN5 : ngõ vào tương tự - RE1 : xuất/nhập số - WR : điều khiển việc ghi ở port nhánh song song - AN6 : ngõ vào tương tự - RE2 : xuất/nhập số - CS : Chip lựa chọn sự điều khiển ở port nhánh song song - AN7 : ngõ vào tương tự Chân nguồn của PIC. Chân nối đất Ngõ vào dao động thạch anh hoặc xung clock bên ngoài. - OSC1 : ngõ vào dao động thạch anh hoặc xung clock bên ngoài. Ngõ vào Schmit trigger khi được cấu tạo ở chế độ RC ; một cách khác của CMOS. - CLKI : ngõ vào nguồn xung bên ngoài. Luôn được kết hợp với chức năng OSC1. Ngõ vào dao động thạch anh hoặc xung clock - OSC2 : Ngõ ra dao động thạch anh. Kết nối đến thạch anh hoặc bộ cộng hưởng. - CLKO : ở chế độ RC, ngõ ra của OSC2, bằng tần số của OSC1 và chỉ ra tốc độ của chu kỳ lệnh. - RC0 : xuất/nhập số - T1OCO : ngõ vào bộ dao động Timer 1 - T1CKI : ngõ vào xung clock bên ngoài Timer 1 - RC1 : xuất/nhập số - T1OSI : ngõ vào bộ dao động Timer 1 - CCP2 : ngõ vào Capture 2, ngõ ra compare 2, ngõ ra PWM2 - RC2 : xuất/nhập số - CCP1 : ngõ vào Capture 1, ngõ ra compare 1, ngõ ra PWM1 - RC3 : xuất/nhập số - 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 Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 5  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   19 20 21 22 RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 23 RC4/SDI/SDA 24 RC5/SDO 25 RC6/TX/CK 26 RC7/RX/DT 27 28 29 30 31 32 33 34 35 36 37 38 RD4/PSP RD5/PSP5 RD6/PSP6 RD7/PSP7 VSS VDD RB0/INT RB1 RB2 RB3 RB4 RB5 chế độ I2C - RD0 : xuất/nhập số - PSP0 : dữ liệu port nhánh song song - RD1 : xuất/nhập số - PSP1 : dữ liệu port nhánh song song - RD2 : xuất/nhập số - PSP2 : dữ liệu port nhánh song song - RD3: xuất/nhập số - PSP3 : dữ liệu port nhánh song song - RC4 : xuất/nhập số - SDI : dữ liệu vào SPI - SDA : xuất/nhập dữ liệu vào I2C - RC5 : xuất/nhập số - SDO : dữ liệu ra SPI - RC6 : xuất/nhập số - TX : truyền bất đồng bộ USART - CK : xung đồng bộ USART - RC7 : xuất/nhập số - RX : nhận bất đồng USART - DT : dữ liệu đồng bộ USART - RD4: xuất/nhập số - PSP4 : dữ liệu port nhánh song song - RD5: xuất/nhập số - PSP5 : dữ liệu port nhánh song song - RD6: xuất/nhập số - PSP6 : dữ liệu port nhánh song song - RD7: xuất/nhập số - PSP7 : dữ liệu port nhánh song song Chân nối đất Chân nguồn của PIC. - RB0 : xuất/nhập số - INT : ngắt ngoài xuất/nhập số xuất/nhập số - RB3 : xuất/nhập số - Chân cho phép lập trình điện áp thấp ICPS - xuất/nhập số - Ngắt PortB - xuất/nhập số - Ngắt PortB Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 6  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   39 RB6/PGC 40 RB7/PGD - RB6 : xuất/nhập số - PGC : mạch vi sai và xung clock lập trình ICSP - Ngắt PortB - RB7 : xuất/nhập số - PGD : mạch vi sai và dữ liệu lập trình ICSP - Ngắt PortB 1.1.2. Tổ chức bộ nhớ chuơng trình Mô tả thanh ghi bộ đếm chương trình PC, 8 cấp ngăn xếp (stack), bộ nhớ chương trình Flash được phân thành 4 trang, sự liên quan giữa các 3 thành phần, và cách sử dụng các thành phần này. 1.1.2.1. Bản đồ bộ nhớ chương trình và ngăn xếp Bộ nhớ chương trình của vi xử lý PIC16F877A là tập hợp các vị trí nhớ được gọi là các “word”. Kích thước của bộ nhớ chương trình là 8Kword, có dải địa chỉ nằm trong đoạn [0000h, 1FFFh]. Độ rộng của mỗi “word” là 14 bit. Ngăn xếp (stack) của vi xử lý PIC16F877A có tất cả 8 vị trí nhớ hay còn gọi là 8 cấp stack. Các cấp stack này về bản chất liên quan trực tiếp đến thanh ghi bộ đếm chương trình (thanh ghi PC) và thông qua đó là địa chỉ của các word thuộc bộ nhớ chương trình. Thanh ghi bộ đếm chương trình (thanh ghi PC) liên quan trực tiếp đến địa chỉ của các word thuộc bộ nhớ chương trình, đồng thời cũng liên quan trực tiếp đến 8 cấp stack. Cả ba thành phần trên sử dụng chung một bus địa chỉ có độ rộng là 13 bit. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 7  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   1.1.2.2. Bộ nhớ chương trình: Bộ nhớ chương trình là thành phần lưu trữ chương trình dưới dạng mã máy (các chuỗi bit nhị phân). Ban đầu, người lập trình sử dụng một ngôn ngữ bất kỳ (khác mã máy) để viết chương trình, sau đó sử dụng trình biên dịch để biên dịch chương trình sang mã máy, và nạp vào vi xử lý. Bộ nhớ chương trình của vi xử lý PIC16F877A được tổ chức thành 4 trang (page). Kích thước mỗi trang là 2Kword, vì vậy dải địa chỉ tương đối(độ dời) của mỗi trang thuộc đoạn [0000h, 07FFh]. Các trang cũng được đánh địa chỉ trang để dễ dàng quản lý, lần lượt là 0h cho trang 0, 1h cho trang 1, 2h cho trang 2, 3h cho trang 3. Tuy nhiên, trang 0 có sự khác biệt với các trang còn lại. Địa chỉ 0000h không sử dụng để lưu trữ chương trình mà sử dụng cho véc tơ Reset. Địa chỉ 0004h cũng không sử dụng để lưu trữ chương trình mà sử dụng cho véc tơ ngắt. Như vậy, dải địa chỉ tương đối của trang 0 phải bắt đầu từ 0005h. Cách biểu diễn địa chỉ logic: địa chỉ logic = địa chỉ trang bộ nhớ: địa chỉ tương đối. Ví dụ, word 00AAh của trang 1 có địa chỉ logic là “1h:00AAh” Cách tính địa chỉ tuyệt đối cho các loại bộ nhớ phân trang: địa chỉ tuyệt đối = địa chỉ trang bộ nhớ x kích thước của trang bộ nhớ + địa chỉ tương đối. Ví dụ, word 00AAh của trang 1 (kích thước của trang là 2Kword) có địa chỉ tuyệt đối = 1h x 800h + 00AAh = 08AAh. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 8  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   1.1.2.3. Thanh ghi bộ đếm chương trình (Thanh ghi PC) Thanh ghi PC được sử dụng để trỏ đến lệnh cần thực hiện. Độ rộng của thanh ghi PC là 13 bit. Trong đó, 11 bit thấp <10,0> được sử dụng để lưu trữ giá trị địa chỉ tương đối thuộc trang bộ nhớ đang chứa lệnh được trỏ đến, 2 bit cao còn lại <12,11> được sử dụng để lưu trữ địa chỉ trang bộ nhớ. Ngoại trừ trường hợp đặc biệt, sau khi lệnh được nạp vào thanh ghi lệnh Instruction Register, ngay lập tức giá trị được lưu trữ trong thanh ghi PC sẽ tự động tăng lên 1 để trỏ đến lệnh kế tiếp cần thực hiện. 1.1.2.4. Ngăn xếp (stack) Stack có 8 cấp với chức năng lưu trữ địa chỉ trở về từ chương trình con hoặc chương trình con phục vụ ngắt. Vì được sử dụng để lưu trữ địa chỉ các word thuộc bộ nhớ chương trình nên độ rộng của mỗi cấp stack sẽ là 13 bit giống với thanh ghi PC. Stack hoạt động theo nguyên lý LIFO (vào sau ra trước). Đối với vi xử lý PIC16F877A, không có con trỏ stack nên không thể kiểm soát được hoạt động tràn, vì vậy khuyến cáo không nên có quá 8 chương trình con lồng vào nhau. 1.1.3. Tổ chức bộ nhớ dữ liệu RAM Mô tả cách phân chia bộ nhớ dữ liệu RAM thành 2 nhóm thanh ghi, cách thức sử dụng một vài thanh ghi cần thiết cho các bài thí nghiệm. 1.1.3.1. Sơ đồ tổ chức bộ nhớ dữ liệu RAM (Bản đồ tệp thanh ghi) Bộ nhớ dữ liệu RAM của vi xử lý PIC16F877A có dung lượng là 512 byte, có dải địa chỉ thuộc đoạn [000h, 1FFh]. Tuy nhiên, chỉ có 368byte là có thể sử dụng. Bộ nhớ dữ liệu RAM này được chia thành 4 bank thanh ghi. Mỗi bank thanh ghi có kích thước là 128byte, trong đó các bank thanh ghi chỉ có khoảng trên dưới 80byte được định nghĩa hay nói cách khác chỉ có khoảng trên dưới 80 thanh ghi cho mỗi bank ngoại trừ bank 0. Dải địa chỉ tương đối của mỗi bank thanh ghi thuộc đoạn [00h, 7Fh]. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 9  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   Mỗi thanh ghi thuộc bộ nhớ dữ liệu RAM có độ rộng là 8 bit. Để có thể truy cập một thanh ghi thuộc bất kỳ một bank thanh ghi nào, người lập trình phải thực hiện việc chọn đúng bank thanh ghi mới có thể làm việc chính xác với thanh ghi đó. Cách biểu diễn địa chỉ logic và cách tính địa chỉ tuyệt đối giống với bộ nhớ chương trình. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 10  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   Bộ nhớ dữ liệu RAM (Tệp thanh ghi) được chia làm 2 nhóm: nhóm tệp thanh ghi chức năng đặc biệt SFR và nhóm tệp thanh ghi mục đích chung GPR. Nhóm SFR có thể truy cập các thanh ghi bằng cách sử dụng tên riêng hoặc địa chỉ tương đối của thanh ghi trong bank. Nhóm GPR chỉ có thể truy cập các thanh ghi thông qua địa chỉ tương đối của thanh ghi trong bank. 1.1.3.2. Thanh ghi STATUS Thanh ghi STATUS là một thanh ghi 8 bit, có thể tác động đến từng bit. Thanh ghi này có mặt ở cả 4 bank bộ nhớ với địa chỉ tương đối là 03h. Đặc điểm của vi xử lý PIC16F877A là phải chọn bank thanh ghi trước khi sử dụng các thanh ghi thuộc một bank bất kỳ, mà thanh ghi STATUS có 3 bit sử dụng trong việc chọn bank thanh ghi cho cả chế độ định địa chỉ gián tiếp và trực tiếp, nên thanh ghi này có mặt trong cả 4 bank thanh ghi tạo sự tiện lợi khi lập trình.   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). 1 = Bank 2, 3 (100h – 1FFh ) 0 = Bank 0, 1 (00h – FFh) Bit 6 – 5: RP1 – RP0: Bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ trực tiếp). 11 = Bank 3 ( 180h – 1FFh) 10 = Bank 2 (100h – 17Fh) 01 = Bank 1 (80h – FFh) 00 = Bank 0 (00h – 7Fh) 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. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 11  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   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ớ 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)/ borrow 1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ 4 bit cao. 0: Không có số nhớ sinh ra. 1.1.3.3. Các thanh ghi FSR và INDF Thanh ghi FSR và thanh ghi INDF là cặp thanh ghi luôn được sử dụng cùng nhau trong chế độ định địa chỉ gián tiếp. Tuy nhiên, để có thể chọn được bank thanh ghi có chứa thanh ghi cần truy cập, cần kết hợp giữa thanh ghi FSR và thanh ghi STATUS (như hình dưới). Thanh ghi FSR chứa dữ liệu là địa chỉ của thanh ghi cần truy cập hay nói cách khác thanh ghi FSR “trỏ” đến thanh ghi cần cần truy cập. Thanh ghi INDF chứa nội dung của thanh ghi có địa chỉ nằm trong thanh ghi FSR. Ví dụ: Thanh ghi 55h có giá trị là 255. Nếu FSR = 55h thì INDF =255. Tóm lại, thanh ghi INDF không phải là một thanh ghi vật lí. Nó chứa giá trị của thanh ghi có địa chỉ được lưu trữ ở thanh ghi FSR. 1.1.3.4. Các thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE Để có thể thực hiện được các bài thí nghiệm, cần phải nắm chức năng và cách sử dụng của các thanh ghi TRIS (với = A,B,C,D,E). Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 12  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   Nhóm các thanh ghi TRIS được sử dụng để cấu hình cho các cổng xuất/nhập (I/O) của vi xử lý PIC16F877A sẽ trở thành ngõ vào hay ngõ ra. Các chân của các cổng I/O sẽ tương ứng với các bit của các thanh ghi TRIS về mặt tên gọi. Ví dụ: với cổng A (PORT A), các chân của cổng này là RA0/RA1/RA2/RA3/RA4/RA5 sẽ tương ứng với các bit của thanh ghi TRISA là TRISA<0>/ TRISA<1>/ TRISA<2>/ TRISA<3>/ TRISA<4>/ TRISA<5>. Để các chân của PORT I/O trở thành ngõ vào thì các giá trị của các bit tương ứng trong thanh ghi TRIS tương ứng phải nhận giá trị là “1”, và ngược lại là “0” để trở thành ngõ ra. Ví dụ, để chân RA1 của PORT A trở thành ngõ vào thì bit TRISA<0> = 1, để chân RA5 của PORTA trở thành ngõ ra thì TRISA<5> = 0. 1.1.3.5. Các thanh ghi PORTA, PORTB, PORTC, PORTD, PORTE Để có thể thực hiện được các bài thí nghiệm, cần phải nắm chức năng và cách sử dụng của các thanh ghi PORT (với = A,B,C,D,E). Các thanh ghi PORT là thanh ghi lưu trữ dữ liệu hoặc nhận được từ ngoại vi thông qua các chân thuộc PORT I/O tương ứng hoặc sẽ xuất ra trên các chân thuộc PORT I/O tương ứng. Vì vậy, việc nhận dữ liệu hay xuất dữ liệu của các thanh ghi PORT sẽ phụ thuộc vào việc các thanh ghi TRIS tương ứng được cấu hình là ngõ vào hay ngõ ra. Ví dụ, PORT A có chân RA0 được cấu hình là ngõ vào khi TRISA<0> = 1, nên khi có tín hiệu hoặc 0 hoặc 1 gửi đến chân RA0 thì bit PORTA<0> tương ứng cũng sẽ nhận hoặc 0 hoặc 1. Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 13  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   1.1.4. Cổng xuất/nhập song song. Vi xử lý PIC16F877A sử dụng 5 PORT I/O để làm nhiệm vụ truy xuất dữ liệu. Các cổng đó là A, B, C, D, E, F. Để làm việc với các cổng này, việc đầu tiên cần làm là cấu hình hoặc cả PORT I/O hoặc cho từng chân cần dùng của PORT bất kỳ sẽ là ngõ vào hoặc là ngõ ra. Như vậy, 2 thanh ghi TRIS và PORT sẽ là 2 thanh ghi phục vụ cho chức năng xuất/nhập song song của vi xử lý PIC16F877A. PORT A chỉ có 6 chân từ RA0 đến RA5 nên thanh ghi TRISA và PORTA cũng chỉ có 6 bit được định nghĩa để sử dụng, 2 thanh ghi này có thể tác động từng bit. PORT B có đủ 8 chân từ RB0 đến RB7 nên thanh ghi TRISB và PORTB tương ứng cũng có đủ 8 bit để sử dụng, 2 thanh ghi này có thể tác động từng bit. PORT C có đủ 8 chân từ RC0 đến RC7 nên thanh ghi TRISC và PORTC tương ứng cũng có đủ 8 bit để sử dụng, 2 thanh ghi này có thể tác động từng bit. PORT D có đủ 8 chân từ RD0 đến RD7 nên thanh ghi TRISD và PORTD tương ứng cũng có đủ 8 bit để sử dụng, 2 thanh ghi này có thể tác động từng bit. PORT E chỉ có 3 chân từ RE0 đến RE2 nên thanh ghi TRISE và PORTE cũng chỉ có 3 bit được định nghĩa để sử dụng đúng với chức năng là PORT I/O , ngoài ra thanh ghi TRISE còn có 4 bit khác cũng được định nghĩa cho một vài chức năng khác, 2 thanh ghi này có thể tác động từng bit. 1.1.5. Tập lệnh vi xử lý PIC16F877A 1.1.5.1. Nhóm lệnh dịch chuyển a. Lệnh MOVLW Cú pháp: MOVLW k (0≤ k ≤255) Tác dụng: Nạp giá trị k vào thanh ghi W Ví dụ: Để gán cho thanh ghi W một giá trị cụ thể là 20h ta làm như sau: MOVLW 20h  MOVLW 0010 0000b  MOVLW 32 b. Lệnh MOVWF Cú pháp: MOVWF f (0≤ f ≤255) Tác dụng: dịch chuyển dữ liệu của thanh ghi W vào thanh ghi f Để nạp cho thanh ghi một giá trị cụ thể, đầu tiên lưu trữ giá trị cần nạp cho thanh ghi W, sau đó ta thực hiên lệnh MOVWF để dịch chuyển giá trị trong thanh ghi W sang thanh ghi cần gán. Ví dụ: MOVLW 15; W=15 Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 14  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   MOVWF PORTB; PORTB =15 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 đó được dịch 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. Ví dụ: MOVLW 30h MOVWF FSR MOVLW 20 MOVWF INDF Ở lệnh đầu tiên W=30h, sau đó gán giá trị 30h vào thanh ghi FSR tức là “con trỏ” chỉ đến byte có địa chỉ 30h. Khi đó giá trị của thanh ghi có địa chỉ 30h được chứa trong thanh ghi INDF. Như vậy sau khi gián giá trị 20 vào thanh ghi INDF tức là dán giá trị đó vào thanh ghi có địa chỉ 30h. Vậy sau khi thực hiên đoạn chương trình trên (30h) = 20, tức là byte có địa chỉ 30h có giá trị là 20. Để cụ thể hơn chúng ta xét ví dụ sau: MOVLW 5 MOVWF PORTB Thông qua 2 lệnh trên PORTB = 5, nhưng ta có thể viết lại: MOVLW 06h MOVWF FSR MOVLW 5 MOVWF INDF Vậy sau khi thực hiện đoạn chương trình trên (06h) = 5, tức là byte có địa chỉ 06h (PORTB) có giá trị là 5. c. Lệnh MOVF Cú pháp: MOVF f,W f (0≤ f ≤255) Tác dụng: Dịch chuyển dữ liệu của thanh ghi f vào thanh ghi W Để dịch chuyển giá trị ở thanh ghi COUNT1 sang thanh ghi COUNT2 bắt buộc phải qua thanh ghi “trung gian” W thông qua lệnh MOVF. Vidụ: MOVF COUNT1,W MOVWF COUNT2 Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 15  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   Đầu tiên dịch chuyển giá trị có được ở thanh ghi COUNT1 vào W, sau đó thông qua lệnh MOVWF dịch chuyển giá trị có được ở thanh ghi W vào COUNT2. d. Lệnh CLRW Cú pháp CLRW Tác dụng: Xóa thanh ghi W và bit Z được set ( = 1). Bit trạng thái: Z e. Lệnh CLRF Cú pháp CLRF f Tác dụng: Xóa thanh ghi f và bit Z được set. Bit trạng thái: Z 1.1.5.2. Nhóm lệnh số học a. Lệnh ADDLW Cú pháp: ADDLW k 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 Ví dụ: MOVLW D’200’; W=200 ADDLW D’55’ MOVWF PORTB; PORTB = 255 b. Lệnh ADDWF Cú pháp: ADDWF f,d (d ∈[0,1]). Tác dụng: Cộng dữ liệu được lưu trữ trong 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 c. 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 lưu trữ trong thanh ghi W. Bit trạng thái: C, DC, Z Ví dụ: MOVLW 100; W=100 SUBLW 155 MOVWF PORTB; PORTB =55 d. Lệnh SUBWF Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 16  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   Cú pháp: SUBWF f,d ( 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 e. Lệnh INCF Cú pháp: INCF f,d (d ∈ [0,1]) Tác dụng: Tăng giá trị thanh ghi f lên 1 đơn vị. Kết quả được lưu vào thanh ghi W nếu d = 0 hoặc thanh ghi f nếu d = 1. Bit trạng thái: Z Ví dụ: MOVLW 10 MOVWF COUNT; COUNT =10 INCF COUNT,1; COUNT =11 f. Lệnh DECF Cú pháp: DECF f,d (d ∈[0,1]). Tác dụng: Dữ liệu trong thanh ghi f giảm đi 1 đơn vị. Kết quả được lưu vào thanh ghi W nếu d = 0 hoặc thanh ghi f nếu d = 1. Bit trạng thái: Z Ví dụ: MOVLW 10 MOVWF COUNT; COUNT =10 DECF COUNT,1; COUNT =9 1.1.5.3. Nhóm lệnh logic a. Lệnh ANDLW Cú pháp: ANDLW k Tác dụng: Thực hiện phép toán AND giữa dữ liệu lưu trữ trong thanh ghi W và giá trị k, kết quả được lưu trong thanh ghi W. Bit trạng thái: Z Chú ý: And các bit tương ứng Ví dụ: MOVLW 1111 0000b ANDLW 0011 1111b; W = 0011 0000b Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 17  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   b. Lệnh ANDWF Cú pháp: ANDWF f,d (d ∈[0,1]). Tác dụng: Thực hiện phép toán AND giữa dữ liệu chứa trong hai thanh ghi W và f. Kết quả được lưu vào thanh ghi W nếu d=0 hoặc thanh ghi f nếu d = 1. Bit trạng thái: Z c. Lệnh IORLW Cú pháp: IORLW k Tác dụng: Thực hiện phép toán OR giữa dữ liệu lưu trong thanh ghi W và giá trị k. Kết quả được lưu trong thanh ghi W. Bit trạng thái: Z d. Lệnh IORWF Cú pháp: IORWF f,d (d∈[0,1]) Tác dụng: Thực hiện phép toán OR giữa dữ liệu lưu trữ trong hai thanh ghi W và f. Kết quả được lưu vào thanh ghi W nếu d = 0 hoặc thanh ghi f nếu d=1. Bit trạng thái: Z e. Lệnh XORLW Cú pháp: XORLW k Tác dụng: Thực hiện phép toán XOR giữa giá trị k và dữ liệu trong thanh ghi W. Kết quả được lưu trong thanh ghi W. Bit trạng thái: Z f. Lệnh XORWF Cú pháp: XORWF f,d Tác dụng: Thực hiện phép toán XOR giữa dữ liệu lưu trữ trong thanh ghi W và thanh ghi f. Kết quả được lưu vào trong thanh ghi W nếu d=0 hoặc thanh ghi f nếu d=1. Bit trạng thái: Z g. Lệnh SWAPF Cú pháp: SWAPF f,d (d∈[0,1]) Tác dụng: Đảo 4 bit thấp với 4 bit cao trong thanh ghi f. 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: không có h. Lệnh RLF Cú pháp: RLF f,d Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 18  TAI LIẸ U THỰC TẠ P CHUYEN ĐE 1 2012 (DUNG CHO SINH VIEN CƯ NHAN VẠ T LY)   (d∈[0,1]) Tác dụng: Dịch trái các bit dữ liệu trong thanh ghi f qua cờ carry. 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 i. Lệnh RRF Cú pháp: RRF f,d (d∈[0,1]) Tác dụng: Dịch phải các bit dữ liệu trong thanh ghi f qua cờ carry. 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 j. Lệnh COMF Cú pháp: COMF f,d (d∈[0,1]). Tác dụng: Đảo các bit dữ liệu trong thanh ghi f. Kết quả được lưu vào thanh ghi W nếu d =0 hoặc thanh ghi f nếu d=1. Bit trạng thái: Z 1.1.5.4. Nhóm lệnh rẽ nhánh a. Lệnh BTFSS Cú pháp: BTFSS f,b (0≤b≤7) Tác dụng: Kiểm tra bit b trong thanh ghi f. Nếu bit b bằng 0, lệnh tiếp theo được thực thi. Nếu bit b bằng 1, lệnh tiếp theo được bỏ qua và thay vào đó là lệnh NOP. Bit trạng thái: không có Ví dụ: BTFSS PORTB,1 LỆNH 1 LỆNH 2 “1” ở đây là vị trí bit được kiểm tra của portB. Nếu bít này ở mức cao thì sẽ bỏ qua lệnh 1 để thực thi lệnh 2. Ngược lại, mức thấp sẽ thực thi lệnh 1. b. Lệnh BTFSC Cú pháp: BTFSC f,b (0≤b≤7) Tác dụng: kiểm tra bit b trong thanh ghi f. Nếu bit b bằng 1, lệnh tiếp theo được thực thi. Nếu bit b bằng 0, lệnh tiếp theo được bỏ qua và thay vào đó là lệnh NOP. Bit trạng thái: không có Biê n soạ n: Phạ m Xuâ n Trung, Trường Đạ i họ c Bá ch khoa Đà Nang     Page 19 
- Xem thêm -

Tài liệu liên quan