You are on page 1of 4

BÀI TẬP VI XỬ LÝ

Viết chương trình cho PIC16F887 dùng ngôn ngữ C, sử dụng fosc = 4MHz
SV làm bài theo các bước sau:
- Vẽ sơ đồ nguyên lý (nếu đề bài không cho trước sơ đồ mạch)
- Tính toán các thông số (nếu có)
- Vẽ lưu đồ giải thuật
- Viết code
Các sơ đồ mẫu:
Mạch 1:

Mạch 2:
Mạch 3:
+5V

R11 +5V +5V


R12
R1 R13
10k R14
U1 R15 LED5 LED4
MCLR 1 15
R16
R2 MCLR
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16 U2 R17 A1 A2
RC1/T1OSI/CCP2
AN0 2 17 RD4 7 13 A1 B1 B2
100 RA0/AN0/ULPWU/C12IN0- RC2/P1A/CCP1 A QA 56
3 18 RD5 1 12 B1 C1 C2
RA1/AN1/C12IN1- RC3/SCK/SCL B QB 56
4 23 RD6 2 11 C1 D1 D2
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA C QC 56
C4 5 24 RD7 6 10 D1 E1 E2
RA3/AN3/VREF+/C1IN+ RC5/SDO D QD 56
6 25 4 9 E1 F1 F2
0.1uF RA4/T0CKI/C1OUT RC6/TX/CK BI/RBO QE 56
7 26 5 15 F1 G1 G2
RA5/AN4/SS/C2OUT RC7/RX/DT RBI QF 56
OSC214 3 14 G1
RA6/OSC2/CLKOUT LT QG 56
OSC113 19 RD0
RA7/OSC1/CLKIN RD0
20 RD1 74LS47
RD1 U3
RB0 33 21 RD2
C2 RB0/AN12/INT RD2
RB1 34 22 RD3 RD0 7 13 A2
OSC2 RB2 35
RB1/AN10/C12IN3- RD3
27 RD4 RD1 1
A QA
12
56
B2
R3
36
RB2/AN8 RD4
28 RD5 RD2 2
B QB
11
56
C2
R4
33p 37
RB3/AN9/PGM/C12IN2- RD5/P1B
29 RD6 RD3 6
C QC
10
56
D2
R5
RB4/AN11 RD6/P1C
RD7
D QD 56
E2
R6
X1 38
RB5/AN13/T1G RD7/P1D
30 4
BI/RBO QE
9 56 R7
39 5 15 F2
C3 CRYSTAL
40
RB6/ICSPCLK
8 3
RBI QF
14
56
G2
R8
OSC1
RB7/ICSPDAT RE0/AN5
9
LT QG 56 R9
RE1/AN6
10 74LS47
RE2/AN7
33p
PIC16F887

RB0

RB1

RB2

