Tải bản đầy đủ (.pdf) (6 trang)

Ví dụ Thực hành trên Pinnacle pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (250.36 KB, 6 trang )


4
Thc hin trờn Pinnacle

ễn tp li ton b kin thc ó hc
=============================================
Vi du 1: Ch-ơng trình đọc bảng dữ liệu và ghi vào vùng nhớ RAM
Chạy ch-ơng trình và quan sát vùng Internal RAM

ORG 00H
MOV DPTR, #MYDATA ; nap dia chi dau tien cua bang
MOV R0, #40H ; nap dia chi dau tien cua nho ram
BACK: CLR A ; xoa A=0
MOVC A,@A DPTR ; doc bang
JZ KT ; Nhay den KT neu gap 0 ket thuc chuoi
MOV @R0, A ; Nap bang vao ram
INC R0 ; Tang dia chi ram
INC DPTR ; Tang dia chi bang
SJMP BACK ;Tro ve nhan Back de doc lai
KT: SJMP KT ; cho tai cho
ORG 300H ; bat dau dia chi bang
MYDATA: DB "HA NOI", 0 ; du lieu bang ket thuc la 0
END
=====================================================
Vớ d 2 : Ch-ơng trình định thời tạo thời gian trể chế độ 1.
Chy tng lnh ca chng trỡnh v quan sỏt b nh thi.

ORG 00H ; bắt đầu ch-ơng trình từ địa chỉ 00H
MOV TMOD, #01H ; Timer0 ở chế độ 1 (đếm 16 bit tới FFFFH)
MOV TL0, #0F2H ; nạp TL0 = #0F2H
MOV TH0, #0FAH ; nạp TH0 = # 0FAH


MOV P0, #55h ; đ-a ra cổng P0 giá trị 55H
SETB TR0 ; bắt đầu đếm định thời gian trễ
HERE: JNB TF0, HERE ; chờ cờ tràn TF0 = 1
CLR TR0 ; ngừng đếm
CLR TF0 ; xoá cờ tràn
SJMP $ ; kết thúc ch-ơng trình bằng lệnh nhẩy tại chỗ
END ; kết thúc ch-ơng trình dịch

===========================================================
Vớ D 3. Ch-ơng trình định thời tạo thời gian trễ ở chế độ 2.
ORG 00H ; bắt đầu ch-ơng trình từ địa chỉ 00H
MOV TMOD, #20H ; Timer1 ở chế độ 2 (đếm 8 bit từ TH1)
MOV TH1, #0FDH ; nạp TH0 cho ttốc độ baud 9.6KHz
MOV TL1, TH1 ; nạp TL1 = TH1 = #0FDH
SETB TR1 ; bắt đầu đếm định thời gian trễ
HERE: JNB TF1, HERE ; chờ cờ tràn TF0 = 1
CLR TR1 ; ngừng đếm
CLR TF1 ; xoá cờ tràn
SJMP $ ; nhẩy ti ch
END ; kết thúc ch-ơng trình dịch

Vớ D 4. Ch-ơng trình định thời tạo thời gian trễ 1phút = 60 sec
Chy chng trỡnh bn s thy chng trỡnh ngng chy sau khong 65 giõy. Sa chng
trỡnh cú thi gian tr 10, 20, 30, 40, 50 giõy
ORG 00H ; Start at 00H
Formatted: Font: 12 pt, Font color: Custom
Color(RGB(8,8,8))
Formatted: Top: 1.5 cm, Bottom: 1.5 cm,
Gutter: 1.5 cm
Formatted: Font color: Custom

Color(RGB(8,8,8))
Formatted: Font: 12 pt, Font color: Custom
Color(RGB(8,8,8))
Formatted: Font color: Custom
Color(RGB(8,8,8))
Formatted: Font: 12 pt, Font color: Custom
Color(RGB(8,8,8))
Formatted: Font color: Custom
Color(RGB(8,8,8))
Formatted: Font: 12 pt, Font color: Custom
Color(RGB(8,8,8))

5
MOV R0, #20 ; Setup R0=20
MOV R1, #60 ; Setup R1=60
MOV TMOD,#01H ; Timer0 mode 1

DL: MOV DPTR, #15536 ; Counter 50000
MOV TL0, DPL
MOV TH0, DPH
SETB TR0
JNB TF0, $ ;Wait TF0 = 1 after 50000?sec
CLR TF0
CLR TR0
DJNZ R0, DL ; 1ses
MOV R0, #20
DJNZ R1, DL
END
====================================================
Ví dụ 5. Sử dụng 2 bộ định thời tạo xung chữ nhật tần số 2000Hz thời gian ở mức cao bằng 4 lần

thời gian ở mức thấp. (dưới đây là code chương trình, các bạn tự tìm hiểu và ghi lời giải thích
cho các dòng lệnh ) chạy chương trình, quan sát các bộ định thời làm việc

ORG 00H
MOV TMOD, #00100001B
LOOP:
SETB P0.3
ACALL DELAY0
CLR P0.3
ACALL DELAY1
LJMP LOOP
DELAY0: MOV TL0, #70H
MOV TH0, #FEH
SETB TR0
L0: JNB TF0, L0
CLR TR0
CLR TF0
RET
DELAY1: MOV TH1, #156
SETB TR1
L1: JNB TF1, L1
CLR TR1
CLR TF1
RET
END


Bài Tập ứng dụng định thời
(không sử dụng ngắt)
Trên cơ sở các ví dụ trên viết chương trình:

A. Tạo xung vuông f=2 KHz trên P1.7, dùng bộ định thời 1 ở Mode 2 (auto reload)
B. Tạo xung vuông f=50 Hz ở P1.7, dùng bộ định thời 1 ở Mode 1 (16 bit)
C. Tạo xung chữ nhật tần số 2000Hz thời gian ở mức cao bằng 2/3 lần thời gian ở mức thấp
(sử dụng bộ định thời)
D. Tạo xung chữ nhật tần số 2000Hz thời gian ở mức cao bằng 2/3 lần thời gian ở mức
thấp(không sử dụng bộ định thời)


6
================
Bi Tp ng dng nh thi
s dng ngt
S dng ngt ca cỏc b nh thi vit chng trỡnh
A. To xung vuụng f=2 KHz trờn P1.2, dựng b nh thi 1 Mode 2 (auto reload)
B. To xung vuụng f=50 Hz P1.2, dựng b nh thi 1 Mode 1 (16 bit)
C. To xung ch nht tn s 3000Hz thi gian mc cao bng 2/3 ln thi gian mc thp
THC HNH TRấN CHNG TRèNH Mễ PHNG

1. Soạn thảo, hợp dịch, cho chạy thử các ví dụ trên ch-ơng trình PINNACLE.

Ví dụ 1: Ch-ơng trình đ-a dữ liệu ra cổng (chy )

ORG 00H ; bắt đầu ch-ơng trình bằng địa chỉ nhớ 00h
MOV A, # 55h ; gán thanh ghi A bằng giá trị tức thì 55H
MOV P0, A ; đ-a ra cổng P0
MOV A, #0AAH ; gán thanh ghi A bằng giá trị tức thì 0AAH
MOV P1, A ; đ-a ra cổng P0
MOV A, #0FFH ; gán thanh ghi A bằng giá trị tức thì OFFH
MOV P2, A ; đ-a ra cổng P0
END ; kết thúc ch-ơng trình


Ví dụ 2: Ch-ơng trình dùng lệnh JMP addr. có vòng lặp vô hạn

ORG 00H ; ch-ơng trình trong vùng các vectơ ngắt
MOV A, # 55H ; nạp giá trị 55h vào A
NHAN: MOV P0, A ; gửi a ra cổng P0
MOV P1,A ; gửi a ra cổng P1
MOV P2,A ; gửi a ra cổng P2
SJMP NHAN ; trở về NHAN
END ; kết thúc dịch

Ví dụ 3: Ch-ơng trình dùng lệnh JMP addr. có kết thúc chờ

ORG 00H
LJMP MAIN ; nhẩy tới nhãn MAIN trong vùng địa chỉ 30H
ORG 30H; bỏ qua vùng nhớ dành cho các vectơ ngắt
MAIN: MOV A, # 55H ; ch-ơng trình nằm ngoài vùng vectơ ngắt
MOV P0, A
MOV P1,A
MOV P2,A
SJMP $ (hay HERE: SJMP HERE); chờ tại chỗ
End ; kết thúc dịch

Ví dụ 4: Ch-ơng trình dùng lệnh JMP @A+DPTR

MOV DPTR, # JMP_TBL
MOV A,#6 ;thay doi gia tri nap vao A va xem ket qua
JMP @A+DPTR
JMP_TBL:
AJMP LABEL0

AJMP LABEL1
AJMP LABEL2
AJMP LABEL3

7
LABEL0: MOV P0,#1h
LABEL1: MOV P1,#15h
LABEL2: MOV P2,#25h
LABEL3: MOV P3,#35h
END
Ví dụ 5: Ch-ơng trình có gọi ch-ơng trình con tạo trễ dùng DJN
ORG 00H
MOV R1, # 25
CALL DELAY ; gọi ch-ơng trình con
MOV P0, #0ABH ; đ-a ra cổng P0 giá trị ABH
SJMP $ ; chờ tại chỗ
DELAY: MOV R0, # 10 ; nạp R0 giá trị 10D
NHAN0:DJNZ R0, NHAN0 ; giảm R0 và nhẩy tại chỗ
DJNZ R1, DELAY ; giảm R1, nhẩy về DLAY nếu khác 0
RET ; kết thúc ch-ơng trình con DELAY
END ; kết thúc ch-ơng trình hợp dịch

Ví dụ 6: Ch-ơng trình dùng CJNE

ORG 00H
MOV A, # 05H ; nạp giá trị 05h vào A
NHAN: INC A ; tăng A lên 1
CJNE A, # 10H, NHAN ; so sánh a với 10H, nếu
; A<10H, nhẩy về NHAN
MOV P0,A ; khi A= 10H, gửi a ra cổng P0

SJMP $ ; kết thúc bằng chờ tại chỗ
END ; kết thúc dịch

Ví dụ 7: dùng CJNE và JNC
ORG 00H
LJMP MAIN ; nhẩy tới ch-ơng trình chính
ORG 30H
MAIN: MOV P1, #OFFH ; khởi tạo cổng P1 làm cổng vào
MOV A, P1 ; đọc cổng vào P1 vào A
CJNE A, #75, OVER ; so sánh với #75, nếu không, nhẩy tới OVER
SJMP EXIT ; nhẩy tới EXIT
OVER: JNC NEXT ; nếu CY = 0 khi A > 75 thì nhẩy tới NEXT
MOV R1, A ; nếu CY=1 khi A< 75 thì l-u A vào R1
SJMP EXIT ; nhẩy tới EXIT
NEXT: MOV R2, A ; l-u A vào R2 nếu > 75
E XIT : MOV P2, A ; đ-a hiển thị ra cổng pP2 nếu A = 75
SJMP $ ; kết thúc chờ
END ; kết thúc ch-ơng trình dịch

Chú ý : có thêm lệnh rẽ nhánh tiếp JNC NEXT vì có ba ph-ơng án lựa chọn

Ví dụ 8: Ch-ơng trình rẽ nhánh khi có cờ tràn TF0

ORG 00H
LJMP MAIN
ORG 30H
MAIN: CLR TF0 ; xoá cờ tràn
MOV TMOD, #01H ; ghi chế độ Timer1 M = 1
MOV TH0,#50H ; nạp TH0 = # 50H
MOV TL0, # 50H ; nạp TH0 = # 50H


8
SETB TR0 ; xác lập TR0 để Timer0 bắt đầu đếm
HERE: JNB TF0, HERE ; chờ bit TF0= 1
CLR TF0 ; xoá TF0
CLR TR0 ; xoá TR0 để Timer0 ngừng đếm
SJMP $
END

