/4
Ngắt INT0?
Đ
Xóa INT2IF;
x=0
Hiển thị x trên LED1-LED4
dưới dạng số nhị phân
x>=15
Đ
Dừng đếm bằng cách cấm
ngắt INT0
Xóa INT0IF;
x=x+1
Ngắt ngoài
Lưu ý: Các chân nối với các linh kiện được thay đổi theo từng đề thi/kiểm tra
Câu 1.
a.
Thiết kế mạch điện như sau:
-
Các linh kiện được sử dụng: Các điện trở, 05 LED; 02 nút nhấn thường mở (PB1,2).
-
LED1 ÷ LED5 được nối với các chân RB3 ÷ RB7; Nút nhấn PB1, PB2 được nối với
lần lượt với các chân RB0/INT0, RB0/INT2.
b.
Vẽ lưu đồ thuật toán viết chương trình theo yêu cầu như sau:
-
LED5 sáng/tắt liên tục; trong khi LED1 ÷ LED4 hiển thị slần nhấn PB1 dưới dạng
số nhị phân (LED sáng tương ứng với bit “1”; LED tắt tương ứng với bit “0”). Số lần
nhấn PB1 không lớn hơn 15 lần.
-
Khi nhấn PB2 số lần nhấn PB1 được reset về 0.
CTC
CTCPVN
Từ CTC
về CTC
Khởi tạo: RB3-RB7: ra số
RB0, RB2: vào số
Cho phép ngắt INT0,2;
Ngắt bằng sườn âm
unsigned int x=0
LED5 sáng ~ 1s
LED5 tắt ~ 1s
Ngắt INT0?
(INT0IF=1)
S
Đ
Xóa cờ INT0IF
LED5 sáng
Xóa cờ INT2IF
LED5 tắt
Câu 2.
a.
Thiết kế mạch điện như sau:
-
Các linh kiện được sử dụng: Các điện trở, 05 LED; 02 nút nhấn thường mở (PB).
-
LED1 ÷ LED5 được nối với các chân RB3 ÷ RB7; Nút nhấn PB1, PB2 được nối với
lần lượt với các chân RB0/INT0, RB2/INT2.
b.
Vẽ lưu đồ thuật toán viết chương trình theo yêu cầu như sau:
-
LED1 ÷ LED4 sáng/tắt liên tục theo chu trình: (1) LED1 sáng, các LED khác tắt trong
~1 giây => (2) LED2 sáng, các LED khác tắt trong ~1 giây => (3) LED3 sáng, các LED
khác tắt trong ~1 giây => (4) LED4 ng, các LED khác tắt trong ~1 giây => (1) =>
-
LED 5 sáng khi nhấn PB1, tắt khi nhấn PB2. Ban đầu (khi chưa nhấn PB1 hoặc
PB2), LED 5 tắt.
Từ CTC
Về CTC
Begin
Khởi tạo: RB3-RB7: ra số
RB0, RB2: vào số
Cho phép ngắt INT0,2;
Ngắt bằng sườn âm
LED5 tắt
LED1 sáng; các LED
khác tắt trong ~ 1s
LED2 sáng; các LED
khác tắt trong ~ 1s
LED4 sáng; các LED
khác tắt trong ~ 1s
LED3 sáng; các LED
khác tắt trong ~ 1s
Timer
Lưu ý: Các chân nối với các linh kiện, các bộ timer và các tham số (tần số/chu kỳ,
Fosc) được thay đổi theo từng đề thi/kiểm tra
PIC18F4520 04 bộ timer:
Timer0
Timer1
Timer3
Timer2
Chế độ
8/16 bit
16bit
16bit
8bit
Nguồn xung
Fosc/4 (trong);
T0CKI (ngoài)
Fosc/4 (trong);
T13CKI
(ngoài)
Fosc/4 (trong);
T13CKI
(ngoài)
Fosc/4 (trong)
Khởi tạo
T0CON
OpenTimer0()
T1CON
OpenTimer1()
T3CON
T2CON
OpenTimer2()
Hệ số chia tần
1,2,4,…,256
1,2,4,8
1,2,4,8
Prescaler: 1,4,16
Postscaler: 1,2,3,..,16
Nạp giá trị ban
đầu
TMR0H=
TMR0L=
WriteTimer0()
TMR1H=
TMR1L=
WriteTimer1()
TMR3H=
TMR3L=
WriteTimer3()
PR2=
Điều kiện tn
Giá trị của
timer lớn hơn
255 (8bit)/
65535(16bit)
Giá trị của
timer lớn hơn
65535
Giá trị của
timer lớn hơn
65535
Số lần TMR2=PR2 trùng
với Postscaler đã đặt
Cờ tràn
TMR0IF
TMR1IF
TMR3IF
TMR2IF
Cách tính thời gian tràn:
Gọi x hệ số chia tần; Fosc(Mhz) tần số hoạt động của VĐK; 256-N (với chế độ
8bit) hoặc 65536-N (với chế độ 16bit) là giá trị ban đầu của timer:
4𝑥𝑁
Câu 1.
𝑇ℎờ𝑖 𝑔𝑖𝑎𝑛 𝑡𝑟à𝑛
(
𝑢𝑆
)
=
𝐹𝑜𝑠𝑐
a.
Thiết kế mạch điện như sau:
-
Các linh kiện được sử dụng: Điện trở, nút nhấn thường mở (PB).
-
Nút nhấn PB được nối với chân RE0; Chân RE1 được nối với Oscilloscope Counter
Timer.
b.
Vẽ lưu đồ thuật toán viết chương trình theo yêu cầu như sau:
-
Khi PB trạng thái nhấn: Chân RE1 mức logic 0;
-
Khi PB ở trạng thái nhả: Sử dụng Timer0/1/2/3 tạo xung tần số ≈ 250Hz trên chân
RE1 (bỏ qua sai số do thời gian thực hiện lệnh của vi điều khiển). PIC18F4520 hoạt
động ở tần số 8Mhz (F
osc
=8Mhz).
=> N<256
N
F=250hz =>T=1/250 (s) = 4000uS => T/2=2000uS.
Áp dụng CT trên:
𝑇ℎờ𝑖 𝑔𝑖𝑎𝑛 𝑡𝑟à𝑛
(
𝑢𝑆
)
=
Chọn x=1=>N=4000
4𝑥𝑁
𝐹𝑜𝑠𝑐
= 2000𝑢𝑆 =>
4𝑥𝑁
8
= 2000 => 𝑥𝑁 = 4000
Câu 2.
a.
Thiết kế mạch điện như sau:
-
Các linh kiện được sử dụng: Điện trở, nút nhấn thường mở (PB).
-
Nút nhấn PB được nối với chân RC0; Chân RD1 được nối với Oscilloscope Counter
Timer.
b.
Vẽ lưu đồ thuật toán viết chương trình theo yêu cầu như sau:
-
Khi PB ở trạng thái nhấn: Sử dụng Timer0/1/2/3tạo xung có tần số ≈ 50Hz trên chân
RD1;
-
Khi PB ở trạng thái nhả: Sử dụng Timer0/1/2/3 tạo xung có tần số ≈ 100Hz trên chân
RD1.
Bỏ qua sai số do thời gian thực hiện lệnh của vi điều khiển; PIC18F4520 hoạt động ở
tần số 4Mhz (F
osc
=4Mhz).
begin
Khởi tạo: RE1: ra số; RE0: vào số.
Khởi tạo timer1:
Chế độ 16bit;
Nguồn xung: Fosc/4
Hệ số chia tần = 1
PB nhấn?
Đ
Nạp cho timer1 giá trị 65536-4000
Timer1 tràn?
Đ
Xóa cờ tràn; lật múc logic trên RE1
RE1=0
begin
Khởi tạo: RE1: ra số; RE0: vào số.
Khởi tạo timer1:
Chế độ 16bit;
Nguồn xung: Fosc/4
Hệ số chia tần = 1
PB nhấn?
Đ
Timer1 tràn?
Nạp cho timer1 gtrị 65536-5000
Đ
Xóa cờ tràn; lật múc logic trên RE1
Timer1 tràn?
Đ
Xóa cờ tràn; lật múc logic trên RE1
Nạp cho timer1 gtrị 65536-10000
F1=50Hz =>T1=1/50s =20.000uS
4xN/Fosc = T1/2=10.000 => xN=10.000
Nếu chn 1 bchia tn hschia ln nht = 16 => N=10.000/16=625>256: Không được
Chn x1(chia trước)=4; x2(chia sau)=10 => x=x1*x2=40 => N=250
Tinh toan tuong t, vi F2=100Hz, N=125
Chia trước: 4
Chia sau: 10

