Ônthitốt nghiệp: Bài dạng 1:Chuyển đổi qua lại giữa các vùng nhớ của Ram trong và Ram ngoài Đề bài:Nạp 00h đến 10h vào vùng nhớ bắt đầu từ 10h của Ram nội, sau đó chuyển vùng này ra Ram
Nội dung trích xuất từ tài liệu:
Ôn thi tốt nghiệp: Các bài tập vi xử lý đơn giảnÔnthitốt nghiệp:Bài dạng 1:Chuyển đổi qua lại giữa các vùng nhớ của Ram trong và Ram ngoàiĐề bài:Nạp 00h đến 10h vào vùng nhớ bắt đầu từ 10h của Ram nội, sau đó chuyển vùng này raRam ngoài từ 100h.Sau đó lại chuyển 8 ô nhớ từ 108h Ram ngoài vào o nhớ 0D0 của Ram nội$include(reg51.inc)main: clra movr0,#10h;ChoR0trodenonho10hlap:mov@r0,a;chuyena=00hvaoonhomar0tro=10h.(10h)=00h incr0 inca cjnea,#11h,lap;ChuyenvungnhonayraRamngoaitu100h movr0,#10h movdptr,#100h;chodptrtrodenvungnho100hcuaRamngoai movr3,#00;biendemlap1: mova,@r0 ;ChuyennoidungtroboiR0vaothanhghiA movx@dptr,a;ChuyenAraRamngoaitaidiachimadptrtrovao incr0 incdptr incr3 cjner3,#17,lap1;Saudolaichuyennoidung8onhocuaRamngoaitu108hsangRamnoituD0h movr4,#8 movdptr,#108h movr0,#0d0hlap2:movxa,@dptr;ChuyennoidungtroboidptrvaothanhghiA mov@r0,a incr0 i dptr nc djnzr4 ,lap2j p$mendDang2: Vi ết chương tr ì nh t ạo sóng vuông t ần số f = 5 KHz t ại P1.0 dùngngắt Ti m - 1 er ( gi ả sử t ần số t hạch anh l à 12 MHz) .G ải if = 5 KHz → T = 200 μs ( 200 chu kỳ) → t hời gi an t r ì hoãn : 100 chu kỳ.Gi á t r ị đếm = 100 → dùng chế độ 8 bi t . Vậy : TM = 0010 0000b ( 20h) ODNội dung t hanh ghi I E :I E = 1000 1000b ( 88h)Chương t r ì nh t hực hi ện như sau: ORG 0000h LJ M M n P ai ORG 001Bh CPL P1. 0 ; đảo bi t để t ạo xung vuông ( 2byt e) RETI ; t r ở về chương t r ì nh chí nh t ừ I SR ( 1byt e)M n: ai MOV TMOD, #20h ; Ti m - 1 : M er ode- 2 MOV I E, #88h ; Có t hể t hay t hế bằng 2 l ệnh sau: ; SETB EA ; SETB ET1 MOV TH1, # - 100) ( MOV TL1, # - 100) ( SETB TR1 SJ M $ P ; Lặp t ại chỗ, nghĩa l à chương t r ì nh không l àm gìcả, chờ ; Ti m t r àn ( các ứng dụng t hực t ế có t hể erxử l ý ; các công vi ệc khác) ENDVí dụ 2 : Vi ết chương tr ình t ạo xung vuông t ần số : f = 10KHz t ạiP1.0 dùng ngắt Timer-0 và xung vuông t ần số : f = 1 KHzt ại P1.1 dùng ngắt Timer-1Gi ải Giá tr ị đếm cho Timer-0 : 50. Giá tr ị đếm cho timer 1:500. → Timer-0 : 8 bit, Timer-1 : 16 bitTMOD= 0001 0010b = 12hN i dung thanh ghi IE : ộ ORG 0000h LJMP Main ORG 000Bh ; Địa chỉ vector ngắt của Timer-0 CPL P1.0 ; 2 byte : đảo bit để t ạo xung vuông RETI ; 1 byte ORG 001Bh ; Địa chỉ vector ngắt của Timer-1 MOV TH1,#HIGH(-500) ; 2 byte MOV TL1,#LOW(-500) ; 2 byte CPL P1.1 ; 2 byte RETI ; 1 byteMain: MOV TMOD,#12h MOV IE,#8Ah SETB TR0 SETB TR1 MOV TH1,#HIGH(-500) MOV TL1,#LOW(-500) MOV TH0,#(-50) MOV TL0,#(-50) SJMP $ ENDFLưu ý : Do Timer-1 hoạt động ở chế độ 16 bit nên m i l ần Timer tràn ỗphải nạp l ại giá tr ị cho Timer-1.Ví dụ 3 : Vi ết chương tr ình dùng ngắt timer 0 sao cho cứ 1s thì tăngnội dung của các ô nhớ 30h, 31h, 32h theo quy lu ật đồng hồ (30h chứa gi ờ, 31hchứa phút, 32h chứa giây).Gi ải Yêu cầu chương tr ình tr ì hoãn là 1s trong khi Timer-0 cho phép tr ìhoãn t ối đa là 65536 μs → chọn giá tr ị đếm là 50000 và thực hi ện l ặpl ại 20 l ần (20 x 50000 = 1000000 μs = 1s).Vậy : TMOD= 0000 0001b (01h) IE = 1000 0010b (82h) Hour EQU 30h ; Định nghĩa Minute EQU 31h ; tr ước các ô nhớ Second EQU 32h ORG 0000h LJMP Main ORG 0003h LJMP Timer0_ISRMain : MOV TMOD,#01h MOV IE,#82h MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) MOV R7,#20 ; Lặp 20 l ần SETB TR0 SJMP $Timer0_ISR: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) DJNZ R7, exitTimer0 ; N u chưa đủ 20 l ần thì thoát ế CALL I nc_cl ock ; Tăng theo quy lu ật đồng hồ MOV R7,#20exitTimer0 : RETIInc_clock : INC Second ; Tăng ...