Bài 1: điều khiển 8 led sáng dần từ phải qua trái sử dụng sơ đồ mạch 1, thời gian tồn tại một
trạng thái là 500ms
Bài 2: điều khiển 8 led sáng đuổi từ phải qua trái sử dụng sơ đồ mạch 1, thời gian tồn tại một
trạng thái là 500ms
Bài 3: điều khiển 8 led sáng dồn từ phải qua trái sử dụng sơ đồ mạch 1, thời gian tồn tại một
trạng thái là 500ms
Bài 4: điều khiển 2 led bảy đếm lên 00  24 sử dụng sơ đồ mạch 2, thời gian tồn tại một trạng
thái là 500ms
Bài 5: điều khiển 2 led bảy đếm lên 24  00 sử dụng sơ đồ mạch 2, thời gian tồn tại một trạng
thái là 500ms
Bài 6: điều khiển 2 led bảy đếm lên 00  60 sử dụng sơ đồ mạch 3, thời gian tồn tại một trạng
thái là 500ms
Bài 7: điều khiển 2 led bảy đếm lên 60  00 sử dụng sơ đồ mạch 3, thời gian tồn tại một trạng
thái là 500ms
Bài 8: lập trình nút nhấn + led đơn (mạch 1)
Khi nhấn nút 1 (RB0): 8 led chớp tắt 3 lần với f = 1Hz
Khi nhấn nút 2 (RB1): 8 led sáng dần 3 lần, thời gian tồn tại một trạng thái là 500ms
Bài 9: lập trình nút nhấn + led bảy đoạn (mạch 2)
Khi nhấn nút 1 (RB0): led hiển thị chữ “GO” trong 2s
Khi nhấn nút 2 (RB1): led đếm lên 00  12, thời gian tồn tại một trạng thái là 500ms
Bài 10: lập trình ngắt ngoài + led đơn (mạch 1)
Chế độ bình thường: 8 led sáng dần từ trái qua phải, thời gian tồn tại một trạng thái là 500ms
Chế độ ngắt (khi nhấn RB0) : led 1,3,5 sáng trong 3s rồi tắt
Bài 11: lập trình ngắt portB + led bảy đoạn (mạch 2)
Chế độ bình thường: hiển thị số A = 35 chớp tắt với f = 1Hz
Chế độ ngắt PORTB
+ nhấn RB0: hiển thị phần nguyên của A khi chia 3 trong 2s
+ nhấn RB1: hiển thị phần dư của A khi chia 3 trong 2s
Bài 12: Timer0 + led bảy đoạn (mạch 3)
Lập trình điều khiển led bảy đoạn hiển thị các số chẵn từ 00 – 99, thời gian sáng mỗi trạng thái
là 300ms. dùng timer0 để tạo delay.
Bài 13: Timer0 + led bảy đoạn nối với PORTD,C+ nút nhấn nối với chân RA4 (SV tự vẽ sơ đồ
nguyên lý)
Lập trình điều khiển led bảy đoạn hiển thị theo yêu cầu sau:
Nhấn nhả lần 1: led hiển thị chữ “01”
Nhấn nhả lần 2: led hiển thị chữ “02”
Nhấn nhả lần 3: led hiển thị chữ “03”
Nhấn nhả lần 4: led hiển thị chữ “04”
Nhấn nhả lần 5: led hiển thị chữ “05”
Nhấn nhả lần 6: led hiển thị chữ “06”
Nhấn nhả lần 7: led tắt hết
Quá trình lặp lại như nhấn nhả lần 1, sử dụng timer0 ở chế độ đếm xung.
Bài 14: Timer1 + led đơn (mạch 1)
Lập trình điều khiển 8 led đơn sáng dần từ 2 biên vào, thời gian sáng mỗi trạng thái là 500ms.
dùng timer1 để tạo delay.
Bài 15: PWM (SV tự vẽ sơ đồ nguyên lý)
viết chương trình điều khiển tạo xung PWM có fPWM = 7KHz, D = 40% tại chân RC2. Sử dụng
modul CCP ở chế độ PWM, fosc=4MHz. Hiển thị phần trăm D trên 2 led bảy đoạn (nối PORTB,D).
Bài 16: PWM (SV tự vẽ sơ đồ nguyên lý)
viết chương trình điều khiển tạo xung PWM có fPWM = 10KHz, Toff = 3Ton tại chân RC1. Sử dụng
modul CCP ở chế độ PWM, fosc=4MHz. Hiển thị phần trăm D trên 2 led bảy đoạn (nối PORTB,D).
Bài 17: PWM + nút nhấn (SV tự vẽ sơ đồ nguyên lý)
Viết chương trình điều khiển tạo xung PWM tại chân RC1, RC2. Sử dụng modul CCP ở chế độ
PWM, fosc = 4MHz. Xung được tạo ra như sau
Nhấn nhả SW0 (nối với RB0):
tạo xung chân RC2 có f = 8Khz, D1=40% ; RC1 = 0
Nhấn nhả SW1 (nối với RB1):
tạo xung chân RC1 có f = 8Khz, D2=90% ; RC2 = 0
Bài 18: Timer1 + led đơn (mạch 1)
Lập trình điều khiển led 0 (nối với RD0) chớp tắt với f = 2Hz
Lập trình điều khiển led 1 (nối với RD1) chớp tắt với f = 1Hz
Lập trình điều khiển led 2 (nối với RD2) chớp tắt với f = 0.5Hz
Lập trình điều khiển led 3 (nối với RD3) chớp tắt với f = 0.25Hz
Sử dụng timer1 để tạo delay, các led có thời điểm bắt đầu như nhau.
Bài 19: ADC (SV tự vẽ sơ đồ nguyên lý)
viết chương trình điều khiển đọc giá trị điện áp (05V) từ biến trở nối với chân RB1, chuyển đổi
ADC và hiển thị giá trị của 8 bit cao của giá trị số sau khi chuyển đổi ADC lên 8 LED đơn (nối với
PORTD). Tìm giá trị số (10 bit) tương với điện áp vào là 3.5V
Bài 20: ADC (SV tự vẽ sơ đồ nguyên lý)
viết chương trình điều khiển đọc giá trị điện áp (05V) từ biến trở nối với chân RE1, chuyển đổi
ADC và hiển thị giá trị số sau khi chuyển đổi ADC lên LED đơn (nối với PORTD,C). Tìm giá trị số
(10 bit) tương với điện áp vào là 2.5V
yêu cầu:
sử dụng điện áp tham chiếu ngoài: Vref+ = 4V; Vref- = 0V
chon tần số chuyển đổi ADC: fadc = fosc/2

You might also like