1. Trang chủ
  2. » Công Nghệ Thông Tin

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

6 177 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ví dụ Thực Hành Trên Pinnacle Pdf
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ Thuật Điện Tử
Thể loại Bài Tập
Thành phố Hà Nội
Định dạng
Số trang 6
Dung lượng 250,36 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chạy từng lệnh của chương trỡnh và quan sỏt bộ định thời.. Ch-ơng trình định thời tạo thời gian trễ ở chế độ 2.. Ch-ơng trình định thời tạo thời gian trễ 1phút = 60 sec Chạy chương trỡ

Trang 1

Thực hiện trờn Pinnacle

ễn tập lại toàn bộ kiến thức đó học

=============================================

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

Chạy từng lệnh của chương trỡnh và quan sỏt bộ định thời

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 tại 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

Chạy chương trỡnh bạn sẽ thấy chương trỡnh ngừng chạy sau khoảng 65 giõy Sửa chương

trỡnh để cú thời 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))

Trang 2

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)

Trang 3

================

Bài Tập ứng dụng định thời

sử dụng ngắt

Sử dụng ngắt của cỏc bộ định thời để viết chương trỡnh

A Tạo xung vuụng f=2 KHz trờn P1.2, dựng bộ định thời 1 ở Mode 2 (auto reload)

B Tạo xung vuụng f=50 Hz ở P1.2, dựng bộ định thời 1 ở Mode 1 (16 bit)

C Tạo xung chữ nhật tần số 3000Hz thời gian ở mức cao bằng 2/3 lần thời gian ở mức thấp

THỰC HÀNH TRấN CHƯƠNG TRèNH Mễ PHỎNG

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

Trang 4

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

Trang 5

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 vào 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

Trang 6

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 ; lưu trữ A vào ngăn xếp có địa chỉ là SP = 08H

PUSH PSW ; lưu trữ A vào ngăn xếp có địa chỉ là SP = 09H

HERE: DJNZ R1, HERE ; giảm R1, nếu ch-a bằngng 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

Ngày đăng: 29/06/2014, 11:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w