De thi vi xử lý Bách Khoa HCM

De thi vi xử lý Bách Khoa HCM

Nội dung Text: Đề thi cuối kỳ học kỳ 2 năm học 2015 môn Vi xử lý - Trường Đại học Sư phạm Kỹ thuật Hồ Chí Minh

  1. TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT ĐỀ THI CUỐI KỲ HỌC KỲ2 - NĂM HỌC 2015 THÀNH PHỐ HỒ CHÍ MINH Môn: Vi xử lý (Điện) KHOA ĐIỆN-ĐIỆN TỬ Mã môn học: 1146050 Đề số/Mã đề: 01 Đề thi có 02 trang. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Thời gian: 90 phút. ------------------------- Sinh viên chỉ được tham khảo một tờ giấy A4 viết tay Câu 1: ( 3 điểm) Cho vi điều khiển Pic16F887 kết nối với một cảm biến A (tại chân RB0), mạch điều khiển đèn B sử dụng điện áp 220VAC (tại chân RB1), mạch điều khiển loa 32 Ohm, 0.5W (tại chân RB2) và một nút nhấn thường hở tên là RST (tại chân RB3). Vi điều khiển sử dụng thạch anh 12 Mhz. Khi có người xuất hiện trong vùng hoạt động của cảm biến A, ngõ ra cảm biến lên mức 5V (bình thường không có người ngõ ra 0V). Vi điều khiển xuất mức logic 1 để điều khiển đèn B sáng, mức logic 0 để điều khiển đèn B tắt. Ban đầu đèn tắt, loa không kêu. Nếu có người xuất hiện trong vùng hoạt động của cảm biến ngay lập tức đèn B sáng, loa được điều khiển phát ra âm thanh với tần số chính xác 5Khz, Duty Cycle = 40% (dùng timer tạo xung). Trạng thái này được duy trì cho dù người đó có còn trong vùng hoạt động của cảm biến nữa hay không. Bất cứ khi nào nhấn nút RST thì đèn tắt, loa không kêu. a. Vẽ lưu đồ chương trình (1 điểm) b. Viết chương trình cho vi điều khiển thực hiện đúng yêu cầu trên (2 điểm) Câu 2: (3.5 điểm) Cho hệ thống đếm sản phẩm: Vi điều khiển Pic16F887 kết nối một cảm biến phát hiện sản phẩm, LCD 16x2, hai nút nhấn thường hở UP, DW. Bình thường ngõ ra cảm biến là 0V, khi có sản phẩm chắn ngang cảm biến ngõ ra sẽ lên mức 5V. Giao diện hiển thị của LCD như sau: GIA TRI DAT: AA SO SAN PHAM: BB Giá trị đặt AA là số sản phẩm của một thùng cần đóng gói. Giá trị AA có thể điều chỉnh được bởi hai nút nhấn UP (tăng 1 đơn vị), DW (giảm 1 đơn vị). AA nằm trong phạm vi [20- 30]. Mặc định AA = 20. Giá trị BB là số phẩm đếm được. Khi sản phẩm đếm được BB bằng AA thì LCD sẽ nhấp nháy (sáng 0.5s, tắt 0.5s) chỉ hai dòng chữ như sau: DA DU SO LUONG DE NGHI DONG GOI a. Vẽ mạch nguyên lý kết nối (1 điểm) (phần cứng kết nối sinh viên tùy chọn chân thích hợp, LCD có thể giao tiếp với vi điều khiển theo kiểu 8bit dữ liệu hoặc 4 bit dữ liệu. Khối cảm biến chỉ cần vẽ khối, không cần vẽ chi tiết mạch cảm biến). b. Viết chương trình thực hiện yêu cầu trên (2.5 điểm) Câu 3: (3.5 điểm) Cho hai vi điều khiển Pic16F887 (được đặt tên VDKA và VDKB) giao tiếp truyền dữ liệu nối tiếp bất động bộ, 8 bit dữ liệu, tốc độ baud = 2400. Cả hai vi điều khiển đều sử dụng thạch anh 12MHz. Số hiệu: BM1/QT-PĐBCL-RĐTV Trang: 1/2
  2. VDKA kết nối với hai cảm biến nhiệt độ LM35 tại chân AN3 (kênh 3), AN4 (kênh 4). Đầu tiên VDKA đo nhiệt độ kênh 3 và gởi dữ liệu qua VDKB, một giây sau VDKA đo nhiệt độ kênh 4 và gởi dữ liệu qua VDKB, một giây sau nữa thì VDKA lại quay lại đo nhiệt độ kênh 3 và gởi dữ liệu đi… Quá trình cứ lặp đi lặp lại. Phạm vi nhiệt độ đo từ 0-990C. VDKB kết nối với 3 led 7 đoạn được đánh số 1, 2, 3 (ba led 7 đoạn kết nối theo kiểu trực tiếp đến vi điều khiển). Led 3 hiển thị kênh nhiệt độ đang đo, Led 1,2 hiển thị giá trị nhiệt độ đo được. Dữ liệu kênh đo và nhiệt độ đo được nhận từ VDKA gởi qua. Yêu cầu: a. Vẽ mạch nguyên lý kết nối (1 điểm) b. Viết chương trình cho VDKA (1.5 điểm) c. Viết chương trình cho VDKB (1 điểm) Ghi chú: Cán bộ coi thi không được giải thích đề thi. Chuẩn đầu ra của học phần (về kiến thức) Nội dung kiểm tra [G 4.1]: Hiểu và ứng dụng được hệ thống vi điều khiển Câu 1 vào thực tế. [G 1.3]: Thiết kế và lập trình điều khiển dùng ngôn ngữ C Câu 2 cho các hệ thống điều khiển. [G 2.3]: Có kỹ năng thiết kế và xây dựng qui trình điều Câu 3 khiển cho hệ thống dùng vi điều khiển PIC 16F887. Ngày tháng năm 20 Thông qua bộ môn (ký và ghi rõ họ tên) Số hiệu: BM1/QT-PĐBCL-RĐTV Trang: 2/2
  3. ĐÁP ÁN ĐỀ THI CUỐI KỲ HỌC KỲ2 - NĂM HỌC 2015 Môn: Vi xử lý (Điện) Mã môn học: 1146050 CÂU 1: 3 ĐIỂM a. Vẽ lưu đồ chương trình (1 điểm) - Về hình thức: lưu đồ có đầy đủ các phần Bắt đầu, xử lý và kết thúc đúng ký hiệu chuẩn : 0.25điểm. - Có nhiều cách vẽ lưu đồ khác nhau, tùy theo thuật toán xử lý của sinh viên. Nếu lưu đồ đúng trọn vẹn nội dung thuật toán: 0.75 điểm. Các mức độ thấp hơn sẽ do giáo viên chấm quyết định. b. Chương trình (2 điểm) Sinh viên có thể viết chương trình theo lưu đồ giải thuật, hoặc nếu không vẽ được lưu đồ, chương trình vẫn được chấm điểm độc lập. Sinh viên có thể dùng ngắt do tràn timer để tạo xung hoặc dùng delay timer để tạo xung. - Từ thạch anh 12Mhz, sinh viên tính ra được số xung timer sẽ đếm khi xung ở mức cao và ở mức thấp, viết được chương trình tạo xung: 0.75 điểm. - Khai báo thư viện, định nghĩa các chân kết nối hợp lý: 0.25 điểm. - Thiết lập được trạng thái ban đầu của đèn, loa : 0.25 điểm. - Viết chương trình xử lý điều khiển đèn, loa khi có người: 0.75 điểm. (Nếu có sử dụng ngắt, nếu khai báo đúng ngắt: 0.25 điểm). Dưới đây là một chương trình mẫu, sinh viên có thể tham khảo: #INCLUDE #FUSES NOWDT,HS,PUT,NOPROTECT,NOLVP #USE DELAY(CLOCK=12M) #DEFINE SENSOR PIN_B0 #DEFINE LAMP PIN_B1 #DEFINE SPEAKER PIN_B2 #DEFINE RST PIN_B3 #INT_TIMER1 VOID TAOXUNG5KH() { IF (INPUT_STATE(SPEAKER)==0) { SET_TIMER1(65296);} ELSE { SET_TIMER1(65176);} OUTPUT_TOGGLE(SPEAKER); } VOID MAIN() { SET_TRIS_B(0B00001001); ENABLE_INTERRUPTS(GLOBAL); ENABLE_INTERRUPTS(INT_TIMER1); TD: SETUP_TIMER_1(T1_DISABLED); Số hiệu: BM1/QT-PĐBCL-RĐTV Trang: 3/2
  4. OUTPUT_LOW(LAMP); OUTPUT_LOW(SPEAKER); LAP: IF (INPUT(SENSOR)==1) { OUTPUT_HIGH(LAMP); SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1); SET_TIMER1(65176); WHILE(INPUT(RST)==1) {} GOTO TD; } GOTO LAP; } CÂU 2: 3.5 điểm a. Vẽ mạch nguyên lý kết nối: 1 điểm. Sinh viên có thể chọn cách kết nối phù hợp. - Vẽ kết nối đúng với LCD : 0.5 điểm. - Vẽ kết nối cho vdk các chân cấp nguồn, reset, thạch anh, nút nhấn, cảm biến sản phẩm: 0.5 điểm - Dưới đây là một mạch kết nối tham khảo, chân vcc và gnd của vi điều khiển được lược bỏ do vẽ bằng protues, sinh viên phải vẽ đầy đủ. b. Viết chương trình: 2.5 điểm - Viết được cái thư viện, khai báo chân sử dụng: 0.25 điểm - Khai báo được cái biến phục vụ cho hiển thị LCD và thư viện LCD: 0.25 điểm - Cấu hình timer thích hợp đếm xung ngoài, hệ số chia, cho phép timer đếm: 0.25 điểm - Viết chương trình LCD hiển thị được cái dòng chữ cố định: “GIA TRI DAT:”, “SO SAN PHAM:” : 0.25 điểm - Viết chương trình xử lý UP-DW: 0.5 điểm. - Viết chương trình xử lý chớp tắt dòng chữ trên LCD khi AA=BB: 0.5 điểm Số hiệu: BM1/QT-PĐBCL-RĐTV Trang: 4/2
  5. - Lắp ráp hoàn chỉnh chương trình: 0.5 điểm. Chương trình tham khảo bên dưới: #INCLUDE #FUSES NOWDT,HS,PUT,NOPROTECT,NOLVP #USE DELAY(CLOCK=20M) #DEFINE OUTPUT_LCD OUTPUT_D #DEFINE CLEAR 0X01 #DEFINE UP PIN_B0 #DEFINE DW PIN_B1 #INCLUDE CONST UNSIGNED INT8 MALCD[10]={"0123456789"}; CONST UNSIGNED INT8 LINE1_1[13]={"GIA TRI DAT: "}; CONST UNSIGNED INT8 LINE2_1[13]={"SO SAN PHAM: "}; CONST UNSIGNED INT8 LINE1_2[16]={" DA DU SO LUONG "}; CONST UNSIGNED INT8 LINE2_2[16]={"DE NGHI DONG GOI"}; UNSIGNED INT8 AA,BB,K; VOID HTHI_AA() { LCD_COMMAND(0X8D); LCD_DATA(MALCD[AA/10]); LCD_DATA(MALCD[AA%10]); } VOID HTHI_BB() { LCD_COMMAND(0XCD); LCD_DATA(MALCD[BB/10]); LCD_DATA(MALCD[BB%10]); } VOID MAIN() { SET_TRIS_D(0X00); SET_TRIS_E(0X00); SET_TRIS_B(0XFF); PORT_B_PULLUPS(TRUE); SETUP_TIMER_0(T0_EXT_H_TO_L|T0_DIV_1); SET_TIMER0(0); LCD_SETUP(); LCD_COMMAND(0X80); FOR(K=0;K
  6. FOR(K=0;K
  7. CÂU 3: 3.5 điểm a. Vẽ mạch nguyên lý: 1 điểm - Vẽ được vi điều khiển A kết nối 2 cảm biến nhiệt độ đúng chân yêu cầu, cấp nguồn, thạch anh, reset đầy đủ, hai chân truyền dữ liệu qua VDKB: 0.5 điểm - Vẽ được VDKB kết nối các chân cần thiết, kết nối đến 3 led 7 đoạn, ta dùng hai port còn trống đủ chân kết nối 2 led hiển thị nhiệt độ, led hiển thị kênh chỉ hiển thị hai kênh 3,4 nên ta kết nối nó với port ko còn đáp ứng đủ chân, ở đây dùng Port A. Port A mất hai chân kết nối thạch anh, do đó chân G của led 7 đoạn này ta luôn nối GND, chân DP ta luôn nối VCC (bởi vì mã 7 đoạn của số 3, 4 hai đoạn này giống nhau): 0.5 điểm b. Chương trình cho VDKA - Khai báo đầy đủ thư viện, cầu chì, device adc, rs232.. : 0.5 điểm - Khai báo đúng các hàm thiết lập ADC: 0.25 điểm - Thực hiện và chuyển đổi ADC của từng kênh gởi đi, gởi thông tin kênh và thông tin nhiệt độ, cách nhau 1s: 0.75 điểm Chương trình tham khảo bên dưới #INCLUDE #DEVICE ADC=10 #FUSES NOWDT,HS,PUT,NOPROTECT,NOLVP #USE DELAY(CLOCK=12M) #USE RS232(baud=2400, xmit=PIN_C6,rcv=PIN_C7) UNSIGNED INT8 KENH, ND; UNSIGNED INT16 DLADC; VOID MAIN() { SETUP_ADC(ADC_CLOCK_INTERNAL); SETUP_ADC_PORTS(SAN3|SAN4|VSS_VDD); WHILE(TRUE) { FOR(KENH=3;KENH
  8. PUTC(KENH); PUTC(ND); DELAY_MS(1000); } } } c. Chương trình cho VDKB:1 điểm - Khai báo đúng thư viện, các biến..: 0.25 điểm - Viết được chương trình hiển thị 3 led 7 đoạn:0.25 điểm - Viết chương trình nhận lần lượt thông tin từ VDKB gởi qua: 0.5 điểm Chương trình tham khảo bên dưới #INCLUDE #FUSES NOWDT,HS,PUT,NOPROTECT,NOLVP #USE DELAY(CLOCK=12M) #USE RS232(baud=2400, xmit=PIN_C6,rcv=PIN_C7) UNSIGNED INT8 KENH, ND; CONST UNSIGNED INT8 MA7DOAN[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; VOID HIENTHI() { OUTPUT_A(MA7DOAN[KENH]); OUTPUT_B(MA7DOAN[ND/10]); OUTPUT_D(MA7DOAN[ND%10]); } VOID MAIN() { SET_TRIS_A(0X00); SET_TRIS_B(0X00); SET_TRIS_D(0X00); WHILE(TRUE) { IF(KBHIT()) { KENH=GETC(); //WHILE(KBHIT()==0) {} ND=GETC(); HIENTHI(); } } } Giảng viên soạn đáp án Nguyễn Văn Hiệp Số hiệu: BM1/QT-PĐBCL-RĐTV Trang: 8/2