Tải bản đầy đủ (.pdf) (20 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.24 MB, 20 trang )


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



Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
28 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
I. GIỚI THIỆU
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
ln 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:
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 29
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.
TÊN
BIT#
KIỂU ĐỆM
CHỨC NĂNG
RA0/AN0
Bit 0
TTL
I/O
RA1/AN1
Bit 1
TTL
I/O
RA2/AN2/V
REF-
/CV
REF
Bit 2
TTL
I/O hoặc V
REF-
hoặc VC

REF
RA3/AN3/V
REF+
Bit 3
TTL
I/O hoặc V
REF+
RA4/T0CKI/C1OUT
Bit 4
TTL
I/O hoặc ngõ vào xung clock cho
Timer0 hoặc ngõ ra bộ so sánh 1
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
30 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
RA5/AN4/ /C2OUT
Bit 5
TTL
I/O hoặc ngõ vào tƣơng tự



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:
SS

Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 31

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 (OPTION_REG<7>) 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<0>).
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:
o 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.
Đ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 PortB 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.
RBPU
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
32 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC

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.

Tên
Bit#
Kiểu đệm
Chức năng
RB0/INT
Bit 0
TTL/ST
I/O hoặc ngõ vào ngắt. 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 Có lập trình điện trở kéo lên.
RB3/PGM
Bit 3
TTL
I/O hoặc lập trình ở chế độ LVP.
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). Có lập trình điện trở kéo lên.
RB6/PGC
Bit 5
TTL/ST
I/O (ngắt khi có thay đổi) hoặc chân mạch gỡ rối.
Có lập trình điện trở kéo lên. Xung lập trình nối tiếp.
RB7/PGD
Bit 5
TTL/ST
I/O (ngắt khi có thay đổi) hoặc chân mạch gỡ rối.
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 33
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 I
2
C đƣợc cho phép thì các chân PORTC<4:3> có thể đƣợc định cấu hình ở các mức I
2
C hoặc
mức SMBUS bằng cách sử dụng bit CKE (SSPSTAT<6>).
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.




TÊN
BIT#
KIỂU
ĐỆM
CHỨC NĂNG
RC0/T1OSO/T1CKI
Bit 0
ST
I/O hoặc ngõ ra bộ dao động
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
34 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
Timer1/ngõ vào xung của Timer1.
RC1/T1OSI/CCP2
Bit 1
ST
I/O hoặc ngõ vào bộ dao động
Timer1/ngõ vào Capture, ngõ ra
compare2/ngõ ra PWM.
RC2/CCP1
Bit 2
ST
I/O hoặc ngõ vào Capture1/ngõ ra
Compare1/ngõ ra PWM.
RC3/SCK/SCL
Bit 3
ST
RC3 cũng có thể là xung clock nối tiếp

đồng bộ cho chế độ SPI và I
2
C.
RC4/SDI/SDA
Bit 4
ST
RC4 cũng có thể là dữ liệu SPI hoặc dữ
liệu xuất/nhập (chế độ I
2
C).
RC5/SDO
Bit 5
ST
I/O hoặc ngõ ra dữ liệu port nối tiếp
đồng bộ.
RC6/TX/CK
Bit 6
ST
I/O hoặc truyền bất đồng bộ USART
hoặc xung đồng bộ.
RC7/RX/DT
Bit 7
ST
I/O hoặc nhận bất đồng bộ USART
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<4>). 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.

Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 35
Các chức năng của PortD.

TÊN
BIT#
KIỂU ĐỆM
CHỨC NĂNG
RD0/PSP0
Bit 0
ST/TTL
Port I/O hoặc bit 0 của port song song
RD1/PSP1
Bit 1
ST/TTL
Port I/O hoặc bit 1 của port song song
RD2/PSP2
Bit 2
ST/TTL
Port I/O hoặc bit 2 của port song song
RD3/PSP3
Bit 3
ST/TTL

Port I/O hoặc bit 3 của port song song
RD4/PSP4
Bit 4
ST/TTL
Port I/O hoặc bit 4 của port song song
RD5/PSP5
Bit 5
ST/TTL
Port I/O hoặc bit 5 của port song song
RD6/PSP6
Bit 6
ST/TTL
Port I/O hoặc bit 6 của port song song
RD7/PSP7
Bit 7
ST/TTL
Port I/O hoặc bit 7 của port song song

5. PORTE và thanh ghi TRISE:
PORTE có 3 chân: RE0/ /AN5, RE1/ /AN6 và RE2/ /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<4>) bằng 1, các bit TRISE<0:2> 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.
RD
WR
CS
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
36 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
TÊN
BIT#
KIỂU ĐỆM
CHỨC NĂNG
RE0/ /AN5
Bit 0
ST/TTL
I/O hoặc ngõ ra điều khiển đọc port song
song hoặc ngõ vào tƣơng tự.
RE1/ /AN6
Bit 1
ST/TTL
I/O hoặc ngõ ra điều khiển ghi port song
song hoặc ngõ vào tƣơng tự.
RE2/ /AN7
Bit 2
ST/TTL
I/O hoặc ngõ ra chọn lựa port song song
hoặc ngõ tƣơng tự.
1CS
: VĐK tớ khơng đƣợc chọn.
0CS
: VĐK tớ đƣợc chọn.


Trạng thái port song song/các bit điều khiển:
Bit 7 IBF: bit báo trạng thái bộ đệm ngõ vào đầy (Input Buffer Full Status bit):
1= một word đã nhận và đang chờ CPU đọc.
0= khơng có word nào đƣợc nhận.
Bit 6 OBF: bit báo trạng thái bộ đệm ngõ ra đầy (Output Buffer Full Status bit):
1= bộ đệm ngõ ra vẫn còn giữ word đã ghi trƣớc đó.
0= bộ đệm ngõ ra đã đƣợc đọc.
Bit 5 IBOV: bit phát hiện tràn bộ đệm ngõ vào (Input Buffer Overflow Detect bit):
1= q trình ghi xảy khi word ngõ vào trƣớc đó chƣa đƣợc đọc.
0= khơng xảy ra tràn.
Bit 4 PSPMODE: Bit chọn lựa chế độ port song song
1= PORTD đƣợc định ở chế độ là port song song.
0= PORTD đƣợc định ở chế độ là port xuất nhập.
Bit 3 Chƣa dùng: đọc là „0‟
Các bit ở PORTE là các bit dữ liệu trực tiếp:
Bit 2 Bit 2: bit điều khiển hƣớng cho chân RE2/ /AN7
1= ngõ vào.
0= ngõ ra.
Bit 1 Bit 1: bit điều khiển hƣớng cho chân RE1/ /AN6
1= ngõ vào.
0= ngõ ra.
Bit 0 Bit 0: bit điều khiển hƣớng cho chân RE0/ /AN5
1= ngõ vào.
0= ngõ ra.
III. TẬP LỆNH C CHO CÁC PORT
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()
RD
WR
CS
CS
WR
RD
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 37

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()
1. LỆNH SET_TRIS_X() - LỆNH ĐỊNH CẤU HÌNH VÀO/RA CHO PORT
Cú pháp: set_tris_x(value); thiết lập cấu hình INPUT/OUTPUT cho portx
Thơng số: value là 1 số ngun 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.

2. LỆNH OUTPUT_X(VALUE) - XUẤT DỮ LIIỆU 8 BIT RA PORTX
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

3. LỆNH OUTPUT_HIGH(PIN) - LỆNH LÀM 1 CHÂN CỦA PORT LÊN MỨC CAO
Cú pháp: output_high(pin); tƣơng đƣơng lệnh 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

4. LỆNH OUTPUT_LOW(PIN) - LỆNH LÀM 1 CHÂN CỦA PORT XUỐNG MỨC 0
Cú pháp: output_low(pin); tƣơng đƣơng lệnh 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

5. LỆNH OUTPUT_TOGGLE(PIN) - LỆNH ĐẢO TRẠNG THÁI CỦA 1 CHÂN
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.
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
38 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
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

6. LỆNH OUTPUT_BIT(PIN,VALUE) - LỆNH XUẤT DỮ LIỆU RA 1 CHÂN
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

7. LỆNH value = GET_TRIS_X() - LỆNH ĐỌC THANH GHI ĐỊNH CẤU HÌNH
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ị.

8. LỆNH value = INPUT(pin) - LỆNH ĐỌC DỮ LIỆU TỪ 1 CHÂN CỦA PORT
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ụ while (! Input (PIN_B1)); //đợi cho đến khi chân Rb1 lên mức cao
If (input(PIN_A0))
Printf(“A0 is now high \r\n”);
Int16 i = PIN_B1
Whiel (!i); //đợi chân RB1 lên mức cao

9. LỆNH INPUT_STATE() - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO

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);

10. Value = INPUT_X() - LỆNH ĐỌC DỮ LIỆU TỪ PORTX
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 39
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ị.

11. LỆNH INPUT_STATE() - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO
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);
12. LỆNH OUTPUT_DRIVE(PIN) - LỆNH ĐỌC TRẠNG THÁI NGÕ VÀO
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);


13. LỆNH OUTPUT_FLOAT(PIN) - LỆNH THÃ NỖI CHÂN TÍN HIỆU
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 ngồi
tồ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);

14. LỆNH PORT_B_PULLUP( ) - LỆNH TREO PORT B QUA ĐIỆN TRỞ LÊN NGUỒN
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ị.
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
40 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
Ví dụ port_b_pullup(false);


IV. CÁC CHƯƠNG TRÌNH VÍ DỤ CHO CÁC PORT

BÀI 4-1 –ĐIỀU KHIỂN: 4 LED SÁNG VÀ 4 LED TẮT SỬ DỤNG PORTB
#INCLUDE <16F877A.H>
#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 <16F877A.H>
#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 <16F877A.H>

#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<5)
{ OUTPUT_B(0xFF); //8 LED SANG
DELAY_MS(500); // GOI HAM DELAY

OUTPUT_B(0x00); // 8 LED TAT
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 41
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 <16F877A.H>
#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 <16F877A.H>
#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 <16F877A.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20000000)
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
42 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC

VOID MAIN()
{ SET_TRIS_B(0x00);
WHILE(1)
{ OUTPUT_TOGGLE(PIN_B0); // ĐẢO TT CỦ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 <16F877A.H>
#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);

}


V. CÁC CHƯƠNG TRÌNH VÍ DỤ ĐIỀU KHIỂN LED 7 ĐOẠN

CÁCH KHAI BÁO KIỂU HẰNG SỐ MẢNG KÍ TỰ
CONST UNSIGNED CHAR
MA7DOAN[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90};

CÁCH KHAI BÁO BIẾN KIỂU SỐ NGUYÊN – KIỂU INTEGER:
INT DONVI; - KHAI BÁO BIẾN DONVI 8 BIT;
INT16 DONVI; - KHAI BÁO BIẾN DONVI 16 BIT;
XEM TRONG PHẦN TR GIÚP CỦA CHƯƠNG TRÌNH
Type-Specifier
int1
Defines a 1 bit number
int8
Defines an 8 bit number
int16
Defines a 16 bit number
int32
Defines a 32 bit number
char
Defines a 8 bit character
float
Defines a 32 bit floating point number
short
By default the same as int1
Int
By default the same as int8

long
By default the same as int16
void
Indicates no specific type

BÀI 4-8 : ĐIỂU KHIỂN LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 0 ĐẾN 9 DÙNG PORTB

Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 43
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 <16F877A.H>
#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<10; I++)
{ MI= MA7DOAN [I]; //LAY MA 7 D
OUTPUT_B(MI);

DELAY_MS(500);
}
}
}

BÀI 4-10 : ĐIỂU KHIỂN LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 9 XUỐNG 0 DÙNG PORTB

#INCLUDE <16F877A.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20000000)
CONST UNSIGNED CHAR
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
44 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC
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);
}
}
}

LỆNH WHILE(CONDITION)
{

STATEMENTS;

}
LỆNH FOR(I=MIN-VALUE;I<MAX-VALUE;I++)
{
STATEMENTS;

}

BÀI 4-11 : ĐIỂU KHIỂN LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 00 ĐẾN 99 HIỂN THỊ TRÊN 2 LED
DÙNG PORTB VÀ PORTD.

LỆNH CHIA NGUN LẤY KẾT QUẢ “/”
X = Y /10; (VÍ DỤ Y = 95 THÌ KẾT QUẢ X = 9)
LỆNH CHIA NGUN LẤY SỐ DƢ “%”
Z = Y % 10; (VÍ DỤ Y = 95 THÌ KẾT QUẢ Z = 5)
SƠ ĐỒ MẠCH ĐIỆN GIAO TIẾP PIC VỚI 2 LED 7 ĐOẠN
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC 45

Hình 4-20: Sơ đồ mạch điều khiển led 7 đoạn.
CHƢƠNG TRÌNH
#INCLUDE <16F877A.H>
#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<100;DEM++)
{ CHUC =DEM /10; //LAY HANG CHUC
DONVI= DEM %10; //LAY DONVI

MDONVI= MA7DOAN[DONVI]; //LAY MA 7 D
MCHUC = MA7DOAN[CHUC]; //LAY MA 7 D

OUTPUT_B(MDONVI);
OUTPUT_C(MCHUC);
DELAY_MS(300);
}
}
}

BÀI 4-12 : ĐIỂU KHIỂN LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 00 ĐẾN 99 HIỂN THỊ TRÊN 2 LED
DÙNG PORTB VÀ PORTD - DÙNG 2 VÕNG LẶP FOR.
Đại học sư phạm kỹ thuật tp HCM Khoa điện – điện tử Nguyễn Đình Phú
46 Bài 4: Cấu hình port và lệnh C dùng cho các port của PIC

#INCLUDE <16F877A.H>
#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<10; CHUC++)
{
FOR (DONVI=0; DONVI<10; ++DONVI)
{
OUTPUT_B(MA7DOAN[DONVI]);
OUTPUT_C(MA7DOAN[CHUC]);
DELAY_MS(300);
}
}
}
}
CÁCH NÀY CĨ HẠN CHẾ LÀ KHƠNG THỂ ĐẾM SỐ BẤT KỲ VÍ DỤ ĐẾM TỪ 00 ĐẾN 15.


×