intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

BÀI TẬP DÀI VI XỬ LÝ

Chia sẻ: Dang Duc Cong | Ngày: | Loại File: PDF | Số trang:11

65
lượt xem
12
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'bài tập dài vi xử lý', công nghệ thông tin, hệ điều hành phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: BÀI TẬP DÀI VI XỬ LÝ

  1. BÀI TẬP DÀI VI XỬ LÝ Họ tên: Đặng Đức Công. MSSV:20101181 Lớp: KSTN-ĐKTĐ-K55 Câu 1: Viết CT đếm số âm trong miền nhớ 100 byte từ ô nhớ 123H tại RAM ngoài START Bài làm: Quy ước bit cao nhất(tức là bit 7) là bit dấu, và số R0 #100 âm có bit cao nhất bằng 1. DPTR #123H Số các số âm đếm được lưu tại R1. R1 #00 Địa chỉ 123H là địa chỉ thấp nhất trong 100 byte kề nhau A @DPTR RLC A Chương trình: MAIN: MOV R0,#100 MOV DPTR,#123H C = 1? MOV R1,#00 YES LOOP: MOVX A,@DPTR NO R1 += 1 NO RLC A JC NHAY DPTR += 1 INC R1 R0 -= 1 NHAY: INC DPTR DJNZ R0,LOOP R0 = 0? END YES END
  2. Câu 2: Viết CT chuyển 2 mảng dữ liệu 10 byte. Biết mảng 1 có địa chỉ 1000H trong RAM ngoài và mảng 2 có địa chỉ 70H trong RAM trong. Bài làm: START Quy ước 1000H và 70H là các địa chỉ thấp nhất của mỗi mảng 10 byte trong các RAM. R2 #10 DPTR #1000H Chương trình: R0 #70 MAIN:MOV R2,#10 MOV DPTR,#1000H A @DPTR MOV R0,#70H XCH A,@R0 @DPTR A LOOP: MOVX A,@DPTR R0 += 1 XCH A,@R0 DPTR += 1 MOVX @DPTR,A R2 -= 1 NO INC R0 INC DPTR R2 = 0? DJNZ R2,LOOP END YES END
  3. Câu 3: Viết CT cộng hai số BCD 4 chữ số trong RAM trong, kết quả cất vào sô thứ 2 . Biết số thứ 1 đặt tại ô nhớ 70H, và số thứ 2 đặt tại ô nhớ 60H. Bài làm: START Quy ước 2 số BCD có byte thấp ứng với địa chỉ thấp. Kết quả cất vào số thứ 2, nếu kết quả có tràn sẽ cất vào R0 #70H R1 #60H byte 62H. R2 #2 Chương trình: C #0 MAIN:MOV R0,#70H MOV R1,#60H A @R0 A += (@R1+C) MOV R2,#2 DA A CLR C @R1 A R0 += 1 LOOP: MOV A,@R0 R1 += 1 ADDC A,@R1 NO R2 -= 1 DA A MOV @R1,A R2 = 0? INC R0 INC R1 YES DJNZ R2,LOOP C = 1? JNC EXIT MOV 62H,#1 YES EXIT: END NO 62H #1 END
  4. Câu 4: Viết CT tính trung bình 10 byte trong Ram ngoài từ ô nhớ 1234H. Bài làm: START Quy ước: Phép tính trung bình có thương trong R0, số dư trong R1. Địa chỉ 1234H là địa chỉ thấp nhất trong 10 byte DPTR #1234H kề nhau. R0 #00 Chương trình: R1 #00 MAIN: MOV DPTR,#1234H R2 #10 MOV R0,#00 A @DPTR MOV R1,#00 B #10 MOV R2,#10 DIV AB A += R0 LOOP: MOVX A,@DPTR R0 A MOV B,#10 A B DIV AB A += R1 R1 A ADD A,R0 DPTR += 1 MOV R0,A NO R2 -= 1 MOV A,B ADD A,R1 MOV R1,A R2 = 0? INC DPTR YES DJNZ R2,LOOP A R1 MOV A,R1 B #10 MOV B,#10 DIV AB DIV AB A += R0 R0 A ADD A,R0 R1 B MOV R0,A MOV R1,B END END
  5. Câu 5: Viết CT sử dụng Timer tạo xung tần số 1Hz tại chân P1.0. Biết xung nhịp thạch anh 12MHz ( Ton =50%, Toff = 50%). Bài làm: START Tần số 1Hz => T= 1s. Ton=Toff= 500.000us Sử dụng Timer0 chế độ 16 bit, thời gian TMOD #00000001B 50000 gồm 10 lần. P1.0 = 1 15535D = 3CAFH Chương trình: R1 #10 MAIN: MOV TMOD,#00000001B SETB P1.0 TH0 #3CH TL0 #0AFH LOOP: MOV R1,#10 TF0 = 0 LOOP1: MOV TH0,#3CH TR0 = 1 MOV TL0,#0AFH YES CLR TF0 TF0 = 0 SETB TR0 JNB TF0,$ NO NO CLR TR0 R1 -= 1 TR0 = 0 DJNZ R1,LOOP1 CPL P1.0 SJMP LOOP R1 = 0 END YES CPL P1.0
  6. Câu 6: Viết CT tạo xung 10Hz tại chân P1.2. Biết xung nhịp thạch anh 12MHz (Ton =30% và Toff=70%). START Bài làm: F=10Hz => T=100.000us TMOD #00000001B Ton=30.000us. Toff=70.000us P1.2 = 1 Sử dụng Timer0 chế độ 16 bit thời gian 10.000 Chương trình: R1 #3 55535D = D8EFH R1 #7 MAIN: MOV TMOD,#00000001B SETB P1.2 TH0 #0D8H ON: MOV R1,#3 TL0 #0EFH TF0 = 0 SJMP LOOP TR0 = 1 YES OFF: MOV R1,#7 LOOP: MOV TH0,#0D8H TF0 = 0 YES MOV TL0,#0EFH NO NO NO CLR TF0 R1 -= 1 SETB TR0 JNB TF0,$ R1 = 0 DJNZ R1,LOOP YES CPL P1.2 CPL P1.0 JB P1.2,ON SJMP OFF P1.2 = 1 END
  7. Câu 7: Viết CT con đọc 300 byte dữ liệu từ cổng nối tiếp và cất vào vùng nhớ có địa chỉ đầu 100H. Biết cổng nối tiếp đã được khởi tạo sẵn, cổng cho phép đọc khi cờ RI =1, và cờ RI sẽ tự xóa khi đọc xong 1 byte. Bài làm: COUNT Vùng nhớ là RAM ngoài R0 #100 COUNT: MOV R0,#100 R1 #3 DPTR #100H MOV R1,#03 YES MOV DPTR,#100H LOOP: JNB RI,$ RI = 0? MOV A,SBUF NO NO MOVX @DPTR,A A SBUF @DPTR A CLR RI RI = 0 INC DPTR DPTR += 1 NO R0 -= 1 DJNZ R0,LOOP MOV R0,#100 R0 = 0? DJNZ R1,LOOP YES RET R0 #100 R1 -= 1 R1 = 0? YES RET
  8. Câu 8: Viết CT điều khiển đèn giao thông tại 1 ngã tư theo yêu cầu sau: Biết điều khiển 0 là đèn sáng , 1 là đèn tắt. Bài làm: Chương trình chính: MAIN: MOV A,#25 MOV P1,#11011110B LCALL DELAY_A START DELAY_A MOV A,#3 TMOD #01H MOV P1,#11011101B XANH1 1 TF0 = 0 DO2 1 LCALL DELAY_A A #25 MOV A,#33 LCALL DELAY_A R1 #16 MOV P1,#11110011B DO2 1 TH0 #0BH LCALL DELAY_A TL0 #0DCH VANG1 1 MOV A,#3 A #3 TR0 = 1 LCALL DELAY_A YES MOV P1,#11101011B NO LCALL DELAY_A XANH2 1 TF0 = 0? SJMP MAIN DO1 1 NO A #33 NO DELAY_A: MOV TMOD,#01H ;trễ A giây LCALL DELAY_A TR0 = 0 CLR TF0 TF0 = 0 R1 -= 1 LOOP: MOV R2,#16 DO1 1 VANG2 1 LOOP1: MOV TH0,#0BH A #3 R1 = 0? MOV TL0,#0DCH LCALL DELAY_A YES SETB TR0 A -= 1 JNB TF0,$ CLR TR0 A = 0? CLR TF0 DJNZ R2,LOOP1 YES DJNZ 0E0H,LOOP ;thanh ghi A có địa chỉ E0 RET RET
  9. Câu 9: Viết CT hiển thị trên 2 LED 7 thanh đếm lùi từ 20s với sơ đồ phần cứng SV tự đề xuất. C1 33nF 19 39 XTAL1 P0.0/AD0 38 P0.1/AD1 12Mhz X1 P0.2/AD2 37 36 C2 P0.3/AD3 33nF 18 35 XTAL2 P0.4/AD4 34 P0.5/AD5 33 P0.6/AD6 9 32 RST P0.7/AD7 R1 P2.0/A8 21 470 10k 22 C3 U1 P2.1/A9 470 10uF 23 P2.2/A10 470 29 AT89C51 24 470 PSEN P2.3/A11 30 25 470 +5V ALE P2.4/A12 31 26 470 EA P2.5/A13 27 470 P2.6/A14 28 470 P2.7/A15 1 10 3.3k 3.3k P1.0 P3.0/RXD R10 R12 2 11 P1.1 P3.1/TXD 3 12 P1.2 P3.2/INT0 4 13 3.9k 3.9k P1.3 P3.3/INT1 R11 +5V R13 5 14 P1.4 P3.4/T0 6 15 P1.5 P3.5/T1 7 16 P1.6 P3.6/WR 8 17 P1.7 P3.7/RD Sử dụng Port2 của VĐK làm port dữ liệu, và 2 chân P3.0 và P3.1 điều khiển quét LED. TIME EQU 20 ON EQU 4 MAIN COUNT EQU 125; lặp để đủ quét trong 1s ORG 0000H R0 #TIME MAIN: MOV R0,#TIME YES DEM_LUI: MOV R1,#COUNT R1 #COUNT NO LCALL HIEN_THI CALL HIEN_THI R0 -= 1 DJNZ R0,DEM_LUI SJMP MAIN R0 = 0? HIEN_THI: MOV A,R0 MOV B,#10 DIV AB LCALL GIAI_MA
  10. MOV P2,A HIEN_THI DELAY_A_MS SETB P3.0 MOV A,#ON A R0 TMOD #01H B #10 LCALL DELAY_A_MS DIV AB TF0 = 0 CLR P3.0 CALL GIAI_MA TH0 #0FCH P2 A TL0 #018H MOV A,B P3.0 = 1 TR0 = 1 LCALL GIAI_MA A #ON NO CALL DELAY_A_MS MOV P2,A NO P3.0 = 0 NO TF0 = 0? SETB P3.1 A B CALL GIAI_MA MOV A,#ON YES P2 A LCALL DELAY_A_MS P3.1 = 1 A #ON A = 0? CLR P3.1 CALL DELAY_A_MS DJNZ R1,HIEN_THI P3.1 = 0 YES R1 -= 1 RET RET DELAY_A_MS: R1 = 0? MOV TMOD,#01H LOOP: CLR TF0 YES MOV TH0,#0FCH RET MOV TL0,#18H SETB TR0 JNB TF0,$ CLR TR0 GIẢI MÃ DJNZ 0E0H,LOOP ;thanh ghi A có địa chỉ E0 DPTR #MA_SO RET A @A+DPTR GIAI_MA: RET MOV DPTR,#MA_SO MOVC A,@A+DPTR RET MA_SO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END
  11. Câu 10: Viết CT con đổi n ký tự thành chữ hoa (nếu đang là chữ thường). Biết chuỗi ký tự trong bộ nhớ có địa chỉ đầu trong R0 , độ dài trong R7. Bài làm: Giả thiết n nhỏ hơn 256, lưu tại R1. Bộ nhớ là RAM trong. TO_UPPER: MOV A,@R0 TO_UPPER TEST LCALL TEST C=1 JNC NOT_LOWER1 A @R0 LCALL TEST SUBB A,#20H A = #122? MOV @R0,A C = 1? NOT_LOWER1:INC R0 NO NO YES DJNZ R7, TO_UPPER A (A-#20H) NO C = 0? RET @R0 A NO TEST: R0 += 1 C=0 YES ; INPUT: A, OUTPUT: C=1 IF A IS LOWER. R7 -= 1 YES SETB C R7 = 0? YES A = #97? CJNE A,#122,NOT_EQ1 SETB C YES NO RET SJMP EXIT C = 1? YES C=0 NOT_EQ1: JNC EXIT ; A < z? NO CLR C CJNE A,#97,NOT_EQ2 C=1 SETB C RET SJMP EXIT NOT_EQ2: JC NOT_LOWER2 ; a < A < z? SETB C SJMP EXIT NOT_LOWER2: CLR C ;𝐴 ∉ (𝑎, 𝑧) SJMP EXIT EXIT: RET
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2