Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
118,49 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA THÀNH PHỐ HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ BÁO CÁO THÍ NGHIỆM VI XỬ LÝ GVHD: THỰC HIỆN: Lương Thị Thái Bình 1510226 Nguyễn Văn Chung 1410394 BÀI 1: LẬP TRÌNH GIAO TIẾP LED ĐƠN VÀ PHÍM ĐƠN THÍ NGHIỆM 1:Viết chương trình thực việc đọc liên tục trạng thái nút nhấn nối đến P1.0 hiển thị led nối chân P3.0 (bit thứ led BL202) ORG 2000H %% bắt đầu chương trình địa chỉa 2000H LOOP: %% khởi tạo vòng lặp SETB P1.0 %% set chân P1.0, nhấn nút trả MOV C, P1.0 %% đọc giá trị chân P1.0 vào bit carry MOV P3.0,C %% đọc giá trị cờ carry xuất P3.0 SJMP LOOP END %% nhảy vòng lặp %% kết thúc - LED nối vào P1.0 P3.0 bị tác động LED P1.0 bị tác động phần cứng, nhấn phím, mức điện áp P1.0 0, đầu lại LED nối với điện trở nối lên VCC nên đèn P1.0 sáng Tương tự, P3.0, đầu LED nối vào điện trở nối đến VCC, đầu lại nối đến P3.0 Khi nhấn nút, P1.0 có mức điện áp thấp, phần mềm đọc mức điện áp đặt cho P3.0 mức điện áp thấp nên đèn sáng - Tất chân P1 P3 sử dụng tất chân dùng làm chân IO THÍ NGHIỆM 2: Biên dịch thử nghiệm chương trình cho sẵn sau: ORG 2000H CPL P3.0 %% đảo bit P3.0 JMP MAIN %% nhảy khơng điều kiện chương trình main MAIN: END %% Kết thúc chương trình - Theo lý thuyết, với thạch anh 11.0592MHz, chương trình tạo sóng vng P3.0 với chu kì 6.5us - Vẽ dạng sóng: - Tần số tối đa xung tuần hồn có chu kỳ nhiệm vụ 50% đạt 153600Hz với đoạn code THÍ NGHIỆM 3: Viết chương trình tạo xung vng KHz, chu kỳ nhiệm vụ 50% P3.0 ORG 2000H CONT: CPL P3.0 %% đảo bit P3.0 ACALL DELAY05MS %% gọi chương trình delay 0.5ms SJMP CONT %% nhảy cont DELAY05MS: %% chương trình delay 0.5ms MOV R7,#230 %% move R7 giá giá trị 230 LOOP: DJNZ R7,LOOP vòng lặp %% giảm R7 xuống chưa quay trở lại RET END - Vòng trễ tạo với thời gian trễ 0.5ms Mỗi vịng lặp DJNZ có thời gian thực thi chu kì máy, chu kì máy có thời gian 12 chu kì thạch anh Gọi n số lần lặp: 0.5(10^-3)=2n.Tmáy=2n.12Txtal=24n.(1/11059200) => n=230.4 => chọn n=230 - Vẽ lại dạng sóng: - Sai số nhỏ đạt được: (230.4-230)/230.4=0.17% THÍ NGHIỆM 4: Viết chương trình Delay1sIns dùng chương trình để chớp/tắt LED đơn gắn vào P1.0 sau khoảng thời gian 1s ORG 2000H LOOP2: LOOP: %% bắt đầu vòng lặp MOV R5,#250 CPL P1.0 %% đảo bit P1.0 LOOP3: ACALL DELAY1SINS %% gọi chương trình delay1sins DJNZ R5,LOOP3 %% R5 chưa quay vòng lặp SJMP LOOP %% nhảy vòng lặp DJNZ R6,LOOP2 %% R6 chưa quay vòng lặp DELAY1SINS: MOV R7,#7 LOOP1: MOV R6,#250 DJNZ R7,LOOP1 %% R7 chưa quay vịng lặp RET END - Tính thời gian delay 1s: 1=2n.Tmáy=2n.12Txtal=24n.() => n=460800 => chọn n1=250; n2=250; n3=7 THÍ NGHIỆM 5: Viết chương trình tạo hiệu ứng quay LED: LED đơn BARLED1 sáng từ trái sang phải sau thời gian 1s lặp lại Sử dụng chương trình 1s viết ORG 2000H CPL P1.6 LOOP: %% tạo vòng lặp ACALL DELAY1SINS CPL P1.0 %% đảo bit P1.0 CPL P1.6 ACALL DELAY1SINS %%gọi lại chương trình delay1sins CPL P1.7 CPL P1.0 CPL P1.1 ACALL DELAY1SINS CPL P1.1 CPL P1.2 ACALL DELAY1SINS CPL P1.2 CPL P1.3 ACALL DELAY1SINS CPL P1.3 CPL P1.4 ACALL DELAY1SINS CPL P1.4 CPL P1.5 ACALL DELAY1SINS CPL P1.5 ACALL DELAY1SINS CPL P1.7 SJMP LOOP lặp %% nhảy lại vịng DELAY1SINS: %% chương trình delay1sins MOV R7,#7 LOOP1: MOV R6,#250 LOOP2: MOV R5,#250 LOOP3: DJNZ R5,LOOP3 DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET END - LED bên trái nối với MSB P1 BÀI 2: LẬP TRÌNH TIMER VÀ HIỂN THỊ LED ĐOẠN THÍ NGHIỆM 1: Viết chương trình tạo sóng vng KHz chân P1.0 sử dụng timer chế độ - Có dùng timer mod kết hợp vòng lặp ORG 2000H LOOP: MOV TH0,#HIGH(-461) %%nạp giá trị 461 MC cho timer (MC=1.0851us) %% bắt đầu vòng lặp CPL P1.0 %% đảo bit P1.0 MOV TL0,#LOW(-461) ACALL DELAY05MS %%gọi lại ct SETB TR0 %% cho timer0 chạy SJMP LOOP %% nhảy lại vòng lặp JNB TF0,$ %% chờ đến timer0 tràn DELAY05MS: %% ct delay 0.5ms CLR TF0 %% xóa cờ ngắt CLR TR0 %% dừng timer0 MOV TMOD,#01H %% cài đặt timer chế độ RET END - Dạng sóng bị sai số, để hạn chế sai số, ta nên tính toán giá trị nạp vào TH0 TL0 tần số xtal mạch THÍ NGHIỆM 2: Viết chương trình tạo sóng vng 10 KHz chân P1.0 sử dụng timer chế độ ORG 2000H MOV TMOD,#02H %%khai báo timer0 mode MOV TH0,#-46 %% nạp giá trị 46MC cho timer0 SETB TR0 %% chạy timer0 LOOP: %% khởi tạo vòng lặp JNB TF0,$ %% chờ cho timer tràn CLR TF0 %% xóa cờ ngắt timer CPL P1.0 %% đảo bit P1.0 SJMP LOOP %% nhảy lại vòng lặp END - Ở chế độ 2, độ trễ gây câu lệnh đảo giá trị bit gây sai số cho dạng sóng ngõ Tuy nhiên sai số khơng lớn THÍ NGHIỆM 3: Viết chương trình DisplayLed0 hiển thị lên LED đoạn số giá trị chứa ghi R0 DISPLAYLED0: %%chương trình displayled0 MOV A,R0 %% đưa giá trị R0 vào ghi A ADD A,#0E0H %% cộng E0H với R0 ( E: cho dẫn led0, R0: số BCD) MOV DPTR,#0000H %% trỏ DPTR đến địa IC 573 led đoạn MOVX @DPTR,A %% ghi giá trị IC 573 RET %% kết thúc chương trình Viết chương trình hiển thị số lên LED đoạn số cách cho R0 gọi chương trình DisplayLed0 ORG 2000H MOV R0,#9 ACALL DISPLAYLED0 DISPLAYLED0: MOV A,R0 ADD A,#0E0H MOV DPTR,#0000H MOVX @DPTR,A END %% lưu R0=9 %% gọi chương trình displayled0 THÍ NGHIỆM 4: Viết chương trình hiển thị lên LED đoạn số số từ đến sau khoảng thời gian 1s ORG 2000H MOV R0,#0 %% số LOOP: %% khởi tạo vòng lặp ACALL DISPLAYLED0 %% gọi chương trình displayled0 INC R0 %% tăng R0 lên đơn vị ACALL DELAY1S %% gọi chương trình delay1s CJNE R0,#10,LOOP %%R0 khác 10 quay lại loop để thị số MOV R0,#0 %% R0=10 nạp lại cho R0 SJMP LOOP %% quay lại vịng lặp để tiếp tục DISPLAYLED0: %% chương trình displayled0 MOV A,R0 ADD A,#0E0H MOV DPTR,#0000H MOVX @DPTR,A RET DELAY1S: %% chương trình delay1s MOV TMOD, #01H %%cài đặt timer0 mode (16 bit) MOV TH0,#HIGH(-50000) %%đặt timer0 đến tới 50000MC MOV TL0,#LOW(-50000) SETB TR0 %%cho chạy timer0 JNB TF0,$ %%chờ cho timer0 tràn CLR TF0 %%xóa cờ báo tràn CLR TR0 %%dừng timer0 DJNZ R7,TIMELOOP %%lặp lại 20 lần 0.05s cho đủ 1s RET %%kết thúc chương trình END BÀI 3: QUÉT LED ĐOẠN VÀ GIAO TIẾP LCD THÍ NGHIỆM 1: Viết chương trình DisplayLED xuất giá trị chứa ghi R0 lên LED đoạn có số thứ tự chứa ghi R1 R0 nằm tầm từ 0-9 R1 tầm từ 0-3 Sau dùng chương trình viết chương trình xuất giá trị lên LED đoạn số ORG 2000H MOV R1,#03 ;R1 chứa vị trí led MOV R0,#07 ;R0 chứa giá trị led LAP: MOV A,R1 MOV DPTR,#TABLE MOVC A,@A+DPTR ORL A,R0 MOV DPTR,#0 MOVX @DPTR,A SJMP LAP TABLE: DB 0E0H,0D0H,0B0H,70H ;bảng giá trị chọn led END THÍ NGHIỆM 2: Viết chương trình hiển thị số lên LED7 đoạn 0, sau 1s hiển thị số lên LED đoạn 1, sau 1s hiển thị số lên LED đoạn 2, sau 1s hiển thị số lên LED đoạn Quá trình lặp lặp lại Việc hiển thị sử dụng chương trình DisplayLED viết Giảm thời gian trễ xuống cịn 100 ms Quan sát tượng Tính tốn thời gian trễ cho khơng cịn thấy LED nhấp nháy áp dụng vào chương trình Giảm thời gian trễ xuống (không sử dụng hàm delay) Quan sát tượng ORG 2000H MAIN: MOV R1,#00H MOV R0,#04H ACALL XUAT ACALL DL MOV R1,#01H MOV R0,#03H ACALL XUAT ACALL DL MOV R1,#02H MOV R0,#02H ACALL XUAT ACALL DL MOV R1,#03H MOV R0,#01H ACALL XUAT ACALL DL SJMP MAIN ; -;chương trình xuất giá trị chứa R0 vị trí led chứa R1 XUAT: MOV A,R1 MOV DPTR,#TABLE MOVC A,@A+DPTR ORL A,R0 MOV DPTR,#0 MOVX @DPTR,A RET TABLE: DB 0E0H,0D0H,0B0H,70H ; -; chương trình tạo trễ quét led DL: MOV TMOD,#10H MOV TL1,#LOW(-1000) MOV TH1,#HIGH(-1000) SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 RET END - Khi giảm thời gian delay 100ms, LED đoạn chớp tắt nhanh - Khi loại bỏ hàm delay, LED đoạn không quan sát led sáng - Mắt người có tượng lưu ảnh, hình ảnh chuyển động với tốc độ 24 khung hình giây khiến mắt ta phân biệt nhấp nháy ảnh Vậy LED cần có thời gian sáng chu kì qt là: 1/(4.25)=10ms THÍ NGHIỆM 3: Download chương trình mẫu LCD.A51 trang web mơn điện tử Biên dịch chạy thử chương trình Sửa chương trình để hiển thị tên sinh viên lên hàng đầu - Tại cuối chương trình, sau nhãn MESSAGE, sửa kí tự dấu “ ” thành tên sinh viên ORG 2000H RS BIT P3.5 EN BIT P3.3 MAIN: LCALL KHOIDONGLCD MOV A,#0 LAP: PUSH ACC MOV DPTR,#TABLE MOVC A,@A + DPTR JZ EXIT LCALL XUAT1KYTU POP ACC INC A SJMP LAP EXIT: SJMP $ ; NHAPLENH: MOV DPTR,#6000H CLR EN SETB EN CLR RS MOVX @DPTR,A CLR EN LCALL DL5MS RET ; XUAT1KYTU: MOV DPTR,#6000H MOV A,#'F' LJMP EXIT TT16: MOV A,#255 LJMP EXIT RET ; -DL50MS: MOV TMOD,#01H MOV TL0,#LOW(-50000) MOV TH0,#HIGH(-50000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RET ; -;chương trình xuất ký tự TX WRITETEXT: MOV R0,A ;chuyền ký tự A vào R0 MOV SBUF, A ;phát JNB TI, $ ; chờ cờ báo phát rỗng CLR TI ; chuẩn bị phát byte kế RET END BÀI 5: LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ ADC THÍ NGHIỆM 1: Viết chương trình phát chuỗi ký tự “Hello, world” lên máy tính thơng qua HyperTerminal với tốc độ baud 19200 pbs SW 310 (gắn vào P1.0) nhấn ORG 2000H MOV TMOD,#20H MOV TH1,#-3 SETB TR1 MOV SCON,#42H MOV PCON,#80H LAP: MOV R7,#0 MOV DPTR,#TABLE TTUC: JB P1.0,$ LCALL DL100MS JNB P1.0,$ MOV A,R7 INC R7 MOVC A,@A+DPTR ;cài đặt port nối tiếp vào tốc độ baud ;chờ phím nhấn ; chống rung phím ;chờ phím nhả JZ LAP LCALL XUAT SJMP TTUC ; ; xuất port nt XUAT: JNB TI,$ CLR TI MOV SBUF,A RET ; DL100MS: MOV R4,#2 LAP1: MOV TMOD,#01H MOV TL0,#LOW(-50000) MOV TH0,#HIGH(-50000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ R4,LAP1 RET ; TABLE: DB "HELLO,WORLD",0 END THÍ NGHIỆM 2: Viết chương trình nhận ký tự từ máy tính gửi đến EME-MC8 thơng qua HyperTerminal (bằng cách gõ ký tự bàn phím chương trình HyperTerminal) hiển thị lên LCD sau: Nếu ký tự chữ hiển thị lên LCD; Enter xuống hàng; ESC xóa hình LCD; Backspace xóa ký tự bên trái dấu nháy ORG 2000H RS BIT P3.5 EN BIT P3.3 MOV TMOD,#20H MOV TH1,#-3 MOV SCON,#50H MOV PCON,#80H SETB TR1 CLR F0 LCALL KHOIDONGLCD ;bien trang thai hang(enter) MAIN: LCALL INCHAR LCALL KTRACHAR LCALL KTRAENTER LCALL KTRAESC LCALL KTRABACK SJMP MAIN ; KTRABACK: CJNE A,#08H,OUT1 LCALL XOAKYTU OUT1: RET ; -XOAKYTU: DEC R1 ; chuyển trỏ vị trí vị trí trước JB F0,H1 ; kiểm tra hàng trỏ MOV R0,#00H SJMP GOTO H1: MOV R0,#01H GOTO: LCALL GOTOXY MOV A,#0FEH ;thay ký tự ký tự trắng LCALL XUAT1KYTU DEC R1 ; trỏ tự động tăng lên nên phải giảm vị trí LCALL GOTOXY RET ; KTRAENTER: CJNE A,#13H,OUT2 LCALL CHUYENHANG OUT2: ;kiểm tra mã ASCII phím enter RET ; CHUYENHANG: CPL F0 ; đảo cờ vị trí hàng trỏ JB F0,HANG1 ;kiem tra vi tri tro LCALL KHOIDONGLCD MOV R1,#0 SJMP OUT4 HANG1: MOV R0,#01 ;cho tro len hang tren MOV R1,#00 LCALL GOTOXY OUT4: RET ; KTRAESC: CJNE A,#27H,OUT3 ; ktra mã ASCII phím ESC LCALL CLRLCD OUT3: RET ; -CLRLCD: MOV A,#01H LCALL NHAPLENH MOV R1,#0 ; khoi dong lai đếm vị trí cột trỏ tên LCD RET ; KTRACHAR: CJNE A,#30H,$+3 JC THOAT CJNE A,#7FH,$+3 JNC THOAT ; nhận ký tự mã ASCII khoảng hiển thị CLR C LCALL XUAT1KYTU THOAT: RET ; INCHAR: JNB RI,$ ; nhận ký tự từ port nối tiếp CLR RI MOV A,SBUF RET ; NHAPLENH: MOV DPTR,#6000H CLR EN SETB EN CLR RS MOVX @DPTR,A CLR EN LCALL DL5MS RET ; XUAT1KYTU: MOV DPTR,#6000H CLR EN SETB EN SETB RS MOVX @DPTR,A CLR EN LCALL DL5MS INC R1 RET ; -DL5MS: MOV TMOD,#10H MOV TL1,#LOW(-5000) MOV TH1,#HIGH(-5000) SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 RET ; -KHOIDONGLCD: MOV A,#01H LCALL NHAPLENH MOV A,#0EH LCALL NHAPLENH MOV A,#02H LCALL NHAPLENH MOV A,#06H LCALL NHAPLENH MOV A,#38H LCALL NHAPLENH RET ; GOTOXY: PUSH ACC MOV A,R0 MOV DPTR,#TABLE MOVC A,@A+DPTR ORL A,R1 LCALL NHAPLENH POP ACC TABLE: DB 80H,0C0H RET END