Ôn thi tốt nghiệp: Các bài tập vi xử lý đơn giản

Chia sẻ: Vũ Tuấn Đạt | Ngày: | Loại File: DOC | Số trang:5

0
356
lượt xem
215
download

Ôn thi tốt nghiệp: Các bài tập vi xử lý đơn giản

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

Ôn thi tố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

Chủ đề:
Lưu

Nội dung Text: Ôn thi tốt nghiệp: Các bài tập vi xử lý đơn giản

  1. Ôn thi tố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 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: clr a mov r0,#10h;Cho R0 tro den o nho 10h lap:mov @r0,a   ;chuyen a=00h vao o nho ma r0 tro =10h.(10h)=00h inc r0 inc a cjne a,#11h,lap ;Chuyen vung nho nay ra Ram ngoai tu 100h mov r0,#10h mov dptr,#100h ; cho dptr tro den vung nho 100h cua Ram ngoai mov r3,#00;bien dem lap1: mov a,@r0 ;Chuyen noi dung tro boi R0 vao thanh ghi A movx @dptr,a;Chuyen A ra Ram ngoai tai dia chi ma dptr tro vao inc r0 inc dptr inc r3 cjne r3,#17,lap1 ;Sau do lai chuyen noi dung 8 o nho cua Ram ngoai tu 108h sang Ram noi  tu D0h mov r4,#8 mov dptr,#108h mov r0,#0d0h lap2:movx a,@dptr;Chuyen noi dung tro boi dptr vao thanh ghi A mov @r0,a inc r0
  2. i  dptr nc djnz r4 ,lap2 j p $ m end Dang2: Vi ết chương tr ì nh t ạo sóng vuông t ần số f = 5 KHz t ại P1.0 dùng ngắt Ti m - 1 er ( gi ả sử t ần số t hạch anh l à 12 MHz) . G ải i f = 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) OD Nộ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ể er xử l ý
  3. ; các công vi ệc khác) END Ví dụ 2 : Vi ết chương tr ình t ạo xung vuông t ần số : f = 10KHz t ại P1.0 dùng ngắt Timer-0 và xung vuông t ần số : f = 1 KHz t ại P1.1 dùng ngắt Timer-1 Gi ải Giá tr ị đếm cho Timer-0 : 50. Giá tr ị đếm cho timer 1: 500. → Timer-0 : 8 bit, Timer-1 : 16 bit TMOD= 0001 0010b = 12h N 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 byte Main: MOV TMOD,#12h MOV IE,#8Ah SETB TR0 SETB TR1 MOV TH1,#HIGH(-500) MOV TL1,#LOW(-500) MOV TH0,#(-50)
  4. MOV TL0,#(-50) SJMP $ END FLư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ăng nội dung của các ô nhớ 30h, 31h, 32h theo quy lu ật đồng hồ (30h chứa gi ờ, 31h chứ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 ặp l ạ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_ISR Main : 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)
  5. 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,#20 exitTimer0 : RETI Inc_clock : INC Second ; Tăng giây MOV A,Second CJNE A,#60, exitInc ; N u giây < 60 thì thoát ế MOV Second,#0 ; Ng c l ại thì gán giây = 0 ượ INC Minute ; và tăng phút MOV A,Minute CJNE A,#60, exitInc ; N u phút < 60 thi thoát ế MOV Minute,#0 ; Ng c l ại thì gán phút = 0 ượ INC Hour ; và tăng gi ờ MOV A,Hour CJNE A,#24, exitInc ; N u gi ờ < 24 thì thoát ế MOV Hour,#0 ; Ng c l ại thì gán gi ờ = 0 ượ exitInc: RET END
Đồng bộ tài khoản