THÍ NGHIỆM VI XỬ LÝ VỚI EMEMC8

40 186 0
THÍ NGHIỆM VI XỬ LÝ VỚI EMEMC8

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÀI 1: THÍ NGHIỆM VỚI NÚT NHẤN VÀ LED ĐƠN THÍ NGHIỆM 1: Viét chương trình liên tục đọc trạng thái của nút nhấn được nối đến P1.0 và hiển thị ra Led được nối tại chân P1.1 ( bit thứ nhất của Led thanh BL202)BÀI 1: THÍ NGHIỆM VỚI NÚT NHẤN VÀ LED ĐƠN THÍ NGHIỆM 1: Viét chương trình liên tục đọc trạng thái của nút nhấn được nối đến P1.0 và hiển thị ra Led được nối tại chân P1.1 ( bit thứ nhất của Led thanh BL202)

THÍ NGHIỆM VI XỬ VỚI EME-MC8 BÀI 1: THÍ NGHIỆM VỚI NÚT NHẤN VÀ LED ĐƠN THÍ NGHIỆM 1: Viét chương trình liên tục đọc trạng thái nút nhấn nối đến P1.0 hiển thị Led nối chân P1.1 ( bit thứ Led BL202) MAIN: ORG 2000H MOV C,P1.0 MOV P1.1,C SJMP MAIN END THÍ NGHIỆM 2: Viết chương trình tạo xung vuông 1Hz nối đến chân P1.0 MAIN: LAP1: LAP: ORG 2000H CPL P1.0 MOV R5,#10 MOV R6,#100 MOV R7,#250 DJNZ R7,$ DJNZ R6,LAP DJNZ R5,LAP1 SJMP MAIN END Thay đổi tần số xung vuông thành 0.5Hz với chu kỳ nhiệm vụ 30% MAIN: LAP1: LAP: ORG 2000H SETB P1.0 MOV R5,#30 MOV R6,#100 MOV R7,#100 DJNZ R7,$ DJNZ R6,LAP DJNZ R5,LAP1 CLR P1.0 MOV R5,#70 LOOP1: LOOP: MOV R6,#100 MOV R7,#100 DJNZ R7,$ DJNZ R6,LOOP DJNZ R5,LOOP1 SJMP MAIN END THÍ NGHIỆM 3: Viết chương trình tạo xung vuông 1Hz dùng Timer0 ( không dung ngắt) LOOP: LAP: ORG 2000H MOV TMOD,#01H MOV R7,#10 CLR TR0 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 JNB TF0,$ CLR TF0 DJNZ R7,LAP CPL P1.0 SJMP LOOP END Dùng ngắt Timer để tạo xung vuông 1Hz MAIN: ORG 2000H LJMP MAIN ORG 200BH LJMP ISR_T0 MOV TMOD,#01H MOV R7,#10 CLR TR0 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 MOV IE,#82H SJMP $ ISR_T0: CLR TR0 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) EXIT: SETB TR0 DJNZ R7,EXIT CPL P1.0 MOV R7,#10 RETI END THÍ NGHIỆM 4: Viết chương trình làm cho led nối đến chân P1.0 chớp tắt với tần số tăng ( giảm) cách nhấn nút nối đến chân P1.1 ( P1.2 ) Chu kỳ chớp tắt trung bình chọn 1s ORG 2000H MOV 31H,#100;TAO XUNG 0.1Hz MOV 32H,#20 ;TAO XUNG 0.5Hz MOV 33H,#10 ;TAO XUNG 1Hz MOV 34H,#5 ;TAO XUNG 2Hz MOV 35H,#4 ;TAO XUNG 2.5Hz MOV 36H,#2 ;TAO XUNG 5Hz MOV TMOD,#01H MOV R0,#33H LOOP: JNB P1.1,LOOP1 ;TANG TAN SO JNB P1.2,LOOP2 ;GIAM TAN SO CALL DELAY CPL P1.0 SJMP LOOP LOOP1: TANG: LOOP2: GIAM: DELAY: LAP: JNB P1.1,$ INC R0 CJNE R0,#37H,TANG MOV R0,#33H SJMP LOOP JNB P1.2,$ DEC R0 CJNE R0,#30H,GIAM MOV R0,#33H SJMP LOOP MOV A,@R0 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) BÀI TẬP THÊM : SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ ACC,LAP RET END 1) Viết chương trình thực cổng logic XOR ngõ vào KO_DOI: ORG 2000H MOV C,P1.1 JNB P1.0,KO_DOI CPL C MOV P1.5,C SJMP $ END 2) Viết chương trình thực mạch sau: KO_DOI: ORG 2000H MOV C,P1.1 JNB P1.0,KO_DOI CPL C ANL C,P1.2 MOV P1.5,C SJMP $ END 3) Viết chương trình thực mạch đèn chạy Port1: STTTTTTT  SSTTTTTT  SSSTTTTT  …SSSSSSSS  TTTTTTTT Biết hoàn thành chu kỳ 4.5s ORG 2000H MOV R0,#01111111B LAP: MOV A,#01111111B LOOP: MOV P1,A ACALL DELAY_500MS CJNE A,#00H,SANG MOV P1,#0FFH ACALL DELAY_500MS SJMP LAP SANG: RR A ANL A,R0 SJMP LOOP DELAY_500MS: MOV R7,#5 DL1: MOV R6,#200 DL: MOV R5,#250 DJNZ R5,$ DJNZ R6,DL DJNZ R7,DL1 RET END BÀI 2: THÍ NGHIỆM HIỂN THỊ DÙNG LED ĐOẠN THÍ NGHIỆM 1: Viết chương trình thực đếm từ đến hiển thị lên led đoạn, lần cách 2s ORG 2000H MOV A,#0 MOV R7,A MOV DPTR,#TABLE MOVC A,@A+DPTR MOV DPTR,#0000H MOVX @DPTR,A MOV A,R7 INC A ACALL DELAY_2S CJNE A,#10,LAP SJMP LOOP LOOP: LAP: TABLE: DB 0E0H,0E1H,0E2H,0E3H,0E4H,0E5H,0E6H,0E7H,0E8H,0E9H DELAY_2S: MOV TMOD,#01H MOV R7,#40 LAP1: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 DJNZ R7,LAP1 RET END THÍ NGHIỆM 2: Viết chương trình hiển thị giá trị 1234 lên led đoạn LOOP: LAP: ORG 2000H MOV A,#0 MOV R7,A MOV DPTR,#TABLE MOVC A,@A+DPTR MOV DPTR,#0000H MOVX @DPTR,A MOV A,R7 INC A ACALL DELAY_3MS CJNE A,#4,LAP TABLE: DB DELAY_3MS: SJMP LOOP 071H,0B2H,0D3H,0E4H MOV TMOD,#01H MOV TH0,#HIGH(-3000) MOV TL0,#LOW(-3000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET END THÍ NGHIỆM 3: Viết chương trình hiển thị giá trị nhị phân ghi R7 lên led đoạn LOOP: DELAY_3MS: ORG 2000H MOV R7,#255 MOV B,#10 MOV A,R7 DIV AB MOV R4,B MOV B,#10 DIV AB ORL A,#0B0H MOV DPTR,#0H MOVX @DPTR,A ACALL DELAY_3MS MOV A,B ORL A,#0D0H MOVX @DPTR,A ACALL DELAY_3MS MOV A,R4 ORL A,#0E0H MOVX @DPTR,A ACALL DELAY_3MS SJMP LOOP MOV TMOD,#01H MOV TH0,#HIGH(-3000) MOV TL0,#LOW(-3000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET END BÀI TẬP THÊM: 1) Đếm số lần nhấn phìm P1.0 kết xuất led đoạn hàng chục & đơn vị ( giả sử số lần nhấn nút nhỏ 100 ) ORG 2000H SETB P1.0 MOV R7,#0 MOV R3,#30 MOV R4,#100 MOV R5,#100 ; khởi động giá trị R3,R4,R5tạo delay để chống rung phím MOV A,#0 MOV DPTR,#0000H SJMP LOOP LAP: INC A MOV R7,A LOOP: MOV B,#10 DIV AB MOV R6,B MOV B,#10 DIV AB ORL A,#0B0H MOVX @DPTR,A ACALL DELAY_3MS MOV A,B ORL A,#0D0H MOVX @DPTR,A ACALL DELAY_3MS MOV A,R6 ORL A,#0E0H MOVX @DPTR,A ACALL DELAY_3MS MOV A,R7 JB P1.0, LOOP DJNZ R3,LOOP MOV R3,#30 DJNZ R4,LOOP MOV R3,#30 MOV R4,#100 DJNZ R5,LOOP MOV R3,#30 MOV R4,#100 MOV R5,#100 ; kiểm tra có ấn nút hay chưa JNB P1.0, LOOP SJMP LAP DELAY_3MS: ; kiểm tra thả nút ấn hay chưa MOV TMOD,#01H MOV TH0,#HIGH(-3000) MOV TL0,#LOW(-3000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET END 2) Viết chương trình thực đồng hồ hẹn với thời gian phút, từ phút 59 giây  phút 00 giây ORG 2000H MOV R0,#0B2H MOV R1,#59 MOV R5,#100 ;khởi động giá trị R5 để tạo trễ 100*(3ms+3ms+4ms)=1s LOOP: MOV DPTR,#0000H MOV A,R0 MOVX @DPTR,A ACALL DELAY_4MS MOV B,#10 MOV A,R1 DIV AB ORL A,#0D0H MOVX @DPTR,A ACALL DELAY_3MS MOV A,B ORL A,#0E0H MOVX @DPTR,A ACALL DELAY_3MS DJNZ R5,LOOP MOV R5,#100 DEC R1 CJNE R1,#0FFH,LOOP ; kiểm tra hết phút hay chưa MOV R1,#59 DEC R0 CJNE R0,#0AFH,LOOP ; kiểm tra hết phút hay chưa MOV R0,#0B2H SJMP LOOP DELAY_3MS: MOV TMOD,#01H MOV TH0,#HIGH(-3000) MOV TL0,#LOW(-3000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET DELAY_4MS: MOV TMOD,#01H MOV TH0,#HIGH(-4000) MOV TL0,#LOW(-4000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET END LOOP: ORG 2000H MOV 30H,#03H MOV 31H,#0EDH MOV 32H,#0EEH MOV 33H,#0EEH MOV 34H,#0EDH MOV 35H,#03H MOV 36H,#0FFH MOV 37H,#0FFH ACALL HT_ONHO SJMP LOOP HT_ONHO: LAP: MOV R1,#8 MOV A,#00000001B MOV R0,#30H ACALL HT_COT PUSH ACC CLR A MOV A,@R0 ACALL HT_HANG INC R0 POP ACC RL A DJNZ R1, LAP RET HT_COT: PUSH DPH PUSH DPL MOV DPTR,# 0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,# 0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: MOV R7,#5 DL: MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END Dùng chương trình hiển thị chữ B LOOP: ORG 2000H MOV 30H,#00H MOV 31H,#76H MOV 32H,#76H MOV 33H,#76H MOV 34H,#89H MOV 35H,#0FFH MOV 36H,#0FFH MOV 37H,#0FFH ACALL HT_ONHO SJMP LOOP HT_ONHO: LAP: MOV R1,#8 MOV A,#00000001B MOV R0,#30H ACALL HT_COT PUSH ACC CLR A MOV A,@R0 ACALL HT_HANG INC R0 POP ACC RL A DJNZ R1, LAP RET HT_COT: PUSH DPH PUSH DPL MOV DPTR,# 0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,# 0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: DL: MOV R7,#5 MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END BÀI TẬP THÊM : Cho hiển thị chạy chữ A B C led ma trận ORG 2000H MOV R4,#10 MOV R0,#0 MOV DPTR,#CHAR MOV R5,#32 LOOP1: MOV R2,DPH MOV R3,DPL LOOP: MOV DPH,R2 MOV DPL,R3 MOV R1,#8 MOV A,#00000001B LAP: ACALL HT_COT PUSH ACC CLR A MOVC A,@A+DPTR ACALL HT_HANG INC DPTR POP ACC RL A DJNZ R1, LAP DJNZ R4,LOOP MOV R4,#10 INC R0 MOV A,R0 MOV DPTR,#CHAR ADD A,DPL MOV DPL,A DJNZ R5,LOOP1 SJMP TT CHAR: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, TT: 0FFH,0FFH,81H,7EH,7EH,7EH,0BDH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH,0FFH HT_COT: PUSH DPH PUSH DPL MOV DPTR,#0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,#0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: DL: MOV R7,#5 MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END BÀI 7: THÍ NGHIỆM VỚI ĐỘNG CƠ DC THÍ NGHIỆM 1: Viết chương trình cho phép động chạy theo chiều thuận vòng 2s , nghỉ 2s,chạy theo chiều ngược 2s, nghỉ 2s lặp lại LAP: ORG 2000H CLR A MOV TMOD,#10H MOV DPTR,#0E000H ACALL CHIEUTHUAN ACALL DELAY_2S ACALL NGHI ACALL DELAY_2S ACALL CHIEUNGHICH ACALL DELAY_2S ACALL NGHI ACALL DELAY_2S SJMP LAP CHIEUTHUAN: SETB ACC.0 CLR ACC.1 MOVX @DPTR,A RET NGHI: CLR ACC.0 CLR ACC.1 MOVX @DPTR,A RET CHIEUNGHICH: CLR ACC.0 SETB ACC.1 MOVX @DPTR,A RET DELAY_2S: LOOP: MOV R7,#40 MOV TL1,#LOW(-50000) MOV TH1,#HIGH(-50000) SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 DJNZ R7, LOOP RET END THÍ NGHIỆM 2: Viết chương trình điều khiển động với phương pháp PWM, thời gian bật xung 50% chu kỳ ORG 2000H LJMP MAIN ORG 200BH LJMP ISR_T0 ORG 201BH LJMP ISR_T1 MAIN: MOV TMOD,#11H CLR A SETB TF0 MOV IE,#82H MOV DPTR,#0E000H LAP: MOVX @DPTR,A SJMP LAP ISR_T0: SETB ACC.0 CLR TR0 MOV TL0,#LOW(-1000) MOV TH0,#HIGH(-1000) SETB TR0 CLR TR1 MOV TL1,#LOW(-500) MOV TH1,#HIGH(-500) SETB TR1 SETB ET1 RETI ISR_T1: CLR TR1 CLR ACC.0 CLR ET1 RETI END THÍ NGHIỆM 3: Viết chương trình điều khiển động với phương pháp PWM, thời gian “bật” xung 20%, 50%, 80% chu kỳ Mỗi độ rộng xung cách 5s Quy trình lặp lại liên tục ORG 2000H LJMP MAIN ORG 200BH LJMP ISR_T0 ORG 201BH LJMP ISR_T1 MAIN: LAP: MOV TMOD,#11H MOV R7,#50 MOV R6,#100 MOV R5,#0 CLR A SETB TF0 MOV IE,#82H MOV DPTR,#0E000H MOVX @DPTR,A SJMP LAP ISR_T0: TT: KHAC20: KHAC50: SETB ACC.0 CLR TR0 MOV TL0,#LOW(-1000) MOV TH0,#HIGH(-1000) SETB TR0 DJNZ R6,TT MOV R6,#100 DJNZ R7,TT MOV R7,#50 MOV R6,#100 INC R5 CJNE R5,#0,KHAC20 CLR TR1 MOV TL1,#LOW(-200) MOV TH1,#HIGH(-200) SETB TR1 SJMP EXIT CJNE R5,#1,KHAC50 CLR TR1 MOV TL1,#LOW(-500) MOV TH1,#HIGH(-500) SETB TR1 SJMP EXIT CJNE R5,#2,KHAC80 CLR TR1 MOV TL1,#LOW(-800) MOV TH1,#HIGH(-800) SETB TR1 KHAC80: EXIT: SJMP EXIT MOV R5,#0 SJMP TT SETB ET1 RETI ISR_T1: CLR TR1 CLR ACC.0 CLR ET1 RETI END THÍ NGHIỆM 4: Viết chương trình thực tăng giảm dần tốc độ động nhờ nút nhấn P1.4 P1.5 Khi không nhấn nút, tốc độ động không đổi Khi nút P1.4 nhấn giữ tốc độ động tăng dần Khi nút P1.5 nhấn giữ tốc độ động giảm dần MAIN: ORG MOV MOV MOV 2000H DPTR,#0E000H R3,#5 R4,#5 KT: JNB P1.4,NHAY1 MOV A,#01H MOVX@DPTR,A ACALL DLC MOV A,#00H MOVX @DPTR,A ACALL DLT JNB P1.5,NHAY2 MOV A,#01H MOVX @DPTR,A ACALL DLC MOV A,#00H MOVX @DPTR,A ACALL DLT SJMP KT NHAY1: INC R3 DEC R4 MOV A,#01H MOVX @DPTR,A ACALL DLC MOV A,#00H MOVX @DPTR,A ACALL DLT SJMP KT NHAY2: INC R4 DEC R3 SKIP2: MOV A,#01H MOVX @DPTR,A ACALL DLC MOV A,#00H MOVX @DPTR,A ACALL DLT SJMP KT DLC: LAP1: MOV MOV DJNZ DJNZ RET R6,03H R5,#100 R5,$ R6,LAP1 DLT: LAP: MOV MOV DJNZ DJNZ RET END R6,04H R5,#100 R5,$ R6,LAP THÍ NGHIỆM VI XỬ VỚI PIC 16F690 BÀI 1: THÍ NGHIỆM VỚI LED ĐƠN THÍ NGHIỆM 1: Viết chương trình chớp tắt led nối đến chân RC2 PIC 16F690 với tần số chớp tắt 1Hz #include #use delay(clock = 4000000) #use fast_io(c) void main () { set_tris_c(0); for( ; ; ) { output_toggle(pin_c2); delay_ms(500); } } THÍ NGHIỆM 2: Viết chương trình thực mạch led chạy nối đến led Port C PIC 16F690 sau, biết thời gian trạng thái S (sáng) T (tắt) 0.5s: STTTTSTTTTSTTTTSSTTT… #include #use delay(clock = 4000000) #use fast_io(c) int8 a=0x10; void main() { set_tris_c(0); while(1) { a=a>>1; output_c (a); delay_ms(500); if ( a==0x01) { a=0x10; } } { THÍ NGHIỆM 3:Viết chương trình thực mạch đếm lên đến 15, kết xuất led đơn nối đến port C PIC 16F690 Giá trị mạch đếm tăng lên đơn vị cách 1s #include #use delay(clock = 4000000) #use fast_io(c) int8 i; void main() { set_tris_c(0); while(1) { for(i=0; i0x0F) i=0; } output_c(i); } } THÍ NGHIỆM 5: Viết chương trình thực mạch đếm lên đến 15, kết xuất led đơn nối đến Port C PIC 16F690 Trong trình đếm SW1 nhấn thực đếm ngược từ giá trị 0, sau lại đếm lên từ #include #use delay(clock = 4000000) #use fast_io(c) #use fast_io(a) int const a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; void main() { int i=0; set_tris_C(0x00); output_C(0x00); while(1) { while(i

Ngày đăng: 06/08/2018, 21:19

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan