Đ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:
(a)
(b)
char
func
(void)
{
static char sum1 = 0;
char sum2 = 0;
sum1 = sum1 + 1;
sum2 = sum2 + 2;
return (sum1 + sum2);
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
/* 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.
P1=FD
P1=FE
P3=AA
P3=55
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:
void main()
{
while(1)
{ update_led_chasing();
update_led_blinking();
delay500ms();
update_led_blinking();
delay500ms();
}
}
Chủ nhiệm bộ môn duyệt Người ra đề
TS. Trương Quang Vinh