intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

BÀI 4: CẤU HÌNH CÁC PORT VÀ LỆNH C DÙNG CHO PORT CỦA PIC

Chia sẻ: Tran Anh Duc | Ngày: | Loại File: PDF | Số trang:20

949
lượt xem
123
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Vi điều khiển có các port để xuất nhập dữ liệu giao tiếp với các đối tƣợng điều khiển. Tín hiệu điều khiển từ CPU gởi ra port để điều khiển, đồng thời có các port nhận dữ liệu về để xử lý. Trong một hệ thống luôn có các tín hiệu vào ra ví nhƣ hệ thống điều khiển robo nhƣ hình sau: Mỗi vi điều khiển khác nhau có cấu hình các port cũng khác nhau, phần này sẽ khảo sát các port của vi điều khiển PIC bao gồm port A, B, C, D , E và...

Chủ đề:
Lưu

Nội dung Text: BÀI 4: CẤU HÌNH CÁC PORT VÀ LỆNH C DÙNG CHO PORT CỦA PIC

  1. BÀI 4 GIỚI THIỆU  CÁC PORT XUẤT NHẬP IO   PORTA và thanh ghi TRISA  PORTB và thanh ghi TRISB  PORTC và thanh ghi TRISC  PORTD và thanh ghi TRISD  PORTE và thanh ghi TRISE TẬP LỆNH C CHO CÁC PORT   LỆNH SET_TRIS_X() - LỆNH ĐỊNH CẤU HÌNH VÀO/RA CHO PORT  LỆNH OUTPUT_X(VALUE) - XUẤT DỮ LIIỆU 8 BIT RA PORT  LỆNH OUTPUT_HIGH(PIN) - LỆNH LÀM 1 CHÂN CỦA PORT LÊN MỨC CAO  LỆNH OUTPUT_LOW(PIN) - LỆNH LÀM 1 CHÂN CỦA PORT XUỐNG MỨC 0  LỆNH OUTPUT_TOGGLE(PIN) - LỆNH ĐẢO TRẠNG THÁI CỦA 1 CHÂN  LỆNH OUTPUT_BIT(PIN,VALUE) - LỆNH XUẤT DỮ LIỆU RA 1 CHÂN  LỆNH value = GET_TRIS_x() - LỆNH ĐỌC THANH GHI ĐỊNH CẤU HÌNH  LỆNH value = INPUT(pin) - LỆNH ĐỌC DỮ LIỆU TỪ 1 CHÂN CỦA PORT  LỆNH INPUT_STATE() - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO  Value = INPUT_x()  LỆNH INPUT_STATE() - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO  LỆNH OUTPUT_DRIVE(PIN) - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO  LỆNH OUTPUT_FLOAT(PIN) - LỆNH THÃ NỖI CHÂN TÍN HIỆU  LỆNH PORT_B_PULLUP( ) - LỆNH TREO PORT B QUA ĐIỆN TRỞ LÊN NGUỒN CÁC CHƯƠNG TRÌNH VÍ DỤ CHO CÁC PORT 
  2. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù GIỚI THIỆU I. Vi điều khiển có các port để xuất nhập dữ liệu giao tiếp với các đối tƣợng điều khiển. Tín hiệu điều khiển từ CPU gởi ra port để điều khiển, đồng thời có các port nhận dữ liệu về để xử lý. Trong một hệ thống luôn có các tín hiệu vào ra ví nhƣ hệ thống điều khiển robo nhƣ hình sau: Hình 4-1: Sơ đồ kết nối port với đối tượng điều khiển. Mỗi vi điều khiển khác nhau có cấu hình các port cũng khác nhau, phần này sẽ khảo sát các port của vi điều khiển PIC bao gồm port A, B, C, D , E và các lệnh ngôn ngữ C liên quan đến các port. Mỗi port của vi điều khiển PIC gồm có thanh ghi port và thanh ghi định hƣớng cho Port ví dụ nhƣ hình 4-2 là PORTA và TRISA. Bit của thanh ghi định hƣớng TRIS bằng 0 thì port có chức năng xuất dữ liệu, nếu bằng 1 thì có chức năng nhập dữ liệu. Chú ý: '0' tƣơng ứng với 'OUT', '1' tƣơng ứng với 'IN'. Hình 4-2: Sơ đồ kết nối port: xuất nhập tín hiệu điều khiển. Phần tiếp sẽ khảo sát chi tiết từng port. II. CÁC PORT XUẤT NHẬP (IO) 1. PORTA và thanh ghi TRISA: 28 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  3. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù PORTA là port hai chiều 6 bit, thanh ghi định hƣớng là TRISA. Chân RA4 đƣợc đa hợp với ngõ vào xung clock của module Timer0 có tên là RA4/T0CKI – có cấu hình Schmitt trigger và cực máng để hở. Tất cả các chân còn lại của PORTA ở chuẩn TTL khi nó là ngõ vào và khi xuất dữ liệu thì theo chuẩn CMOS. Hình 4-3: Sơ đồ mạch chân RA3:RA0. Hình 4-4: Sơ đồ mạch chân RA4/T0CKI. Những chân khác của PortA đƣợc đa hợp với các ngõ vào tƣơng tự cho các bộ chuyển đổi A/D và các bộ so sánh. Thanh ghi ADCON1 sẽ thiết lập các bit cho portA làm việc tƣơng tự hay số. Thanh ghi TRISA điều khiển hƣớng cho PortA cho dù portA sử dụng cho ngõ vào tƣơng tự. Khi sử dụng portA là ngõ vào tƣơng tự thì bit tƣơng ứng trong thanh ghi TRISA phải bằng 1. Các chức năng của PortA. KIỂU ĐỆM CHỨC NĂNG TÊN BIT# RA0/AN0 Bit 0 TTL I/O RA1/AN1 Bit 1 TTL I/O I/O hoặc VREF- hoặc VCREF RA2/AN2/VREF-/CVREF Bit 2 TTL I/O hoặc VREF+ RA3/AN3/VREF+ Bit 3 TTL I/O hoặc ngõ vào xung clock cho RA4/T0CKI/C1OUT Bit 4 TTL Timer0 hoặc ngõ ra bộ so sánh 1 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 29
  4. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù I/O hoặc ngõ vào tƣơng tự Bit 5 TTL RA5/AN4/ SS /C2OUT Hình 4-5: Sơ đồ mạch chân RA5. Tóm tắt các thanh ghi liên kết với PortA. 2. PORTB và thanh ghi TRISB: PortB là port hai chiều 8 bit. Thanh ghi định hƣớng là TRISB. Ba chân của PortB là RB3/PGM, RB6/PGC và RB7/PGD đƣợc đa hợp với mạch điện gỡ rối bên trong và mạnh lập trình điện áp thấp để nạp chƣơng trình vào bộ nhớ nội. Sơ đồ kết nối mạch nạp và mạch gỡ rối: 30 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  5. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Hình 4-6: Các chân PortB giao tiếp với mạch nạp, gỡ rối. Mỗi chân của PortB đều có điện trở kéo lên. Bit RBPU (OPTION_REG) nếu bằng 0 thì sẽ treo tất cả các port qua điện trở lên nguồn. Khi PortB đƣợc thiết lập là các ngõ ra thì sẽ tự động tắt chức năng điện trở kéo lên, tƣơng tự khi CPU bị reset. Hình 4-6: Sơ đồ kết nối port với đối tượng điều khiển. Khi port dùng để kết nối với nút nhấn thì cần phải dùng điện trở kéo lên nguồn để tạo mức logic 1, khi nhấn nút thì ngắn mạch ngõ vào xuống mức 0, xem hình 4-6. Trong ứng dụng này phải cần điện trở kéo lên. Với ứng dụng port điều khiển đối tƣợng là led thì không cần dùng điện trở kéo lên. Bốn chân từ RB4 đến RB7 phát sinh ngắt khi có sự thay đổi mức logic. Chỉ có những chân đƣợc thiết lập ở cấu hình là ngõ vào thì mới có chức năng ngắt. Các chân ngõ vào (RB7:RB4) đƣợc so sánh với giá trị cũ đã đƣợc chốt trong lần đọc trƣớc của PortB. Các ngõ ra không trùng nhau của các chân RB4:RB7 đƣợc OR lại với nhau để tạo ngắt ở PortB với bit cờ báo ngắt RBIF (INTCON). Ngắt portB có thể kích hoạt vi điều khiển trở lại trạng thái hoạt động nếu đang ở chế độ ngủ (SLEEP). Trong chƣơng trình phục vụ ngắt thì ngắt có thể xóa bằng các cách sau: Bất kỳ lệnh đọc hay ghi PortB. Điều này sẽ kết thúc điều kiện không tƣơng thích. o Xóa bit cờ RBIF. o Điều kiện không tƣơng thích sẽ tiếp tục làm cờ báo ngắt RBIF bằng 1. Khi đọc P ortB sẽ chấm dứt điều kiện không tƣơng thích và cho phép xóa bit cờ báo ngắt RBIF. Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 31
  6. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Hình 4-12: Sơ đồ mạch các chân RB3:RB0. Hình 4-13: Sơ đồ mạch các chân RB7:RB4. Ngắt không tƣơng thích của PortB có điện trở kéo lên dễ dàng cho phép giao tiếp với phím hoặc bàn phím ma trận. Hình 4-14: Sơ đồ kết nối port với đối tượng điều khiển. Kiểu đệm Chức năng Tên Bit# I/O hoặc ngõ vào ngắt. Có lập trình điện trở kéo lên. RB0/INT Bit 0 TTL/ST I/O Có lập trình điện trở kéo lên. RB1 Bit 1 TTL I/O Có lập trình điện trở kéo lên. RB2 Bit 2 TTL I/O hoặc lập trình ở chế độ LVP. RB3/PGM Bit 3 TTL Có lập trình điện trở kéo lên. I/O (ngắt khi có thay đổi). Có lập trình điện trở kéo lên. RB4 Bit 4 TTL I/O (ngắt khi có thay đổi). Có lập trình điện trở kéo lên. RB5 Bit 5 TTL I/O (ngắt khi có thay đổi) hoặc chân mạch gỡ rối. RB6/PGC Bit 5 TTL/ST Có lập trình điện trở kéo lên. Xung lập trình nối tiếp. I/O (ngắt khi có thay đổi) hoặc chân mạch gỡ rối. RB7/PGD Bit 5 TTL/ST 32 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  7. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Có lập trình điện trở kéo lên. Dữ liệu lập trình nối tiếp. Các thanh ghi liên quan đến portB: 3. PORTC và thanh ghi TRISC: PortC là port hai chiều 8 bit. Thanh ghi định hƣớng là TRISC. Khi bit TRISC =1 thì PORTC là port nhập, khi bit TRISC= 0 thì PORTC là port xuất. PortC đa hợp với các chức năng ngoại vi, các chân PortC có mạch đệm Schmitt Trigger ở ngõ vào. Khi khối I2C đƣợc cho phép thì các chân PORTC có thể đƣợc định cấu hình ở các mức I2C hoặc mức SMBUS bằng cách sử dụng bit CKE (SSPSTAT). Khi cho phép các chức năng ngoại vi nên chú ý đến các bit TRISC cho mỗi chân của PORTC. Ngƣời sử dụng tham chiếu tới phần thiết bị ngoại vi tƣơng ứng để thiết lập cho đúng bit TRISC. Hình 4-15: Sơ đồ các chân RC7:RC5 và RC2:RC0. Hình 4-16: Sơ đồ mạch các chân RC4:RC3. KIỂU CHỨC NĂNG TÊN BIT# ĐỆM I/O hoặc ngõ ra bộ dao động RC0/T1OSO/T1CKI Bit 0 ST Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 33
  8. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Timer1/ngõ vào xung của Timer1. I/O hoặc ngõ vào bộ dao động RC1/T1OSI/CCP2 Bit 1 ST Timer1/ngõ vào Capture, ngõ ra compare2/ngõ ra PWM. I/O hoặc ngõ vào Capture1/ngõ ra RC2/CCP1 Bit 2 ST Compare1/ngõ ra PWM. RC3 cũng có thể là xung clock nối tiếp RC3/SCK/SCL Bit 3 ST đồng bộ cho chế độ SPI và I2C. RC4 cũng có thể là dữ liệu SPI hoặc dữ RC4/SDI/SDA Bit 4 ST liệu xuất/nhập (chế độ I2C). I/O hoặc ngõ ra dữ liệu port nối tiếp RC5/SDO Bit 5 ST đồng bộ. I/O hoặc truyền bất đồng bộ USART RC6/TX/CK Bit 6 ST hoặc xung đồng bộ. I/O hoặc nhận bất đồng bộ USART RC7/RX/DT Bit 7 ST hoặc dữ liệu đồng bộ. 4. PORTD và thanh ghi TRISD: PortD là port 8 bit với ngõ vào có mạch Schmitt Trigger. Thanh ghi TRISD sẽ cấu hình là ngõ vào hoặc ngõ ra. PortD có thể định cấu hình nhƣ port của vi xử lý 8 bit bằng cách thiết lập bit điều khiển PSPMODE (TRISE). Trong cấu hình này thì các bộ đệm ngõ vào dạng TTL. Chú ý: PortD và TRISD không đƣợc xây dựng cho chip PIC 28 chân. Hình 4-17: Sơ đồ mạch các chân PORTD. Các thanh ghi kết nối với PortD. 34 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  9. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Các chức năng của PortD. KIỂU ĐỆM CHỨC NĂNG BIT# TÊN Port I/O hoặc bit 0 của port song song RD0/PSP0 Bit 0 ST/TTL Port I/O hoặc bit 1 của port song song RD1/PSP1 Bit 1 ST/TTL Port I/O hoặc bit 2 của port song song RD2/PSP2 Bit 2 ST/TTL Port I/O hoặc bit 3 của port song song RD3/PSP3 Bit 3 ST/TTL Port I/O hoặc bit 4 của port song song RD4/PSP4 Bit 4 ST/TTL Port I/O hoặc bit 5 của port song song RD5/PSP5 Bit 5 ST/TTL Port I/O hoặc bit 6 của port song song RD6/PSP6 Bit 6 ST/TTL Port I/O hoặc bit 7 của port song song RD7/PSP7 Bit 7 ST/TTL 5. PORTE và thanh ghi TRISE: PORTE có 3 chân: RE0/ RD /AN5, RE1/ WR /AN6 và RE2/ CS /AN7 có cấu hình độc lập để thiết lập ngõ vào hoặc ngõ ra. Những chân này có mạch điện Schmitt Trigger ở ngõ vào. PORTE là port nhập khi bit PSPMODE (TRISE) bằng 1, các bit TRISE phải bằng 1 và cấu hình các bit trong thanh ghi ADCON1 để portE là xuất/nhập số. Trong chế độ này, bộ đệm ngõ vào dạng TTL. PORTE cũng đa hợp với các ngõ vào tƣơng tự. Khi định cấu hình là ngõ vào tƣơng tự thì khi đọc các chân này sẽ có giá trị là „0‟. Các thanh ghi kết nối với PORTE. Hình 4-18: Sơ đồ mạch các chân PORTE. Các chức năng của PORTE. Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 35
  10. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù KIỂU ĐỆM CHỨC NĂNG TÊN BIT# I/O hoặc ngõ ra điều khiển đọc port song Bit 0 ST/TTL RE0/ RD /AN5 song hoặc ngõ vào tƣơng tự. I/O hoặc ngõ ra điều khiển ghi port song Bit 1 ST/TTL RE1/ WR /AN6 song hoặc ngõ vào tƣơng tự. I/O hoặc ngõ ra chọn lựa port song song Bit 2 ST/TTL RE2/ CS /AN7 hoặc ngõ tƣơng tự. CS  1 : VĐK tớ không đƣợc chọn. CS  0 : VĐK tớ đƣợc chọn. Trạng thái port song song/các bit điều khiển: IBF: bit báo trạng thái bộ đệm ngõ vào đầy (Input Buffer Full Status bit): Bit 7 1= một word đã nhận và đang chờ CPU đọc. 0= không có word nào đƣợc nhận. OBF: bit báo trạng thái bộ đệm ngõ ra đầy (Output Buffer Full Status bit): Bit 6 1= bộ đệm ngõ ra vẫn còn giữ word đã ghi trƣớc đó. 0= bộ đệm ngõ ra đã đƣợc đọc. IBOV: bit phát hiện tràn bộ đệm ngõ vào (Input Buffer Overflow Detect bit): Bit 5 1= quá trình ghi xảy khi word ngõ vào trƣớc đó chƣa đƣợc đọc. 0= không xảy ra tràn. PSPMODE: Bit chọn lựa chế độ port song song Bit 4 1= PORTD đƣợc định ở chế độ là port song song. 0= PORTD đƣợc định ở chế độ là port xuất nhập. Chƣa dùng: đọc là „0‟ Bit 3 Các bit ở PORTE là các bit dữ liệu trực tiếp: Bit 2: bit điều khiển hƣớng cho chân RE2/ CS /AN7 Bit 2 1= ngõ vào. 0= ngõ ra. Bit 1: bit điều khiển hƣớng cho chân RE1/ WR /AN6 Bit 1 1= ngõ vào. 0= ngõ ra. Bit 0: bit điều khiển hƣớng cho chân RE0/ RD /AN5 Bit 0 1= ngõ vào. 0= ngõ ra. TẬP LỆNH C CHO CÁC PORT III. Các lệnh của ngôn ngữ lập trình C liên quan đến các port bao gồm: Lệnh OUTPUT_FLOAT() Lệnh OUTPUT_LOW() Lệnh OUTPUT_HIGH() Lệnh OUTPUT_TOGGLE() Lệnh OUTPUT_BIT() Lệnh OUTPUT_X() 36 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  11. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Lệnh SET_TRIS_X() Lệnh GET_TRIS_X() Lệnh INPUT_X() Lệnh INPUT() Lệnh PORT_A_PULLUPS() Lệnh PORT_B_PULLUPS() Lệnh INPUT_STATE() Lệnh OUTPUT_DRIVE() LỆNH SET_TRIS_X() - LỆNH ĐỊNH CẤU HÌNH VÀO/RA CHO PORT 1. thiết lập cấu hình INPUT/OUTPUT cho portx Cú pháp: set_tris_x(value); Thông số: value là 1 số nguyên 8 bit tƣơng ứng với các bit của port I/O. Chức năng: các lệnh có chức năng định hƣớng cho các port I/O (TRI-State). Mỗi bit tƣơng ứng 1 chân. Mức 1 thì chân tƣơng ứng là ngõ vào, mức 0 thì chân là ngõ ra Có hiệu lực: cho tất cả các vi điều khiển PIC. Ví dụ: SET_TRIS_B (0x0F); // 0F=00001111: B7- B4 là ngõ ra, B3-B0 là ngõ vào. LỆNH OUTPUT_X(VALUE) - XUẤT DỮ LIIỆU 8 BIT RA PORTX 2. Cú pháp: output_x (value) Thông số: value là hằng số 8 bit kiểu int Chức năng: Xuất dữ liệu 1 byte ra 1 port. Có hiệu lực: Lệnh này áp dụng cho tất cả các port. Ví dụ: OUTPUT_B(0xF0); xuất dữ liệu F0 ra portB LỆNH OUTPUT_HIGH(PIN) - LỆNH LÀM 1 CHÂN CỦA PORT LÊN MỨC CAO 3. tƣơng đƣơng lệnh Cú pháp: output_high(pin); BSF PORTX,B Thông số: pin là chân xuất dữ liệu - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác. Chức năng: làm 1 chân của port lên mức cao. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ OUTPUT_HIGH(PIN_A0); // làm cho chân RA0 của port A lên 1 LỆNH OUTPUT_LOW(PIN) - LỆNH LÀM 1 CHÂN CỦA PORT XUỐNG MỨC 0 4. tƣơng đƣơng lệnh Cú pháp: output_low(pin); BCF PORTX,B Thông số: pin là chân xuất dữ liệu - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác. Chức năng: làm 1 chân của port xuống mức thấp. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ output_low(pin_a0); // làm cho chân RA0 của PortA xuống mức 0 LỆNH OUTPUT_TOGGLE(PIN) - LỆNH ĐẢO TRẠNG THÁI CỦA 1 CHÂN 5. Cú pháp: output_toggle(pin); Thông số: pin là chân xuất dữ liệu - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác. Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 37
  12. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Chức năng: làm đảo trạng thái 1 chân của port. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ OUTPUT_TOGGLE(PIN_B0); // đảo trạng thái chân RB0 của port B LỆNH OUTPUT_BIT(PIN,VALUE) - LỆNH XUẤT DỮ LIỆU RA 1 CHÂN 6. Cú pháp: output_bit(pin,value); Thông số: pin là chân xuất dữ liệu - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác. Chức năng: xuất dữ liệu 0 hoặc 1 ra 1 chân của port. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ: output_bit(pin_b0,0); // xuất dữ liệu 0 ra RB0 LỆNH value = GET_TRIS_X() - LỆNH ĐỌC THANH GHI ĐỊNH CẤU HÌNH 7. Cú pháp: value = get_tris_x(); Thông số: không có thông số Kết quả trả về: là byte dữ liệu đã định cấu hình từ thanh ghi TRIS Chức năng: kết quả trả về là giá trị của thanh ghi TRIS của các port A, B, C or D. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. LỆNH value = INPUT(pin) - LỆNH ĐỌC DỮ LIỆU TỪ 1 CHÂN CỦA PORT 8. Cú pháp: value = input(pin); Thông số: pin là chân để đọc - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác Kết quả trả về: 0 (or FALSE) nếu chân ở mức thấp, 1 (or TRUE) nếu chân ở mức cao. Chức năng: đọc dữ liệu 1 bit từ 1 chân của port, chân này phải ở cấu hình là chân vào. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ //đợi cho đến khi chân Rb1 lên mức cao while (! Input (PIN_B1)); If (input(PIN_A0)) Printf(“A0 is now high \r\n”); Int16 i = PIN_B1 //đợi chân RB1 lên mức cao Whiel (!i); LỆNH INPUT_STATE() - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO 9. Cú pháp: value = input_state(pin); Thông số: pin là chân để đọc - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác Trả về: kết quả đọc bằng 1 nếu chân đọc ở mức cao, kết quả đọc bằng 0 nếu chân đọc ở mức thấp. Chức năng: lệnh đọc mức logic của 1 chân nhƣng không làm thay đổi hƣớng của chân. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ level = input_state(pin_A3); - LỆNH ĐỌC DỮ LIỆU TỪ PORTX 10. Value = INPUT_X() 38 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  13. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Cú pháp: value = input_x(); Thông số: không có. Kết quả trả về: là dữ liệu 8 bit của portx. Chức năng: lệnh đọc mức logic của 1 chân nhƣng không làm thay đổi hƣớng của chân. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. LỆNH INPUT_STATE() - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO 11. Cú pháp: value = input_state(pin); Thông số: pin là chân để đọc - hãy xem file định nghĩa của thiết bị "device.h" để biết tên chính xác Trả về: kết quả đọc bằng 1 nếu chân đọc ở mức cao, kết quả đọc bằng 0 nếu chân đọc ở mức thấp. Chức năng: lệnh đọc mức logic của 1 chân nhƣng không làm thay đổi hƣớng của chân. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ level = input_state(pin_A3); LỆNH OUTPUT_DRIVE(PIN) - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO 12. Cú pháp: output_drive(pin); Thông số: pin là chân đƣợc định nghĩa trong file "device.h". Trả về: không có. Chức năng: thiết lập chân (pin) là chế độ xuất. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ output (pin_A0); LỆNH OUTPUT_FLOAT(PIN) - LỆNH THÃ NỖI CHÂN TÍN HIỆU 13. Cú pháp: output_float(pin); Thông số: pin là chân đƣợc định nghĩa trong file "device.h". Trả về: không có. Chức năng: thiết lập chân (pin) là chế độ nhập và thả nỗi chân tín hiệu này để thiết bị khác ở bên ngoài toàn quyền điều khiển chân này để đƣa dữ liệu vào vi điều khiển. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Ví dụ if ((data & 0x80) == 0) Output_low (pin_A0); else output_float (pin_A0); LỆNH PORT_B_PULLUP( ) - LỆNH TREO PORT B QUA ĐIỆN TRỞ LÊN NGUỒN 14. Cú pháp: port_b_pullup(value); Thông số: value có 2 giá trị là true và false. Trả về: không có. Chức năng: thiết lập port B treo lên nguồn qua điện trở kéo lên bên trong. Nếu value là true thì treo lên nguồn, nếu là false thì không treo. Có hiệu lực: lệnh này áp dụng cho tất cả các thiết bị. Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 39
  14. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Ví dụ port_b_pullup(false); CÁC CHƯƠNG TRÌNH VÍ DỤ CHO CÁC PORT IV. BÀI 4-1 –ĐIỀU KHIỂN: 4 LED SÁNG VÀ 4 LED TẮT SỬ DỤNG PORTB #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP VOID MAIN() { SET_TRIS_B(0x00); //PORTB LA OUTPUT WHILE(1) { OUTPUT_B(0x0F); //4 LED TAT 4 LED SANG } } BÀI 4-2 – ĐIỀU KHIỂN 8 LED CỦA PORTB CHÓP TẮT 8 LED LỆNH: DELAY_MS(VALUE) - DELAY MS LỆNH: DELAY_US(VALUE) - DELAY µS #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) //CRYSTAL = 20MHZ VOID MAIN() { SET_TRIS_B(0x00); //PORTB LA OUTPUT WHILE(1) { OUTPUT_B(0xFF); //8 LED SANG DELAY_MS(1000); // GOI HAM DELAY OUTPUT_B(0x00); // 8 LED TAT DELAY_MS(1000); } } BÀI 4-3 – PORTB CHÓP TẮT 8 LED 5 LẦN #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) INT I; VOID MAIN() { SET_TRIS_B(0x00); //PORTB LA OUTPUT I=0; WHILE(I
  15. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù DELAY_MS(500); I++; //TANG I LEN 1 } } BÀI 4-4 – PORTB CÓ 1 LED CHÓP TẮT NỐI VỚI RB0 – CÁC BIT CÕN LẠI KHÔNG ẢNH HƯỞNG #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) VOID MAIN() { SET_TRIS_B(0x00); //PORTB LA OUTPUT WHILE(1) { OUTPUT_HIGH(PIN_B0); // LED SANG DELAY_MS(100); // GOI HAM DELAY OUTPUT_LOW(PIN_B0); // LED TAT DELAY_MS(100); } } BÀI 4-5 – ĐÈN GIAO THÔNG XANH SÁNG 15S, VÀNG 5 GIÂY, ĐỎ 21GIÂY, CHƯA HIỂN THỊ THỜI GIAN #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) #DIFINE X1D2 0X84 ; //1000 0100 #DIFINE V1D2 0X44 ; //0100 0100 #DIFINE D1X2 0X21 ; //0010 0001 #DIFINE D1V2 0X22 ; //0010 0010 VOID MAIN() { SET_TRIS_B(0x00); //PORTB LA OUTPUT WHILE(1) { OUTPUT_B(X1D2); //10000100 DELAY_MS(15000); // GOI HAM DELAY OUTPUT_B(V1D2); DELAY_MS(5000); OUTPUT_B(D1X2); DELAY_MS(15000); OUTPUT_B(D1V2); DELAY_MS(5000); } } BÀI 4-6 – PORTB 1 LED CHÓP TẮT NỐI VỚI RB0 DÙNG LỆNH OUTPUT_TOGGLE() #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC 41
  16. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù VOID MAIN() { SET_TRIS_B(0x00); WHILE(1) { OUTPUT_TOGGLE(PIN_B0); // ÑAÛO TT CUÛA LED DELAY_MS(100); // GOI HAM DELAY } } BÀI 4-7 – PORTB 1 LED CHÓP TẮT NỐI VỚI RB0 DÙNG LỆNH OUTPUT_BIT(PIN,VALUE) #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) VOID MAIN() { SET_TRIS_B(0x00); //PORTB LA OUTPUT WHILE(1) { OUTPUT_BIT(PIN_B4,0); // LED TAT DELAY_MS(100); // GOI HAM DELAY OUTPUT_BIT(PIN_B4,1); // LED SANG DELAY_MS(100); } CÁC CHƯƠNG TRÌNH VÍ DỤ ĐIỀU KHIỂN LED 7 ĐOẠN V. CAÙCH KHAI BAÙO KIEÅU HAÈNG SOÁ MAÛNG KÍ TÖÏ CONST UNSIGNED CHAR MA7DOAN[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90}; CAÙCH KHAI BAÙO BIEÁN KIEÅU SOÁ NGUYEÂN – KIEÅU INTEGER: INT DONVI; - KHAI BAÙO BIEÁN DONVI 8 BIT; INT16 DONVI; - KHAI BAÙO BIEÁN DONVI 16 BIT; XEM TRONG PHAÀN TRÔÏ GIUÙP CUÛA CHÖÔNG TRÌNH Type-Specifier Defines a 1 bit number int1 Defines an 8 bit number int8 Defines a 16 bit number int16 Defines a 32 bit number int32 Defines a 8 bit character char Defines a 32 bit floating point number float By default the same as int1 short By default the same as int8 Int By default the same as int16 long Indicates no specific type void BÀI 4-8 : ĐIỂU KHIỂN LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 0 ĐẾN 9 DÙNG PORTB 42 Baøi 4: Caáu hình port vaø leänh C duøng cho caùc port cuûa PIC
  17. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù SƠ ĐỒ MẠCH ĐIỆN GIAO TIẾP PIC VỚI 1 LED 7 ĐOẠN Hình 4-19: Sơ đồ mạch điều khiển led 7 đoạn. #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) CONST UNSIGNED CHAR MA7DOAN[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; INT I; // BIEN DEM UNSIGNED CHAR MI; // BIEN CHUA MA 7 DOAN VOID MAIN() { SET_TRIS_B(0x00); //PORTB OUT WHILE(1) { FOR (I=0; I
  18. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù MA7DOAN[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90}; SIGNED INT I; // BIEN DEM KIEU CO DAU UNSIGNED CHAR MI; // BIEN CHUA MA 7 DOAN VOID MAIN() { SET_TRIS_B(0x00); //PORTC OUT WHILE(1) { FOR (I=9; I>-1; I--) { MI= MA7DOAN [I]; //LAY MA 7 D OUTPUT_B(MI); DELAY_MS(500); } } } LEÄNH WHILE(CONDITION) { STATEMENTS; … } LEÄNH FOR(I=MIN-VALUE;I
  19. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù Hình 4-20: Sơ đồ mạch điều khiển led 7 đoạn. CHƢƠNG TRÌNH #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) CONST UNSIGNED CHAR MA7DOAN[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90}; INT DEM, DONVI, CHUC; // BIEN DEM UNSIGNED CHAR MDONVI, MCHUC; // BIEN CHUA MA 7 DOAN VOID MAIN() { SET_TRIS_B(0x00); //PORTB OUT SET_TRIS_C(0x00); // PORTC OUT WHILE(1) { FOR (DEM=0;DEM
  20. Ñaïi hoïc sö phaïm kyõ thuaät tp HCM Khoa ñieän – ñieän töû Nguyeãn Ñình Phuù #INCLUDE #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) CONST UNSIGNED CHAR MA7DOAN[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90}; INT DONVI, CHUC; VOID MAIN() { SET_TRIS_B(0x00); //PORTB OUT SET_TRIS_C(0x00); // PORTC OUT WHILE(1) { FOR (CHUC=0; CHUC
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2