Preview text:

Ngắt ngoài
Lưu ý: Các chân nối với các linh kiện được thay đổi theo từng đề thi/kiểm tra Câu 1.
a. Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: Các điện trở, 05 LED; 02 nút nhấn thường mở (PB1,2).
- LED1 ÷ LED5 được nối với các chân RB3 ÷ RB7; Nút nhấn PB1, PB2 được nối với
lần lượt với các chân RB0/INT0, RB0/INT2.
b. Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- LED5 sáng/tắt liên tục; trong khi LED1 ÷ LED4 hiển thị số lần nhấn PB1 dưới dạng
số nhị phân (LED sáng tương ứng với bit “1”; LED tắt tương ứng với bit “0”). Số lần
nhấn PB1 không lớn hơn 15 lần.
- Khi nhấn PB2 số lần nhấn PB1 được reset về 0. CTC CTCPVN Begin Từ CTC
Khởi tạo: RB3-RB7: ra số RB0, RB2: vào số Ngắt INT0? Cho phép ngắt INT0,2; Ngắt bằng sườn âm Đ unsigned int x=0 Xóa INT0IF; Xóa INT2IF; x=x+1 x=0
Hiển thị x trên LED1-LED4 LED5 sáng ~ 1s
dưới dạng số nhị phân LED5 tắt ~ 1s x>=15 Đ
Dừng đếm bằng cách cấm ngắt INT0 về CTC Câu 2.
a. Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: Các điện trở, 05 LED; 02 nút nhấn thường mở (PB).
- LED1 ÷ LED5 được nối với các chân RB3 ÷ RB7; Nút nhấn PB1, PB2 được nối với
lần lượt với các chân RB0/INT0, RB2/INT2.
b. Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- LED1 ÷ LED4 sáng/tắt liên tục theo chu trình: (1) LED1 sáng, các LED khác tắt trong
~1 giây => (2) LED2 sáng, các LED khác tắt trong ~1 giây => (3) LED3 sáng, các LED
khác tắt trong ~1 giây => (4) LED4 sáng, các LED khác tắt trong ~1 giây => (1) => …
- LED 5 sáng khi nhấn PB1, tắt khi nhấn PB2. Ban đầu (khi chưa nhấn PB1 hoặc PB2), LED 5 tắt. Begin Từ CTC
Khởi tạo: RB3-RB7: ra số RB0, RB2: vào số Cho phép ngắt INT0,2; Ngắt INT0? Ngắt bằng sườn âm (INT0IF=1) S Đ LED5 tắt Xóa cờ INT0IF Xóa cờ INT2IF LED5 sáng LED5 tắt LED1 sáng; các LED LED2 sáng; các LED khác tắt trong ~ 1s khác tắt trong ~ 1s Về CTC LED4 sáng; các LED LED3 sáng; các LED khác tắt trong ~ 1s khác tắt trong ~ 1s Timer
Lưu ý: Các chân nối với các linh kiện, các bộ timer và các tham số (tần số/chu kỳ,
Fosc) được thay đổi theo từng đề thi/kiểm tra

