Các thí dụ minh họa tập lệnh 8051

Chia sẻ: Tran Quang Cuong | Ngày: | Loại File: DOC | Số trang:9

0
265
lượt xem
124
download

Các thí dụ minh họa tập lệnh 8051

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo về các thí dụ minh họa tập lênh 8051

Chủ đề:
Lưu

Nội dung Text: Các thí dụ minh họa tập lệnh 8051

  1. ĐHBK Tp HCM Khoa ĐĐT–BMĐT GVPT: Hồ Trung Mỹ Cac TD minh hoa tâp lênh 8051 (phân đoc thêm cua VXL-chương 3) ́ ̣ ̣ ̣ ̀ ̣ ̉ Chú y: Cac TD sau sẽ trinh bay theo thư tư giơi thiêu cac nhom lênh trong sach VXL, như arith01.asm để chỉ ́ ́ ̀ ̀ ̣ ́ ́ ̣ ́ TD 1 vơi nhom lênh số hoc, và 1 nhom lênh có thể có nhiêu TD minh hoa. ́ ̣ ̣ ́ ̣ ̀ ̣ TD : Minh hoa cac phep toan số hoc trên số nhị phân: ADD, ADDC, SUBB, INC, DEC, MUL, và DIV ̣ ́ ́ ́ ̣ ; TD: arith01.asm ; Đinh nghia cac hăng số dung trong chương trinh ̣ ̃ ́ ̀ ̀ ̀ NUM1 EQU 25 ; = 19H NUM2 EQU -17 ; = EFH NUM2M EQU 20h ; Đia chỉ ơ IRAM (RAM nôi) có trị số băng NUM2 ̣ ̣ ̀ BIN16_1 EQU 2578 ; = 0A12H BIN16_2 EQU 1289 ; = 0509H SUM16M EQU 22H ; Đia chỉ ơ IRAM chưa tông 2 số nhị phân 16 bit ̣ ̉ DIFF16M EQU 24H ; Đia chỉ ơ IRAM chưa hiêu 2 số nhị phân 16 bit ̣ ̣ ; = BIN16_2 - BIN16_1 = -1289 = FAF7H TEST EQU 1289-2578 ; = FAF7H org 0 ; Thư lênh ADD vơi toan hang 8 bit ( toan hang thư 2 la hăng sô) ̣ ́ ́ ̣ ̀ ́ MOV A,#NUM1 ADD A,#NUM2 ; A
  2. ; Thu lenh SUBB voi 2 toan hang hang so 16 bit ; hieu 2 so nhi phan 16 bit = BIN16_2 - BIN16_1 = -1289 = FAF7H ; cat vao bien DIFF16M (24H)theo big endian MOV A,#LOW BIN16_2 ; Lay byte thap cua hang so 16 bit CLR C SUBB A,#LOW BIN16_1 MOV DIFF16M+1,A MOV A,#HIGH BIN16_2 ; Lay byte cao cua hang so 16 bit SUBB A,#HIGH BIN16_1 ; Phai tinh den Carry cua phep cong truoc MOV DIFF16M,A ; (DIFF16M) = 1289 - 2578 = -1289 = FAF7H ;(nghia la (24H)=FAH va (25H)=F7H ; Hiêu ưng cua lênh INC ̣ ̉ ̣ INC A ; A
  3. ; Thu lenh ADD voi toan hang BCD 2 digit ( toan hang thu 2 la thanh ghi B) MOV A,#BCD1_1 MOV B,#BCD1_2 ADD A,B ; A
  4. ; Thu lenh ORL voi toan hang 2 la hang so MOV A,#NUM1 ORL A,#NUM2 ; A = 15H OR 3AH = 3FH ; Ap dung ORL de dat 1 bit len 1 neu OR no voi 1 va giu tri cu neu OR voi 0 MOV A,#NUM1 ; A = 15H ORL A,#0F0H ; A = F5H ; Thu lenh XRL voi toan hang 2 la hang so MOV A,#NUM1 XRL A,#NUM2 ; A = 15H XOR 3AH = 2FH ; Ap dung XRL de lay NOT bit neu XOR no voi 1 va giu tri cu neu XOR voi 0 MOV A,#NUM1 ; A = 15H XRL A,#0F0H ; A = E5H MOV A,#NUM2 ; A = 3AH XRL A,#0FFH ; A = bu 1 cua 3AH = C5H INC A ; A = bu 2 cua 3AH = C6H ; Xoa noi dung thanh ghi A CLR A ; A
  5. ; Ap dung dich phai voi C de chia nguyen co dau A cho 2 MOV A,#NUM2 ; A = -12 = F4H = 1111_0100B MOV C,ACC.7 ; C = bit dau cua A RRC A ; A = 1111_1010B = FAH = -6 va C=0 ; Thư lênh SWAP ̣ MOV A,#47H SWAP A ; A = 74H sjmp $ DIV2EXPN: ; Chương trinh con chia nguyên không dâu cho 2^n ̀ ́ RR A CLR ACC.7 DJNZ R7, DIV2EXPn RET END TD : Minh hoa cac lênh chuyên dư liêu: MOV, PUSH, POP, XCH, XCHD ̣ ́ ̣ ̉ ̣ ; TD: mov01.asm CONST1 EQU 15H CONST2 EQU 27H CONST3 EQU 36H ; Điên 16 byte trong vung dư liêu nôi tư đia chỉ 30H voi tri so la CONST1 ̀ ̀ ̣ ̣ ̣ MOV A,#CONST1 MOV R0,#30H MOV R1,#16 L1: MOV @R0, A INC R0 DJNZ R1, L1 ; Dien 32 byte trong vung dư liêu ngoai tư đia chỉ 20H voi tri so la CONST2 ̀ ̣ ̣ ̣ MOV A,#CONST2 MOV DPTR,#20H MOV R1,#32 L2: MOVX @DPTR, A INC DPTR DJNZ R1, L2 ; Dien 16 byte trong vung du lieu ngoai tu 40H voi tri so la CONST1 MOV A,#CONST3 MOV R0,#40H MOV R1,#16 MOV P2,#0 ; Xuat byte cao dia chi L3: MOVX @R0, A INC R0 DJNZ R1, L3 ́ ̉ ̣ ; Hoan đôi ()nôi dung 2 ô nhơ trong RAM nôi ̣ ; R1 R7 ơ bank 0 MOV R1,#CONST1 ; R1 = 15H MOV R7,#CONST2 ; R7 = 27H PUSH 07 PUSH 01 POP 07 ; R7 = 15h POP 01 ; R1 = 27H ; Môt cach khac để hoan đôi R1 va R7 ̣ ́ ́ ́ ̉ XCH A,01H XCH A,07H XCH A,01H ; Hoan doi digit thap cua 2 so hex 2 ky so o A va 1 byte trong RAM noi voi con tro la R0 ; hay R1 MOV A,#24h MOV 20h,#53h MOV R0,#20h XCHD A,@R0 ; A = 23h va (20h) = 54h ́ ̣ ̣ ̣ Cac TD minh hoa tâp lênh 8051 – trang 5
  6. sjmp $ END TD : Minh hoa cac lênh chuyên dư liêu: MOVC ̣ ́ ̣ ̉ ̣ ; TD: mov02.asm ; Đoc liên tuc dư liêu X tư P0 và xuât ra P1 giá tri X2 ̣ ̣ ̣ ́ ; Xuât dang BCD 4 digit ơ P2 (2 digit cao) va P3 (2 digit thap) ́ ̣ MOV P0,#0FFH ; Đăt câu hinh cho P0 là INPUT ̣ ́ ̀ MOV DPTR,#X2_BCD L1: MOV A,P0 ANL A,#0FH ; Bao đam chỉ tinh tôi đa là 15^2 = 225 ̉ ̉ ́ ́ PUSH ACC ; Lưu trư cho lân goi sau ̀ ̣ CALL SQUARE ; Assembler tư đôi sang ACALL hay LCALL ̉ MOV P1,A POP ACC CALL SQ_BCD SJMP L1 ; Chương trinh con tinh X^2 băng cach tra bang vơi thanh ghi nên là PC ̀ ́ ̀ ́ ̉ ̀ SQUARE: INC A ; Điêu chinh để lây số liêu đung!! ̀ ̉ ́ ̣ ́ MOVC A,@A+PC RET TABLE_X2: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225 ; X^2 ; Chương trinh con tra kêt quả X^2 vơi biêu diên BCD 4 digit ̀ ́ ̉ ̃ ̉ ̀ ̀ ; Tra bang băng thanh ghi nên DPTR SQ_BCD: CLR C RL A ; A 92 DW 0100H, 0121H, 0144H, 0169H, 0196H, 0225H; 102 -> 152 END TD : Minh hoa cac lênh vơi biên Boole (toan hang 1 bit) ̣ ́ ̣ ́ ́ ̣ ;TD: boole01.asm ; Thuc hien cac phep toan boole co ban NOT, AND, OR, XOR, NAND, va NOR F1 EQU PSW.1 ; Dung thêm bit nay lam biên tam (đã có F0) ̀ ̀ ̀ ́ ̣ X EQU P1.0 Y EQU P1.1 NOTX EQU P1.2 ; NOTX = NOT(X) XANDYEQU P1.3 ; = X AND Y XORY EQU P1.4 ; = X OR Y XXORY EQU P1.5 ; = X XOR Y XNANDY EQU P1.6 ; = X NAND Y XNORY EQU P1.7 ; = X NOR Y MOV P1,#03H ; Dat cau hinh P1.0 va P1.1 lam INPUT LOOP: MOV C,X MOV F0,C MOV C,Y MOV F1,C MOV C,F0 CPL C MOV NOTX,C ; NOT X MOV C,F0 ANL C,F1 ́ ̣ ̣ ̣ Cac TD minh hoa tâp lênh 8051 – trang 6
  7. MOV XANDY,C ; X AND Y CPL C MOV XNANDY,C; X NAND Y MOV C,F0 ORL C,F1 MOV XORY,C ; X OR Y CPL C MOV XNORY,C ; X NOR Y MOV C,Y JNB X,SKIP ; Neu X=0 thi X XOR Y = Y CPL C ; Neu X=1 thi X XOR Y = NOT Y SKIP: SJMP LOOP ; Phai có lăp lai, nêu không sẽ không thể hiên đươc công logic!! ̉ ̣ ̣ ́ ̣ ̉ END TD : Minh hoa cac phep toan logic vơi biên Boole (toan hang 1 bit) ̣ ́ ́ ́ ́ ́ ̣ ;TD: boole02.asm ; Đinh trị ham Boole: F = (XY'+ WZ)(XZ'W' + X'Z)= tich cua 2 tông Boole ̣ ̀ ́ ̉ ̉ ; Giả sư cac biên X, Y, Z, W đươc đoc vao tư P1.0 .. P1.3 và biên ra F để ơ P1.7 ́ ́ ̣ ̀ ́ X EQU P1.0 Y EQU P1.1 Z EQU P1.2 W EQU P1.3 F EQU P1.7 MOV P1,#0FH ; Dat cau hinh P1.0 .. P1.4 la INPUT LOOP: MOV C,X ANL C,/Y ; C = XY' JC EXP2 ; Neu C = 1 thi 0 can tinh tiep voi phep toan OR, ma tiep tuc ; xet tong thu 2 MOV F0,C ; F0 = XY' MOV C,W ANL C,Z ORL C,F0 ; C = XY' + WZ JNC DONE_0 ; Neu Tong thu 1 = 0 thi F = 0 EXP2: MOV C,X ANL C,/Z ANL C,/W ; C = XZ'W' JC DONE_1 MOV F0,C MOV C,Z ANL C,/X ; C = ZX' = X'Z ORL C,F0 ; C = XZ'W' + X'Z MOV F,C ; F = (XY'+ WZ)(XZ'W' + X'Z) SJMP LOOP DONE_0: CLR F ; F = 0 SJMP LOOP DONE_1: SETB F ; F = 1 SJMP LOOP END TD : Minh hoa cac lênh nhay theo trị biên Boole: JB, JNB ̣ ́ ̣ ̉ ́ ;TD: boole03.asm ; Mô phong mach đêm lên (đêm 10): ngõ ra nhị phân ơ 4 bit thâp P2, giả sư đươc nôi vơi mach hiên thị số ̉ ̣ ́ ́ ́ ́ ̣ ̉ ; BCD và xung nhip CK (kich canh xuông) đươc nôi vơi chân P3.7 ̣ ́ ̣ ́ ́ CK EQU P3.7 MOV P3,#80H ; Dat cau hinh P3.7 INPUT MOV R0,#0 ; So dem ban dau la 0 MOV P2,#0 ; Dau tien so dem la 0 LOOP: JNB CK,$ ; đơi CK có mưc 1 JB CK,$ ; đơi CK có mưc 0 ==> phat hiên đươc canh xuông ́ ̣ ̣ ́ INC R0 CJNE R0,#10,NEXT MOV R0,#0 NEXT: MOV P2,R0 SJMP LOOP END ́ ̣ ̣ ̣ Cac TD minh hoa tâp lênh 8051 – trang 7
  8. ; SV có thể dung Proteus để thây rõ hơn hoat đông counter nay ̀ ́ ̣ ̣ ̀ TD : Minh hoa cac lênh rẽ nhanh chương không điêu kiên: JMP ̣ ́ ̣ ́ ̀ ̣ ; TD: branch01.asm ; Chuong trinh doc lien tuc gia tri tu P0 (gia su < 4) ; Nêu P0=0 thì xư lý theo CASE_0, = 1 theo CASE_1, . . . ́ MOV P0,#0FFH ; Dat cau hinh P0 la INPUT MOV P1,#0FFH ; Dat cau hinh P1 la INPUT MOV P2,#0FFH ; Dat cau hinh P2 la INPUT MOV DPTR,#JMP_TABLE L1: MOV A,P0 ANL A,#03H ; Bao dam cho gia tri chon < 4 ! , sau lenh nay C =0 RL A ; A = 2 x A JMP @A+DPTR JMP L1 ; Assembler tu dong chuyen sang SJMP, AJMP hay LJMP JMP_TABLE: AJMP CASE_0 ; lenh nay 2 byte AJMP CASE_1 AJMP CASE_2 ; Day la doan phuc vu cho CASE_3 ; chia P1 cho P2 va xuat thuong so o 4 bit cao cua P3 va du so o 4 bit thap cua P3 ; gia su thuong so va du so
  9. MOVX A,@DPTR MOV R0, A ; So phan tu cua bang dat trong R0 MOV B,#0 L1: INC DPTR MOVX A,@DPTR JNZ SKIP INC B SKIP: DJNZ R0,L1 ; Đêm tông số cac phân tư có trị >=3, kêt quả cât vao R1, vơi TD nay cho R1 = 3 ́ ̉ ́ ̀ ́ ́ ̀ ̀ MOV DPTR,#0 MOVX A,@DPTR MOV R0, A ; So phan tu cua bang dat trong R0 MOV R1,#0 L2: INC DPTR MOVX A,@DPTR CJNE A,#5,CHECK CHECK: JC CONT ; C = 0 co nghia la A >= 5 INC R1 CONT: DJNZ R0, L2 SJMP $ END TD : Mô phong mach so sanh 2 số nhị phân 4 bit X và Y (X = P1.7..P1.4, Y = P1.3..P1.0), ̉ ̣ ́ mach co 3 ngõ ra P2.0 = 1 nêu X < Y, P2.1 = 1 nêu X = Y, và P2.2 = 1 nêu X > Y ̣ ́ ́ ́ ; TD: branch03.asm MOV P1,#0FFh ; Dat cau hinh cho P1 lam INPUT LOOP: MOV A,P1 ; A = X:Y (A do 2 số 4 bit X va Y hơp lai) ̣ MOV B,A ; Cat tam ACC ANL A,#0FH ; A = 0:Y XCH A,B ; A = X:Y va B = 0:Y = Y SWAP A ; A = Y:X ANL A,#0FH ; A = 0:X = X CJNE A, B, XNEY ; so sanh X voi Y muc dich se dat cac co XEQY: ; truong hop X = Y CLR P2.0 SETB P2.1 CLR P2.2 SJMP LOOP XNEY: JC XGTY ; Neu X > Y nhay den XGTY XLTY: ; truong hop X < Y SETB P2.0 CLR P2.1 CLR P2.2 SJMP LOOP XGTY: ; truong hop X > Y CLR P2.0 CLR P2.1 SETB P2.2 SJMP LOOP END ́ ̣ ̣ ̣ Cac TD minh hoa tâp lênh 8051 – trang 9

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản