1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Đề thi lập trình nhúng giữa kì có đáp án

4 2,4K 41
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 86,16 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề thi lập trình nhúng giữa kì có đáp án

Trang 1

ĐH Quốc Gia Tp.HCM

ĐH Bách Khoa

Khoa Điện-Điện tử

Bộ môn Điện tử

o0o

ĐỀ THI GIỮA HỌC KỲ 2, 2011-2012

Lớp CQ DD08

Môn thi: Lập trình nhúng - Thời gian: 50 phút

(Sinh viên được phép tham khảo tài liệu;

Sinh viên không được phép sử dụng máy vi tính, laptop)

Bài 1: (3 điểm) Cho 2 đoạn code C sau:

char func(void) {

static char sum1 = 0;

char sum2 = 0;

sum1 = sum1 + 1;

sum2 = sum2 + 2;

return (sum1 + sum2);

}

void main(void) {

char i;

char S=0;

for(i=0;i<3;i++) S = S+func();

}

int inc(int a, int *b) {

a = a*2;

(*b) ++;

return a + (*b);

} void main(void) { int i;

int n1 = 2;

int n2 = 3;

int T=0;

for(i=0;i<3;i++) T += inc (n1, &n2 ); }

a) Sau khi thực hiện chương trình (a), kết quả biến S là bao nhiêu? Giải thích

b) Sau khi thực hiện chương trình (b), giá trị của biến T là bao nhiêu? Giải thích

Trả lời:

Chú ý: biến static lưu giá trị cũ sau khi thoát

khỏi hàm

Vòng lặp i=0

sum1 = 0 + 1 = 1

sum2 = 0 + 2 = 2

S = 0+3 = 3

Vòng lặp i=1

sum1 = 1 + 1 = 2

sum2 = 0 + 2 = 2

S = 3+4 = 7

Vòng lặp i=2

sum1 = 2 + 1 = 3

sum2 = 0 + 2 = 2

S = 7+5=12

=> Đáp án là S = 12

Chú ý: đối số kiểu con trỏ sẽ lưu giá trị cũ sau khi thoát khỏi hàm, đối số kiểu truyền giá trị sẽ không thay đổi giá trị sau khi thoát khỏi hàm Vòng lặp i=0

n1 = 2 n2 = 3 + 1 = 4

T = 8 Vòng lặp i=1 n1 = 2 n2 = 4 + 1 = 5

T = 8 + 9 = 17 Vòng lặp i=2 n1 = 2 n2 = 5 + 1 = 6

T = 17 + 10 = 27

=> đáp án là T = 27

Bài 2: (3 điểm) Hãy viết chương trình C cho vi điều khiển 8051 theo yêu cầu sau:

• Vi điều khiển đọc giá trị nhị phân 8-bit không dấu tại Port 0 và Port1

• Nếu giá trị tại Port 0 > giá trị tại Port 1 thì ngõ ra P3.0 bằng 1

• Nếu giá trị tại Port 0 < giá trị tại Port 1 thì ngõ ra P3.1 bằng 1

• Nếu giá trị tại Port 0 = giá trị tại Port 1 thì ngõ ra P3.2 bằng 1

Trang 2

• Những trường hợp khác P3.0, P3.1, P3.2 bằng 0

Hãy viết chương trình C theo cấu trúc 2 files:

• main.h: mô tả định nghĩa các Port vào và ra

• main.c: thực hiện tạo ngõ ra theo giải thuật đề ra

Trả lời:

/* main.h */

sfr P0 = 0x80;

sfr P1 = 0x90;

sfr P3 = 0xB0;

sbit GT = P3^0;

sbit LT = P3^1;

sbit EQ = P3^2;

/* main.c */

#include "main.h"

void main() {

char A, B;

while(1){

A = P0; B = P1;

if (A>B) { GT = 1; LT = 0; EQ = 0;

} else if (A<B) { GT = 0; LT = 1; EQ = 0;

} else { GT = 0; LT = 0; EQ = 1;

} }

}

Bài 3: (4 điểm) Cho một hệ thống nhúng sử dụng 8051 thực hiện 2 tác vụ sau:

• Tác vụ 1: Hiển thị 8 LED đuổi bắt tại Port 1, mỗi chu kỳ 1 LED sáng trong 1 giây, tích cực mức 0

• Tác vụ 2: Hiển thị 8 LED chớp tắt luân phiên chẵn lẻ tại Port3, ví dụ: trong chu kỳ 1, LED 0, 2, 4,

6 sáng; trong chu kỳ 2, LED 1, 3, 5, 7 sáng, LED tích cực mức 0 Chu kỳ chớp tắt là 0.5 giây

a) (1 điểm) Hãy vẽ sơ đồ máy trạng thái cho hệ thống trên

b) (3 điểm) Hãy viết chương trình C để thực hiện chức năng điều khiển hệ thống trên

Trả lời:

a) Sơ đồ máy trạng thái

P1=7F P1=BF P1=DF P1=EF

P1=FB P1=F7 P1=FD

P1=FE

P3=AA P3=55

Trang 3

b) Chương trình C

/* main.h */

sfr P1 = 0x90;

sfr P3 = 0xB0;

/* main.c */

#include "main.h"

void delay500ms() {

int i;

for(i=0;i<250;i++); // phụ thuộc vào clock sử dụng }

void update_led_chasing() {

static char state;

switch(state) {

case 0:

P1 = 0x7F; state = 1; break;

case 1:

P1 = 0xBF; state = 2; break;

case 2:

P1 = 0xDF; state = 3; break;

case 3:

P1 = 0xEF; state = 4; break;

case 4:

P1 = 0xF7; state = 5; break;

case 5:

P1 = 0xFB; state = 6; break;

case 6:

P1 = 0xFD; state = 7; break;

case 7:

P1 = 0xFE; state = 0; break;

default:

state = 0; P1 = 0xFF; break;

} }

void update_led_blinking() {

static char state;

switch(state) {

case 0:

P3 = 0xAA; state = 1; break;

case 1:

P3 = 0x55; state = 0; break;

default:

state = 0; P3 = 0xFF; break;

} }

void main() {

while(1) {

Trang 4

update_led_chasing();

update_led_blinking();

delay500ms();

update_led_blinking();

delay500ms();

}

TS Trương Quang Vinh

Ngày đăng: 11/05/2014, 16:02

TỪ KHÓA LIÊN QUAN

w