Đề thi lập trình nhúng giữa kì 2011
Trang 1ĐỀ KIỂM TRA GIỮA KỲ MÔN LẬP TRÌNH NHÚNG
HK 1 – 2011/2012
Thời gian: 45 phút
(SV được sử dụng tài liệu, làm bài ngay trên đề)
(Đề thi có 6 trang)
Câu 1 (2đ):
Những đoạn chương trình nào sẽ bị báo lỗi khi biên dịch? Nếu có lỗi, giải thích ngắn gọn a)
b)
c)
Không báo lỗi Báo lỗi Không báo lỗi Báo lỗi Không báo lỗi Báo lỗi
Trang 2
Câu 2 (2đ): Cho đoạn chương trình sau: 1 char x; 2 char *pchar; 3 int *pint = 0x2000; int *pint1 = pint + 1; 4 *pint = 0x1234;
5 *pint1 = 0x5678; 6 pchar = (char *)pint + 1; 7 x = *pchar; a) (1đ) Đoạn chương trình trên sẽ ảnh hưởng đến các ô nhớ nào? Điền địa chỉ và giá trị của chúng vào bảng sau và giải thích ngắn gọn Địa chỉ (theo số hex) Giá trị (theo số hex)
b) (1đ) Điền giá trị của các con trỏ và biến x vào bảng sau Giải thích ngắn gọn
Giá trị (theo số hex) pint
pint1 pchar x
Không báo lỗi Báo lỗi
Trang 3
Câu 3 (6đ):
Cho sơ đồ như hình vẽ sau:
(Sinh viên xem chú thích ở cuối trang 6)
AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
ALE
A8 A9 A10 A11 A12 A13 A14 A15
/WE /RD
A13 A14 A15
AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
LATCH_LED1
LATCH_LED2
LATCH_LED2 LATCH_LED1
/WE
XTAL2 18
XTAL1 19
ALE 30 EA 31 PSEN 29
RST 9
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14
P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27
U1
AT89C51 PACKAGE=DIL40
VCC
X1
CRYSTAL
C1
33p
C2
33p
VCC
VCC
A 1 B 2 C 3
E1 6 E2 4 E3 5
Y0 15 Y1 14 Y2 13 Y3 12 Y4 11 Y5 10 Y6 9 Y7 7
U7
74LS138
SW0
SW1
SW2
SW3
D0
D1
D2
D3
D4
D5
D6 17
Q6 16 D7
OE 1 LE 11
U4
74LS373
D0
D1
D2
D3
D4
D5
D6 17
Q6 16 D7
OE 1 LE 11
U8
74LS373
VCC
VCC
2 3
1
U9:A
7402
5 6
4
U9:B
7402
Trang 4Địa chỉ của LED2 là:
Giải thích:
b) (2đ) Hoàn chỉnh module switch (switch.h và switch.c) chứa các hàm initSW và readSwitch File switch.h: #ifndef
#define
#include <reg51.h> // Khởi tạo chân port để đọc bằng cách ghi 1 vào các bộ chốt của các chân // port có giao tiếp switch void initSwitch(void); // Đọc giá trị của 4 Switch, Switch 0 có trọng số nhỏ nhất Giá trị đọc được có //tầm từ 0-15 char readSwitch(void); #endif File switch.c: #include
void initSwitch(void){
}
char readSwitch(void){
Trang 5
} c) (2đ) Hoàn chỉnh module LED (led.h và led.c) File led.h: #ifndef
#define
#include <reg51.h> //Định nghĩa 2 macro mô tả 2 con trỏ chỉ đến địa chỉ của LED1 và LED2 #define LED1
#define LED2
// Hàm displayLED nhận tham số là 1 số từ 0-15, hiển thị giá trị tham số ra 2 //LED 7 đoạn LED1 hiển thị hang chục, LED2 hiển thị hang đơn vị.
void displayLED(char number); #endif File led.c: #include
//Khai báo mảng chứa bảng mã 7 đoạn (trong bộ nhớ code) unsigned char ………… Led7SegCode[ ] =
// Định nghĩa hàm displayLED void displayLED(char number){
Trang 6
} d) (1đ) Viết module main.c đọc giá trị từ 4 Switch và hiển thị giá trị ra 2 LED Trong module main.c có sử dụng 2 module led và switch đã viết ở trên File main.c: #include
#include
void main (void) {
}
Chú thích:
Ngõ ra Q0 của 74373 nối vào thanh a của LED
…
Ngõ ra Q6 của 74373 nối vào thanh g của LED
Trang 75 0x92
Cán bộ ra đề