NEW
Font size
WorksheetsLập trình C6
Total questions: 80
Worksheet time: 1hrs 20mins
Lệnh nào dùng để thiết lập tất cả các chân của Port C làm đầu ra?
output_c(0x00);
set_tris_c(0xFF);
set_tris_c(0x00);
output_high(pin_c0);
Lệnh nào dùng để đọc giá trị tín hiệu tại chân RA3?
output_high(pin_a3);
output_low(pin_a3);
input(pin_a3);
set_tris_a(0x00);
Đoạn chương trình dưới đây sẽ làm gì với Port D?
Tất cả chân Port D sáng.
Tất cả chân Port D tắt.
Các chân chẵn sáng, chân lẻ tắt.
Các chân lẻ sáng, chân chẵn tắt.
Lệnh output_toggle(pin_b2); có tác dụng gì với chân RB2?
Bật tín hiệu.
Tắt tín hiệu.
Đảo trạng thái tín hiệu.
Không có tác dụng.
Khi chạy đoạn mã sau, chân RB0 sẽ như thế nào?
Chân RB0 luôn bật.
Chân RB0 luôn tắt.
Chân RB0 bật trong 1 giây rồi tắt.
Chân RB0 tắt trong 1 giây rồi bật.
Lệnh nào để xuất tín hiệu 10101010 lên Port B?
output_b(0x55);
output_b(0xAA);
output_b(0xFF);
output_b(0x00);
Khi chạy đoạn mã sau, Các LED nối với Port D sẽ tạo hiệu ứng gì?
Các LED sáng dần hoặc tắt dần
Các LED nhấp nháy
Tất cả LED sáng cùng lúc trong 500ms.
LED sáng ngẫu nhiên.
Lệnh nào dùng để đọc trạng thái của chân RC0?
output_high(pin_c0);
output_low(pin_c0);
input(pin_c0);
set_tris_c(0x00);
Lệnh nào dùng để thiết lập 4 chân thấp của Port D làm đầu ra, 4 chân cao làm đầu vào?
set_tris_d(0x0F);
set_tris_d(0xF0);
output_d(0xFF);
input(pin_d0);
Lệnh output_high(pin_c1); sẽ làm gì với chân RC1?
Đặt chân RC1 ở mức logic cao.
Đặt chân RC1 ở mức logic thấp.
Không thay đổi trạng thái chân RC1.
Đọc giá trị của chân RC1.
Lệnh output_d(0xAA); sẽ tạo hiệu ứng gì trên Port D?
Bật các chân lẻ, tắt các chân chẵn.
Bật các chân chẵn, tắt các chân lẻ.
Bật tất cả các chân.
Tắt tất cả các chân.
Khi thực thi đoạn mã sau, trạng thái 8 LED đơn nối với Port D sẽ như thế nào?
8 LED sáng
4 LED sáng, 4 LED tắt
2 LED sáng, 6 LED tắt
Lệnh output_low(pin_b7); sẽ làm gì với chân RB7?
Đặt RB7 ở mức logic thấp.
Đặt RB7 ở mức logic cao.
Không thay đổi trạng thái RB7.
Đọc giá trị tại RB7.
Đoạn mã sau sẽ làm gì với LED kết nối với RB0?
output_high(pin_b0);
delay_ms(300);
output_low(pin_b0);
delay_ms(300);
LED nhấp nháy với chu kỳ 600ms
LED sáng liên tục
LED tắt liên tục
LED sáng 300ms rồi tắt
Điện áp đầu vào từ cảm biến là 2.5V. Giá trị đọc được trên ADC với độ phân giải 10-bit và Vref = 5V là bao nhiêu?
256
512
768
1023
Lệnh lcd_init(); có tác dụng gì?
Hiển thị chuỗi ký tự trên LCD.
Cấu hình các chân điều khiển và khởi tạo LCD.
Xóa nội dung hiển thị trên LCD.
Đưa con trỏ về góc trên cùng bên trái.
Chân nào của vi điều khiển PIC16F877A được sử dụng làm đầu vào ADC?
RB0
RD0
RA0
RC0
Lệnh nào được sử dụng để đọc giá trị ADC?
setup_adc_ports();
setup_adc();
read_adc();
input(pin_a0);
Lệnh nào dùng để hiển thị chuỗi ký tự trên màn hình LCD?
lcd_putc();
lcd_puts();
lcd_gotoxy();
output_lcd();
Khi chạy đoạn mã sau, LCD sẽ hiển thị gì?
lcd_putc("\fHELLO WORLD");
"HELLO WORLD" ở góc trên bên trái.
"HELLO WORLD" ở giữa màn hình.
Xóa màn hình và không hiển thị gì.
"HELLO" trên dòng 1, "WORLD" trên dòng 2.
Lệnh nào dùng để điều chỉnh giá trị độ rộng xung PWM (duty cycle)?
set_pwm1_duty(value);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 255, 1);
output_high(pin_c2);
Lệnh nào được sử dụng để thiết lập Timer2 cho chế độ PWM?
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 255, 1);
set_pwm1_duty(128);
output_low(pin_c2);
Để kích hoạt CCP1 hoạt động ở chế độ PWM, lệnh nào được sử dụng?
setup_adc(ADC_CLOCK_DIV_32);
setup_timer_2(T2_DIV_BY_4, 255, 1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(128);
Động cơ được điều khiển bằng phương pháp điều chỉnh độ rộng xung, công suất động cơ tỉ lệ thuận với độ rộng xung điều khiển,khi chạy đoạn mã bên dưới thì động cơ sẽ hoạt động như thế nào?
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 255, 1);
set_pwm1_duty(192);
Động cơ chạy với 100% công suất.
Động cơ chạy với 50% công suất.
Động cơ chạy với 75% công suất.
Động cơ không chạy.
Động cơ được điều khiển bằng phương pháp điều chỉnh độ rộng xung, công suất động cơ tỉ lệ thuận với độ rộng xung điều khiển,khi chạy đoạn mã bên dưới thì động cơ sẽ hoạt động như thế nào?
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 255, 1);
set_pwm1_duty(64);
delay_ms(3000);
set_pwm1_duty(192);
delay_ms(3000);
Động cơ chạy ở 25% công suất, sau đó tăng lên 75% công suất.
Động cơ chạy ở 75% công suất, sau đó giảm xuống 25%.
Động cơ dừng sau khi chạy ở 25% công suất.
Động cơ không hoạt động.
Động cơ được điều khiển bằng phương pháp điều chỉnh độ rộng xung, công suất động cơ tỉ lệ thuận với độ rộng xung điều khiển,khi chạy đoạn mã bên dưới thì động cơ sẽ hoạt động như thế nào?
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 255, 1);
while (true) {
set_pwm1_duty(128);
delay_ms(2000);
set_pwm1_duty(64);
delay_ms(2000);
}
Động cơ tăng tốc dần
Động cơ chạy luân phiên giữa 50% và 25% công suất mỗi 2 giây
Động cơ giảm tốc dần sau 2 giây
Động cơ không chạy
Động cơ bước có góc bước là 1.8° và được điều khiển trong chế độ Half-Step. Số bước cần thiết để quay được 45° là bao nhiêu?
25 bước
50 bước
100 bước
200 bước
Động cơ bước được điều khiển bởi hai mã bước liên tiếp dưới đây. Chế độ điều khiển đang được sử dụng là gì?
Bước 1: {1, 0, 0, 0}
Bước 2: {1, 1, 0, 0}
Full-Step
Half-Step
Micro-Stepping
Không xác định
Dưới đây là hai mã bước liên tiếp điều khiển động cơ bước. Chế độ điều khiển đang được sử dụng là gì?
Bước 1: {1, 1, 0, 0}
Bước 2: {0, 1, 1, 0}
Full-Step
Half-Step
Micro-Stepping
Không xác định
Động cơ bước được lập trình bằng đoạn mã sau. Phương pháp điều khiển nào đang được áp dụng?
int steps[4] = {0x08, 0x04, 0x02, 0x01}; // Mã bước
for (int i = 0; i < 4; i++) {
output_c(steps[i]);
delay_ms(2);
}
Full-Step Drive
Wave Drive
Half_Step Drive
Micro_stepping
Động cơ bước được lập trình bằng đoạn mã sau.Phương pháp điều khiển nào đang được áp dụng? int steps[4] = {0x09, 0x03, 0x06, 0x0C}; // Mã bước for (int i = 0; i < 4; i++) { output_c(steps[i]); delay_ms(5); }
Wave Drive
Half-Step Drive
Full-Step Drive
Micro-Stepping
Đoạn mã sau điều khiển động cơ bước theo phương pháp nào? int steps[8] = {0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x01, 0x09}; // Mã bước for (int i = 0; i < 8; i++) { output_c(steps[i]); delay_ms(10); }
Wave Drive
Full-Step Drive
Half-Step Drive
Micro-Stepping
Đoạn mã trên sẽ xử lý LED như thế nào? Một LED đơn được kết nối với chân RD0 theo kiểu cathode chung (chân âm của LED được nối đất). Nút nhấn RB0 được treo pull-up. Cho đoạn mã sau: if (!input(PIN_B0)) { output_high(PIN_D0); } else { output_low(PIN_D0); }
LED sáng khi nhấn nút và tắt khi thả nút.
LED tắt khi nhấn nút và sáng khi thả nút.
LED sáng liên tục, không thay đổi trạng thái khi nhấn nút.
LED tắt liên tục, không thay đổi trạng thái khi nhấn nút.
Đoạn mã trên sẽ làm gì? Một LED 7 thanh được kết nối với Port C theo kiểu cathode chung (các chân âm của LED 7 thanh được nối đất). Cho đoạn mã sau để hiển thị các số từ 0 đến 9: int segments[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; for (int i = 0; i < 10; i++) { output_c(segments[i]); delay_ms(500); }
Hiển thị các số từ 9 đến 0 theo thứ tự ngược.
Hiển thị các số từ 0 đến 9 theo thứ tự tăng dần.
Hiển thị các số chẵn từ 0 đến 8.
LED 7 thanh không hiển thị đúng do lỗi lập trình.
Đoạn mã trên sẽ làm gì? Một LED 7 thanh được kết nối với Port D theo kiểu cathode chung (các chân âm của LED 7 thanh được nối đất). Cho đoạn mã sau: int segments[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; for (int i = 1; i < 10; i += 2) { output_d(segments[i]); delay_ms(500); }
Hiển thị các số lẻ từ 1 đến 9 theo thứ tự tăng dần.
Hiển thị các số chẵn từ 0
Hiển thị các số từ 9 đến 1 theo thứ tự giảm dần.
Không hiển thị đúng do lỗi vòng lặp
Kết quả hiển thị của LED 7 thanh là gì?
Một LED 7 thanh được kết nối với Port B theo kiểu cathode chung. Cho đoạn mã sau:
signed int i;
int segments[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D};
for (i = 5; i >= 0; i--) {
output_b(segments[i]);
delay_ms(500);
}
Các số từ 5 đến 0 theo thứ tự giảm dần.
Các số từ 0 đến 5 theo thứ tự tăng dần.
Các số từ 5 đến 0 nhưng bỏ qua số 0.
LED 7 thanh không hiển thị đúng do lỗi trong đoạn mã.
Một LED 7 thanh được kết nối với Port D theo kiểu cathode chung. Nút nhấn RB0 được treo pull-up. Cho đoạn mã sau:
int segments[] = {0x3F, 0x06, 0x5B, 0x4F};
int i = 0;
while (1) {
if (!input(PIN_B0)) {
delay_ms(20);
if (!input(PIN_B0)) {
output_d(segments[i]);
i = (i + 1) % 4;
while (!input(PIN_B0));
}
}
}
Đoạn mã trên sẽ làm gì khi nhấn nút RB0?
Hiển thị các số từ 0 đến 3 trên LED 7 thanh theo thứ tự tăng dần, mỗi lần nhấn nút hiển thị một số.
Hiển thị các số từ 3 đến 0 theo thứ tự giảm dần.
Hiển thị số 3 liên tục trên LED 7 thanh.
LED 7 thanh không hiển thị do lỗi trong vòng lặp.
Một LED 7 thanh được kết nối với Port C theo kiểu anode chung. Nút nhấn RB1 được treo pull-down. Cho đoạn mã sau:
int segments[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66};
int i = 4;
while (1) {
if (input(PIN_B1)) {
delay_ms(20);
if (input(PIN_B1)) {
output_c(~segments[i]);
i = (i - 1 + 5) % 5;
while (input(PIN_B1));
}
}
}
Đoạn mã trên sẽ làm gì khi nhấn nút RB1?
Hiển thị các số từ 4 đến 0 trên LED 7 thanh theo thứ tự giảm dần, mỗi lần nhấn nút hiển thị một số.
Hiển thị các số từ 0 đến 4 theo thứ tự tăng dần.
Hiển thị số 4 liên tục trên LED 7 thanh.
LED 7 thanh không hiển thị do lỗi trong phép toán i - 1.
Một dãy 8 LED được kết nối với Port D theo kiểu cathode chung.
Cho đoạn mã sau:
int state = 0x00;
while (1) {
state = (state << 1) | 0x01;
output_d(state);
delay_ms(200);
if (state == 0xFF) {
break;
}
}
Đoạn mã trên sẽ tạo hiệu ứng gì trên dãy LED?
Tất cả LED bật sáng cùng lúc.
LED sáng từ RD0 đến RD7, từng LED sáng thêm một trong mỗi bước.
LED sáng từ RD7 đến RD0, từng LED sáng thêm một trong mỗi bước.
Tất cả LED sáng dần rồi tắt ngay lập tức.
Một dãy 8 LED được kết nối với Port B theo kiểu cathode chung. Cho đoạn mã sau:
int state = 0xFF;
while (1) {
state = state >> 1;
output_b(state);
delay_ms(200);
if (state == 0x00) {
break;
}
}
Đoạn mã trên sẽ tạo hiệu ứng gì trên dãy LED?
LED sáng dần từ RD0 đến RD7, từng LED sáng thêm một trong mỗi bước.
LED tắt từ RB7 đến RB0, từng LED tắt một trong mỗi bước.
LED tắt từ RB0 đến RB7, từng LED tắt một trong mỗi bước.
Tất cả LED tắt ngay lập tức sau khi sáng đầy đủ.
Một dãy 8 LED được kết nối với Port D theo kiểu cathode chung. Cho đoạn mã sau:
int state = 0x01;
while (1) {
output_d(state);
delay_ms(200);
state = state << 1;
if (state == 0x00) {
break;
}
}
Đoạn mã trên sẽ tạo hiệu ứng gì trên dãy LED?
LED sáng dần từ RD0 đến RD7, từng LED sáng thêm một trong mỗi bước.
LED sáng lần lượt từ RD0 đến RD7, mỗi lần chỉ có một LED sáng.
LED sáng từ RD7 đến RD0, mỗi lần chỉ có một LED sáng.
Tất cả LED sáng cùng lúc rồi tắt dần từ RD7 đến RD0.
.Một dãy 8 LED được kết nối với Port B theo kiểu cathode chung. Cho đoạn mã sau:
int state = 0x80;
while (1) {
output_b(state);
delay_ms(200);
state = state >> 1;
if (state == 0x00) {
break;
}
}
Đoạn mã trên sẽ tạo hiệu ứng gì trên dãy LED?
LED sáng lần lượt từ RB7 đến RB0, mỗi lần chỉ có một LED sáng.
LED sáng dần từ RB0 đến RB7, từng LED sáng thêm một trong mỗi bước.
LED sáng từ RB0 đến RB7, mỗi lần chỉ có một LED sáng.
Tất cả LED sáng rồi tắt ngay lập tức.
.Một dãy 8 LED được kết nối với Port D theo kiểu cathode chung. Cho đoạn mã sau:
int state = 0x18;
while (1) {
output_d(state);
delay_ms(200);
state = (state << 1) | (state >> 1);
if (state == 0xFF) {
break;
}
}
Đoạn mã trên sẽ tạo hiệu ứng gì trên dãy LED?
LED sáng lần lượt từ RD0 đến RD7, mỗi lần chỉ có một LED sáng.
LED sáng từ giữa ra ngoài, từng LED sáng thêm ở hai bên trong mỗi bước.
LED sáng từ RD7 đến RD0, từng LED sáng thêm ở hai bên trong mỗi bước.
Tất cả LED sáng ngay lập tức.
Một LED đơn được kết nối với PIN_D0. Nút nhấn RB0 được treo trở lên dương (pull-up). Đoạn mã sau được sử dụng để điều khiển LED:
if (temperature > 35) {
output_toggle(PIN_D0);
delay_ms(500);
} else if (temperature < 25) {
output_low(PIN_D0);
} else {
output_high(PIN_D0);
}
LED tắt khi nhiệt độ < 25°C, sáng liên tục khi nhiệt độ từ 25°C đến 35°C, và nhấp nháy khi nhiệt độ > 35°C.
LED sáng liên tục khi nhiệt độ < 25°C, tắt khi nhiệt độ từ 25°C đến 35°C, và nhấp nháy khi nhiệt độ > 35°C.
LED nhấp nháy khi nhiệt độ < 25°C, sáng liên tục khi nhiệt độ > 35°C, và tắt khi nhiệt độ từ 25°C đến 35°C.
LED luôn sáng do điều kiện kiểm tra nhiệt độ không hợp lệ.
Một LED đơn được kết nối với PIN_B0 theo kiểu cathode chung. Nút nhấn RB1 treo trở lên dương (pull-up). Đoạn mã sau được dùng:
if (input(PIN_B1)) {
output_high(PIN_B0);
} else {
output_low(PIN_B0);
}
LED không sáng khi nhấn nút. Nguyên nhân nào đúng?
Sai trạng thái kiểm tra nút nhấn.
LED không được cấp nguồn đúng.
Nút nhấn bị hỏng.
Thiếu cấu hình chân I/O.
. Một LED 7 thanh kết nối với Port D theo kiểu cathode chung. Chương trình hiển thị số 0–9 lần lượt. Đoạn mã sau được dùng:
int led[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i = 0; i <= 10; i++) {
output_d(led[i]);
delay_ms(500);
}
LED 7 thanh không hiển thị đúng các số. Nguyên nhân nào đúng?
Sai giá trị mã LED trong mảng led[].
Điều kiện vòng lặp i <= 10 dẫn đến lỗi truy cập ngoài mảng.
LED 7 thanh không hỗ trợ mã
Thời gian trễ giữa các lần hiển thị không đủ.
Một động cơ bước 4 pha kết nối với Port B. Chương trình điều khiển động cơ quay thuận. Đoạn mã sau được sử dụng:
int step[] = {0x01, 0x02, 0x04, 0x06};
for (int i = 0; i < 4; i++) {
output_b(step[i]);
delay_ms(100);
}
Động cơ không quay mà chỉ rung tại chỗ. Nguyên nhân nào đúng?
Sai thứ tự pha trong mảng step[].
Độ trễ giữa các bước quá ngắn.
Lệnh output_b() không hỗ trợ điều khiển động cơ bước.
Điều kiện vòng lặp i < 4 không phù hợp.
Một cảm biến ánh sáng được kết nối với chân AN0 để đo độ sáng trong khoảng 0–100%. Đoạn mã sau được sử dụng để đọc giá trị ánh sáng:
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_32);
set_adc_channel(0);
delay_us(20);
int value = read_adc();
float brightness = value 100 / 1024.0;
Giá trị ánh sáng thu được không chính xác. Nguyên nhân nào đúng?
Thời gian chờ sau khi chọn kênh ADC không đủ lớn.
Giá trị 1024.0 trong công thức tính toán không đúng với độ phân giải ADC.
Thanh ghi ADC chưa được cấu hình đúng.
Lệnh setup_adc_ports() không phù hợp với kênh AN0.
Một cảm biến nhiệt độ được kết nối với AN0. Nhiệt độ trong khoảng 0–50°C tương ứng với giá trị ADC từ 0–1023. Đoạn mã sau được dùng để tính nhiệt độ:
int adc_value = read_adc();
float temperature = (adc_value / 1023) 50;
Kết quả tính toán nhiệt độ sai. Nguyên nhân nào đúng?
Giá trị 50 cần chuyển thành số thực (50.0).
Phép chia adc_value / 1023 thực hiện phép chia số nguyên.
Giá trị trả về của hàm read_adc() không chính xác.
Giá trị adc_value vượt quá phạm vi cho phép của kiểu int.
Đoạn mã sau được dùng để đọc giá trị ADC và tính điện áp:
int adc_value = read_adc();
float voltage = adc_value 5 / 1023;
Kết quả tính điện áp sai. Nguyên nhân nào đúng?
Biến adc_value cần chuyển thành số thực trước khi thực hiện phép toán.
Biến voltage không được khai báo là double.
Phép toán adc_value 5 không thể thực hiện được với kiểu dữ liệu int.
Giá trị 5 / 1023 là sai vì cả hai là số nguyên.
Hoàn thiện đoạn mã để LED đơn trên chân PIN_D0 nhấp nháy với chu kỳ 1 giây khi nút RB0 được nhấn.
if (____________________) { // Dòng 1
output_toggle(PIN_D0);
____________________; // Dòng 2
}
input(PIN_B0) == 0 delay_ms(1000);
input(PIN_B0) == 1 delay_ms(500);
input(PIN_B0) delay_ms(1000);
input(PIN_B0) delay_ms(1000);
Một LED đơn được kết nối với PIN_D0 theo kiểu cathode chung. Nút nhấn RB1 được treo trở lên dương (pull-up). Hoàn thiện đoạn mã để bật LED khi nút được nhấn:
if (____________________) { // Dòng 1
output_high(PIN_D0);
} else {
output_low(PIN_D0);
}
input(PIN_B1) == 0
input(PIN_D0) == 1
input(PIN_B1) & 1
PIN_B1 == 0
Một LED đơn được kết nối với PIN_D0 theo kiểu cathode chung. Nút nhấn RB1 được treo trở lên dương (pull-up). Hoàn thiện đoạn mã để tắt LED sau khi nút được nhấn 5 lần, bỏ qua các lần giữ nút:
int count = 0;
int prev_input = 1;
if (____________________) { // Dòng 1
count++;
____________________; // Dòng 2
}
prev_input = input(PIN_B1); // Cập nhật trạng thái nút nhấn
input(PIN_B1) == 0 && prev_input == 1 if (count == 5) output_low(PIN_D0);
input(PIN_B1) && prev_input == 0 if (count == 5) output_low(PIN_D0);
!input(PIN_B1) && prev_input == 1 if (count == 5) output_low(PIN_D0);
input(PIN_B1) == 0 if (count == 5) output_toggle(PIN_D0);
Một LED 7 thanh kết nối với Port D theo kiểu cathode chung. Hoàn thiện đoạn mã để LED chỉ hiển thị các số lẻ từ 1-9:
int led[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i = 1; ____________________) { // Dòng 1
if (____________________) { // Dòng 2
output_d(led[i]);
delay_ms(500);
}
}
i <= 9; i += 2 i % 2 == 1
i <= 10; i++ i % 2 == 0
i <= 9; i++ i % 2 == 1
i <= 9; i += 2 i % 2 == 0
Một LED 7 thanh được kết nối với Port D theo kiểu cathode chung. Hoàn thiện đoạn mã để LED chỉ hiển thị các số chẵn từ 0-8:
int led[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i = 0; ____________________) { // Dòng 1
if (____________________) { // Dòng 2
output_d(led[i]);
delay_ms(500);
}
}
i <= 8; i += 2 i % 2 == 0
i <= 9; i++ i % 2 == 1
i <= 8; i++ i % 2 == 0
i <= 9; i += 2 i % 2 == 0
Một LED 7 thanh kết nối với Port D theo kiểu cathode chung. Hoàn thiện đoạn mã để LED chỉ hiển thị các số lẻ từ 9–1 theo thứ tự giảm dần:
int led[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i = 9; ____________________) { // Dòng 1
if (____________________) { // Dòng 2
output_d(led[i]);
delay_ms(500);
}
}
i >= 1; i -= 2 i % 2 == 1
i >= 0; i -= 1 i % 2 == 0
i >= 1; i-- i % 2 == 1
i >= 0; i -= 2 i % 2 == 1
Một LED 7 thanh kết nối với Port D theo kiểu cathode chung. Hoàn thiện đoạn mã để LED chỉ hiển thị các số chẵn từ 8-0 theo thứ tự giảm dần:
int led[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i = 8; ____________________) { // Dòng 1
if (____________________) { // Dòng 2
output_d(led[i]);
delay_ms(500);
}
}
i >= 0; i -= 2 i % 2 == 0
i >= 1; i -= 2 i % 2 == 1
i >= 0; i-- i % 2 == 0
i >= 0; i -= 2 i % 2 == 1
Một LED 7 thanh kết nối với Port D theo kiểu cathode chung. Hoàn thiện đoạn mã để LED hiển thị các số lẻ từ 1-9 theo thứ tự tăng dần, sau đó giảm dần về 1:
int led[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i = 1; i <= 9; i += 2) {
output_d(led[i]);
delay_ms(500);
}
for (int i = ____________________) { // Dòng 1
if (____________________) { // Dòng 2
output_d(led[i]);
delay_ms(500);
}
}
9; i >= 1; i -= 2 i % 2 == 1
7; i >= 1; i -= 2 i % 2 == 0
9; i >= 1; i -= 2 i % 2 == 0
8; i >= 0; i -= 2 i % 2 == 1
Một cảm biến nhiệt độ được kết nối với chân AN0. Nhiệt độ trong khoảng 0-50°C tương ứng với điện áp 0-5V. Hoàn thiện đoạn mã để chuyển đổi giá trị ADC thành nhiệt độ:
set_adc_channel(0);
delay_us(20);
int adc_value = read_adc();
float temperature = ____________________; // Dòng 1
(adc_value 50) / 1023.0
(adc_value 5) / 1023.0
(adc_value / 1023.0) 50
(adc_value 1023) / 50.0
Một cảm biến ánh sáng được kết nối với chân AN1. Giá trị ADC trong khoảng 0-1023 tương ứng với độ sáng 0-100%. Hoàn thiện đoạn mã để tính giá trị độ sáng:
set_adc_channel(1);
delay_us(20);
int adc_value = read_adc();
float brightness = ____________________; // Dòng 1
(adc_value / 1023.0) 100
(adc_value 100) / 1023.0
(adc_value / 100) 1023
(adc_value 5) / 1023.0
Một động cơ bước 4 pha sử dụng mã điều khiển sau: int step_sequence[4] = {0x08, 0x04, 0x02, 0x01}; for (int i = 0; i < 4; i++) { output_b(step_sequence[i]); delay_ms(delay_time); // Điều chỉnh tốc độ ở đây } Nếu delay_time ban đầu là 10ms, giá trị nào sau đây làm động cơ quay chậm hơn?
delay_time = 5
delay_time = 15
delay_time = 8
delay_time = 1
Chọn đoạn mã điều khiển động cơ như bên dưới: int step_sequence[4] = {0x08, 0x04, 0x02, 0x01}; // Quay thuận for (int i = 0; i < 4; i++) { output_b(step_sequence[i]); delay_ms(10); } // Quay ngược for (____________________) { output_b(step_sequence[i]); delay_ms(10); } Hãy hoàn thiện phần thiếu để động cơ quay ngược lại.
signed int i = 3; i >= 0; i--
int i = 3; i >=0; i--
int i = 3; i < 4; i++
int i = 0; i < 4; i++
Một động cơ bước có mỗi bước tương ứng với góc quay 1.8°. Hoàn thiện đoạn mã sau để tính số bước cần thiết để quay động cơ một góc 90° và thực hiện điều khiển quay:
int step_sequence[4] = {0x08, 0x04, 0x02, 0x01};
int steps = ____________________; // Dòng 1
for (int i = 0; i < steps; i++) {
output_b(step_sequence[i % 4]);
delay_ms(10); }
90 / 1.8
90 1.8
180 / 1.8
180 1.8
Một động cơ bước có mỗi bước tương ứng với góc quay 1.8°. Hoàn thiện đoạn mã dưới đây để tính số bước cần thiết để quay động cơ 2 vòng và thực hiện điều khiển quay:
int step_sequence[4] = {0x08, 0x04, 0x02, 0x01}; // Mã điều khiển động cơ bước
____________________ steps = ____________________; // Dòng 1
for (____________________ i = 0; i < steps; i++) { // Dòng 2
output_b(step_sequence[i % 4]); // Xuất mã điều khiển theo trình tự
delay_ms(10);
}
int steps = 2 (360 / 1.8); int i
int16 steps = 2 (360 / 1.8); int i
long steps = 2 (360 / 1.8); long i
int steps = 200; long i
Cho đoạn mã điều khiển tốc độ động cơ DC:
set_pwm1_duty(512); // Dòng 1
set_pwm1_duty(128); // Dòng 2
Dòng 1 và Dòng 2 đều thiết lập Duty Cycle cho PWM 8-bit.
Dòng 1 thiết lập Duty Cycle cho PWM 10-bit, Dòng 2 cho PWM 8-bit.
Dòng 1 và Dòng 2 đều thiết lập Duty Cycle cho PWM 10-bit.
Cả hai dòng đều sai, vì giá trị vượt phạm vi PWM.
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau:
setup_timer_2(T2_DIV_BY_16, 255, 1); // Thiết lập TMR2, PR2 = 255
setup_ccp1(CCP_PWM); // Cấu hình CCP1 ở chế độ PWM
set_pwm1_duty(128); // Thiết lập chu kỳ xung (duty cycle)
Động cơ sẽ hoạt động thế nào?
Quay với tốc độ tối đa.
Quay với 50% tốc độ tối đa.
Quay với 25% tốc độ tối đa.
Không quay.
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau:
setup_timer_2(T2_DIV_BY_4, 249, 1); // Thiết lập TMR2, PR2 = 249
setup_ccp2(CCP_PWM); // Cấu hình CCP2 ở chế độ PWM
set_pwm2_duty(50); // Thiết lập chu kỳ xung (duty cycle)
Động cơ sẽ hoạt động thế nào?
Quay với 20% tốc độ tối đa.
Quay với 40% tốc độ tối đa.
Quay với 50% tốc độ tối đa.
Quay với 80% tốc độ tối đa.
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau: setup_timer_2(T2_DIV_BY_8, 199, 1); // Thiết lập TMR2, PR2 = 199 setup_ccp1(CCP_PWM); // Cấu hình CCP1 ở chế độ PWM set_pwm1_duty(80); // Thiết lập chu kỳ xung (duty cycle) Động cơ sẽ hoạt động thế nào?
Quay với 30% tốc độ tối đa.
Quay với 40% tốc độ tối đa.
Quay với 60% tốc độ tối đa.
Quay với 75% tốc độ tối đa.
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau: setup_timer_2(T2_DIV_BY_16, 124, 1); // Thiết lập TMR2, PR2 = 124 setup_ccp2(CCP_PWM); // Cấu hình CCP2 ở chế độ PWM set_pwm2_duty(75); // Thiết lập chu kỳ xung (duty cycle) Động cơ sẽ hoạt động thế nào?
Quay với 30% tốc độ tối đa.
Quay với 50% tốc độ tối đa.
Quay với 60% tốc độ tối đa.
Quay với 75% tốc độ tối đa.
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau: setup_timer_2(T2_DIV_BY_16, ________, 1); // Thiết lập TMR2 với PR2 setup_ccp2(CCP_PWM); // Cấu hình CCP2 ở chế độ PWM set_pwm2_duty(75); // Thiết lập chu kỳ xung (duty cycle) Biết chu kỳ xung PWM yêu cầu là 60%. Giá trị cần điền vào chỗ trống để đáp ứng yêu cầu này là bao nhiêu?
124
99
255
149
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau: setup_timer_2(T2_DIV_BY_8, ________, 1); // Thiết lập TMR2 với PR2 setup_ccp1(CCP_PWM); // Cấu hình CCP1 ở chế độ PWM set_pwm1_duty(50); // Thiết lập chu kỳ xung (duty cycle) Biết chu kỳ xung PWM yêu cầu là 40%. Giá trị cần điền vào chỗ trống để đáp ứng yêu cầu này là bao nhiêu?
124
249
199
99
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau: setup_timer_2(T2_DIV_BY_4, ________, 1); // Thiết lập TMR2 với PR2 setup_ccp2(CCP_PWM); // Cấu hình CCP2 ở chế độ PWM set_pwm2_duty(128); // Thiết lập chu kỳ xung (duty cycle) Biết chu kỳ xung PWM yêu cầu là 50%. Giá trị cần điền vào chỗ trống để đáp ứng yêu cầu này
127
255
200
249
Một động cơ DC được điều khiển bằng PWM. Cho đoạn mã sau:
setup_timer_2(T2_DIV_BY_16, ________, 1); // Thiết lập TMR2 với PR2
setup_ccp1(CCP_PWM); // Cấu hình CCP1 ở chế độ PWM
set_pwm1_duty(32); // Thiết lập chu kỳ xung (duty cycle)
Biết chu kỳ xung PWM yêu cầu là 25%. Giá trị cần điền vào chỗ trống để đáp ứng yêu cầu này là bao nhiêu?
127
99
255
249
Một nút nhấn được kết nối với chân RB0 (pull-up). Cho đoạn mã sau:
if (!input(PIN_B0)) {
delay_ms(20);
if (!input(PIN_B0)) {
output_toggle(PIN_D0);
while (!input(PIN_B0));
}
}
Đoạn mã trên xử lý nút nhấn như thế nào?
LED nhấp nháy liên tục khi giữ nút.
LED bật/tắt mỗi lần nhấn nút và không bị ảnh hưởng khi giữ nút.
LED chỉ bật khi giữ nút và tắt khi thả nút.
LED không thay đổi trạng thái.
Một nút nhấn được kết nối với RB1 theo kiểu pull-down. Cho đoạn mã sau:int count = 0;
int prev_state = 0;
while (1) {
int current_state = input(PIN_B1);
if (current_state && !prev_state) {
count++;
output_d(count);
}
prev_state = current_state;
}
Đoạn mã trên có nhược điểm gì trong việc xử lý nút nhấn?
Không xử lý dội nút, dẫn đến đếm sai số lần nhấn.
Không hiển thị chính xác giá trị lên Port D.
Không cập nhật trạng thái của nút nhấn.
Không phát hiện được khi nút được thả.
Một nút nhấn được kết nối với RB2 theo kiểu pull-up. Cho đoạn mã sau:
if (!input(PIN_B2)) {
delay_ms(20);
if (!input(PIN_B2)) {
output_high(PIN_D0);
delay_ms(5000);
output_low(PIN_D0);
}
}
Đoạn mã trên có thể gặp vấn đề gì?
Không xử lý dội nút, dẫn đến LED sáng không ổn định.
Trong 5 giây LED sáng, vi điều khiển không thực hiện được công việc khác.
PIN_D0 mức cao ngay cả khi nút chưa được nhấn.
Không kiểm tra được trạng thái nút thả sau khi LED sáng.
Một nút nhấn được kết nối với chân RB3 theo kiểu pull-down. Cho đoạn mã sau:
int count = 0;
while (1) {
if (input(PIN_B3)) {
delay_ms(20);
if (input(PIN_B3)) {
count++;
}
while (input(PIN_B3));
}
}
Đoạn mã trên xử lý nút nhấn như thế nào?
Đếm chính xác nhưng chưa xử lý hết dội nút.
Đếm chính xác và đợi thả nút trước khi tiếp tục.
Sai khi giữ nút quá lâu, vòng lặp bị treo.
Sai nếu nút bị kẹt, dẫn đến đếm liên tục.
Một nút nhấn được kết nối với chân RB4 theo kiểu pull-up. Cho đoạn mã sau:
int count = 0;
while (1) {
if (!input(PIN_B4)) {
delay_ms(10);
if (!input(PIN_B4)) {
count++;
}
}
}
Đoạn mã trên xử lý nút nhấn như thế nào?
Đếm chính xác nhưng không đợi thả nút, dễ đếm nhiều lần khi giữ nút.
Đếm chính xác và đợi thả nút trước khi tiếp tục.
Sai nếu không nhấn đúng nút hoặc khi nút bị dội nhiều.
Không đếm được số lần nhấn nút do thiếu kiểm tra thả nút.
Một nút nhấn được kết nối với chân RB5 theo kiểu pull-down. Cho đoạn mã sau:
int count = 0;
while (1) {
if (input(PIN_B5)) {
count++;
delay_ms(20);
}
}
Đoạn mã trên xử lý nút nhấn như thế nào?
Đếm sai nếu giữ nút quá lâu, dẫn đến tăng liên tục.
Đếm chính xác và xử lý tốt dội nút.
Không đếm được do thiếu kiểm tra trạng thái thả nút.
Đếm chính xác nhưng chậm khi xử lý dội nút.
Một nút nhấn được kết nối với chân RB6 theo kiểu pull-up. Cho đoạn mã sau:
int count = 0;
while (1) {
if (!input(PIN_B6)) {
delay_ms(20);
if (!input(PIN_B6)) {
count++;
while (!input(PIN_B6));
}
}
}
Đoạn mã trên xử lý nút nhấn như thế nào?
Đếm chính xác số lần nhấn nút nhưng dễ bị dội nút khi nhấn nhanh.
Đếm chính xác và đợi thả nút trước khi tiếp tục.
Đếm sai nếu nút bị kẹt, dẫn đến tăng liên tục.
Không xử lý được khi nút bị lỗi phần cứng.