PIC18F4520 có 04 bộ timer: Timer0 Timer1 Timer3 Timer2 Chế độ 8/16 bit 16bit 16bit 8bit => N<256 Nguồn xung
Fosc/4 (trong); Fosc/4 (trong); Fosc/4 (trong); Fosc/4 (trong) T0CKI (ngoài) T13CKI T13CKI (ngoài) (ngoài) Khởi tạo T0CON T1CON T3CON T2CON OpenTimer0() OpenTimer1() OpenTimer2()
Hệ số chia tần 1,2,4,…,256 1,2,4,8 1,2,4,8 Prescaler: 1,4,16 Postscaler: 1,2,3,..,16 Nạp giá trị ban TMR0H= TMR1H= TMR3H= PR2= N đầu TMR0L= TMR1L= TMR3L= WriteTimer0() WriteTimer1() WriteTimer3()
Điều kiện tràn Giá trị của Giá trị của Giá trị của Số lần TMR2=PR2 trùng timer lớn hơn timer lớn hơn timer lớn hơn với Postscaler đã đặt 255 (8bit)/ 65535 65535 65535(16bit) Cờ tràn TMR0IF TMR1IF TMR3IF TMR2IF
Cách tính thời gian tràn:
Gọi x là hệ số chia tần; Fosc(Mhz) là tần số hoạt động của VĐK; 256-N (với chế độ
8bit) hoặc 65536-N (với chế độ 16bit) là giá trị ban đầu của timer: 4𝑥𝑁
𝑇ℎờ𝑖 𝑔𝑖𝑎𝑛 𝑡𝑟à𝑛 (𝑢𝑆) = 𝐹𝑜𝑠𝑐 Câu 1.
a. Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: Điện trở, nút nhấn thường mở (PB).
- Nút nhấn PB được nối với chân RE0; Chân RE1 được nối với Oscilloscope và Counter Timer.
b. Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Khi PB ở trạng thái nhấn: Chân RE1 có mức logic 0;
- Khi PB ở trạng thái nhả: Sử dụng Timer0/1/2/3 tạo xung có tần số ≈ 250Hz trên chân
RE1 (bỏ qua sai số do thời gian thực hiện lệnh của vi điều khiển). PIC18F4520 hoạt
động ở tần số 8Mhz (Fosc=8Mhz).
F=250hz =>T=1/250 (s) = 4000uS => T/2=2000uS. Áp dụng CT trên: 4𝑥𝑁 4𝑥𝑁
𝑇ℎờ𝑖 𝑔𝑖𝑎𝑛 𝑡𝑟à𝑛 (𝑢𝑆) = = 2000𝑢𝑆 => = 2000 => 𝑥𝑁 = 4000 𝐹𝑜𝑠𝑐 8 Chọn x=1=>N=4000 begin begin
Khởi tạo: RE1: ra số; RE0: vào số.
Khởi tạo: RE1: ra số; RE0: vào số. Khởi tạo timer1: Khởi tạo timer1: Chế độ 16bit; Chế độ 16bit; Nguồn xung: Fosc/4 Nguồn xung: Fosc/4 Chia trước: 4 Hệ số chia tần = 1 Hệ số chia tần = 1 Chia sau: 10 Đ Đ PB nhấn? RE1=0 PB nhấn?
Nạp cho timer1 giá trị 65536-10000 Timer1 tràn?
Nạp cho timer1 giá trị 65536-4000
Nạp cho timer1 giá trị 65536-5000 Đ
Xóa cờ tràn; lật múc logic trên RE1 Timer1 tràn? Timer1 tràn? Đ Đ
Xóa cờ tràn; lật múc logic trên RE1
Xóa cờ tràn; lật múc logic trên RE1 Câu 2.
a. Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: Điện trở, nút nhấn thường mở (PB).
- Nút nhấn PB được nối với chân RC0; Chân RD1 được nối với Oscilloscope và Counter Timer.
b. Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Khi PB ở trạng thái nhấn: Sử dụng Timer0/1/2/3tạo xung có tần số ≈ 50Hz trên chân RD1;
- Khi PB ở trạng thái nhả: Sử dụng Timer0/1/2/3 tạo xung có tần số ≈ 100Hz trên chân RD1.
Bỏ qua sai số do thời gian thực hiện lệnh của vi điều khiển; PIC18F4520 hoạt động ở tần số 4Mhz (Fosc=4Mhz).
F1=50Hz =>T1=1/50s =20.000uS
4xN/Fosc = T1/2=10.000 => xN=10.000
Nếu chọn 1 bộ chia tần hệ số chia lớn nhất = 16 => N=10.000/16=625>256: Không được
Chọn x1(chia trước)=4; x2(chia sau)=10 => x=x1*x2=40 => N=250
Tinh toan tuong tự, với F2=100Hz, N=125