Ví dụ 9: ch-ơng trình ghi vo một vùng nhớ từ địa chỉ 60H tới 80H giá trị ff.
MOV 61h, 123
MOV R0, #60H ; nạp địa chỉ 60H cho R0
LOOP:MOV @R0, #0ffH ; ghi vào ô nhớ có địa chỉ 60H
INC R0 ; tăng R0 hay địa chỉ
CJNE R0, #80H, LOOP ; so sánh R0 = 80H ch-a, nếu ch- bằng, nhẩy về LOOP
Ví dụ 10: ch-ơng trình xoá một vùng nhớ từ địa chỉ 60H tới 80H.
MOV 61h, 123
MOV R0, #60H ; nạp địa chỉ 60H cho R0
LOOP:MOV @R0, #00H ; xoá ô nhớ có địa chỉ 60H
INC R0 ; tăng R0 hay địa chỉ
CJNE R0, #80H, LOOP ; so sánh R0 = 80H ch-a, nếu ch- bằng, nhẩy về LOOP

Ví Dụ 11. Các lệnh MOV với các loại địa chỉ đích và nguồn

ORG 00H
MOV A, #35H ; số 35H gửi vào thanh ghi A
MOV R1, #35H ; số 35H gửi vào thanh ghi R1
MOV 12H, #35H ; số 35H gửi vào ô nhớ địa chỉ 12H
MOV @R1, #35H ; số 35H gửi vào ô nhớ địa chỉ trong R1
MOV A, R1 ; nội dung thanh ghi R1 gửi vào A

MOV A, 25H ; nội dung ô nhớ địa chỉ 25H gửi vào A
MOV A, @R1 ; nội dung ô nhó địa chỉ ở R1 gửi vào A
MOV R2, A ; nội dung thanh ghi A gửi vào R2
MOV R2, 25H ; nội dung ô nhớ địa chỉ 25H gửi vào R2
MOV 10H, A ;thanh ghi A gửi vào ô nhớ địa chỉ 10H
MOV 10H, R1 ;thanh ghi R1 gửi vào ô nhớ địa chỉ 10H
MOV 10H, 12H ; ô nhớ địa chỉ 12H gửi vào ô nhớ địa chỉ 10H
END
===========================================================
Ví dụ 12. Nạp 20H ô nhớ ngoàI kể từ địa chỉ 2000H với giá trị 0FFH

ORG 00H
MOV DPTR, # 2000H ; nạp địa chỉ nhớ ngoài
MOV R1, #20H ; nạp số ô nhớ
MOV A, #0ffH ; ghi vào thanh ghi A
AGAIN: MOVX @DPTR , A ; nạp vào ô nhớ ngoài ở địa chỉ DPTR
INC DPTR ; tăng địa chỉ nhớ ngoài
DJNZ R1, AGAIN ; lặp lại 20H lần
END
=====================================================================
========
Ví dụ 13. Các lệnh hoán chuyển XCH, XCHD
ORG 00H
MOV R1,#20h
MOV A, #0A5H ; gửi #0A5H vào A
MOV R0, # 5AH ; gửi #05AH vào R0
MOV P0, A ; đ-a ra cổng P0

9
XCH A, R0 ; hoán chuyển 8 bit của A với R0

MOV P1, A ; đa ra cổng P1
MOV P0, A ; đa ra cổng P0
MOV P1, A ; đa ra cổng P1
XCHD A,@R1 ; hoán chuyển 4 bit thấp của R0 với A
MOV P0, A ; đa A ra cổng P0
MOV A, R0 ; chuyển R0 vào A
XCHD A, @R1
MOV P1, A ; đa R0 ra cổng P1
END
Ví dụ 14. Lệnh PUSH / POP trong chơng trình con

ORG 00H
LOOP: MOV A, #55H ; gửi #55H vào A
MOV P0, A ; đa ra cổng p0
CALL DELAY ; gọi trễ
MOV A, #0AAH ; đa #0AAH vào A
CALL DELAY ; gọi trễ
JMP LOOP ; trở về LOOP
DELAY:
PUSH 0E0H ; lu trữ A vào ngăn xếp có địa chỉ là SP = 08H
PUSH PSW ; lu trữ A vào ngăn xếp có địa chỉ là SP = 09H
MOV R1, #10 ; gửi #100H vào R1
HERE: DJNZ R1, HERE ; gim R1, nếu ch-a bngng 0, lại lặp lại
MOV A, #20H
POP PSW ; trả về giá trị PSW từ ngăn xếp có địa chỉ 09H
POP 0E0H ; trả về giá trị PSW từ ngăn xếp có địa chỉ 08H
RET ; trở về chng trình chính
END ; kết thúc chng trình dịch





×