Đề thi lập trình nhúng giữa kì 2011
ĐỀ 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) Họ và tên:…………………………………. MSSV:………………… Trang - 1 - 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 d) 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 Họ và tên:…………………………………. MSSV:………………… Trang - 2 - Không báo lỗi Báo lỗi 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_LED2LATCH_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 3 Q0 2 D1 4 Q1 5 D2 7 Q2 6 D3 8 Q3 9 D4 13 Q4 12 D5 14 Q5 15 D6 17 Q6 16 D7 18 Q7 19 OE 1 LE 11 U4 74LS373 D0 3 Q0 2 D1 4 Q1 5 D2 7 Q2 6 D3 8 Q3 9 D4 13 Q4 12 D5 14 Q5 15 D6 17 Q6 16 D7 18 Q7 19 OE 1 LE 11 U8 74LS373 VCC VCC 2 3 1 U9:A 7402 5 6 4 U9:B 7402 LED1 LED2 Họ và tên:…………………………………. MSSV:………………… Trang - 3 - a) (1đ) Tìm địa chỉ của LED1 và LED2 Địa chỉ của LED1 là: Đị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){ Họ và tên:…………………………………. MSSV:………………… Trang - 4 - } 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){ Họ và tên:…………………………………. MSSV:………………… Trang - 5 - } 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 Digit Led 7 Seg Code 0 0xC0 1 0xF9 2 0xA4 3 0xB0 4 0x99 Họ và tên:…………………………………. MSSV:………………… Trang - 6 - 5 0x92 6 0x82 7 0xF8 8 0x80 9 0x90 Cán bộ ra đề Họ và tên:…………………………………. MSSV:………………… Trang - 7 - . ĐỀ 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. 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. 0x99 Họ và tên:…………………………………. MSSV:………………… Trang - 6 - 5 0x92 6 0x82 7 0xF8 8 0x80 9 0x90 Cán bộ ra đề Họ và tên:…………………………………. MSSV:………………… Trang - 7 -