Tải bản đầy đủ (.doc) (7 trang)

Ví dụ viết code vi điều khiển dùng ngắt

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 (86.12 KB, 7 trang )

CÁC CHƯƠNG TRÌNH SỬ DỤNG NGẮT
Nút nhấn p3.2
Bài 1: LED ĐƠN
Nhấn lần 1 sáng dồn p1, nhấn lần 2 chớp tắt p1, nhấn lần 3 dừng
Tg EQU 20h
kq EQU 21h
ckdl EQU 22h
sldl EQU 23h

ORG 0000h
LJMP main
org 0003h ; VETOR NGẮT NGOÀI 0
LJMP ngatngoai0

org 0030h ;NGOÀI TẤT CẢ CÁC NGẮT
main: MOV p1,#0
MOV ie,#81h ; CHO PHÉP NGẮT NGOAI 0
SETB it0 ; KÍCH MỨC THẤP
MOV R0,#00H
SJMP $ ; KHÔNG LÀM GÌ

ngatngoai0: INC R0
CJNE R0,#1,kt0
LCALL sangdon
kt0: CJNE R0,#2,kt1
LCALL choptat
kt1: CJNE R0,#3,thoat
LCALL dung
thoat: RETI

dung: MOV R0,#00h


MOV p1,#00h
CALL delay
LJMP main

sangdon: MOV p1,#00h
LCALL delay
MOV ckdl,#8
MOV kq,#00h
x11: MOV sldl,ckdl
MOV tg,#00h
SETB c
x12: MOV A,tg
RLC A
MOV tg,A
ORL A,kq
MOV p1,A
LCALL delay
DJNZ sldl,x12
MOV kq,p1
DJNZ ckdl,x11
SJMP sangdon
RETI

choptat: MOV p1,#00h
CALL delay
MOV p1,#0ffh
CALL delay
JMP choptat
RETI


delay: MOV R7,#3
del: MOV R6,#0ffh
del1: MOV R5,#0ffh
DJNZ R5,$
DJNZ R6,del1
DJNZ R7,del
RETI
End
BÀI 2: ĐỘNG CƠ BƯỚC
Nhấn lần 1 quay thuận, nhấn lần 2 quay nghịch, nhấn lần 3 dừng
ORG 0000h
LJMP main

org 0003h
LJMP ngatngoai0

org 0030h
main: MOV ie,#81h
SETB it0
MOV R0,#00h
SJMP $

ngatngoai0: INC R0
CJNE R0,#1,kt0
LCALL thuan
kt0: CJNE R0,#2,kt1
LCALL ngich
kt1: CJNE R0,#3,thoat
LCALL dung
thoat: RETI



thuan: MOV P2,#00H
LCALL delay
SETB c
MOV A,#00h
x11: RLC A
MOV p2,A
LCALL delay
JNB P2.3,x11
SJMP thuan
RET

ngich: MOV P2,#00H
LCALL delay
SETB c
MOV A,#00h
x12: RRC A
SWAP A
MOV p2,A
SWAP A
LCALL delay
JNB P2.0,x12
SJMP ngich
RETI

dung: MOV p2,#00h
MOV R0,#00h
LCALL delay
LJMP main


delay: MOV R7,#3
del: MOV R6,#0ffh
del1: MOV R5,#0ffh
DJNZ R5,$
DJNZ R6,del1
DJNZ R7,del
RETI
End
BÀI 3: LED 7 ĐOẠN
Nhấn lần 1 đếm100 , nhấn lần 2 đếm10, nhấn lần 3 dừng
ORG 0000h
LJMP main

org 0003h
LJMP ngatngoai0

org 0030h
main: MOV ie,#81h
SETB it0
MOV R0,#00h
SJMP $

ngatngoai0: INC R0
CJNE R0,#1,kt0
MOV 70H,#101
LCALL td0
kt0: CJNE R0,#2,kt1
MOV 70H,#11
LCALL td0

kt1: CJNE R0,#3,THOAT
LCALL dung

td0: MOV R1,#00H
x11: LCALL hex_bcd
LCALL bcd_7doan
LCALL delay_hienthi
INC R1
MOV A,R1
CJNE A,70H,x11
SJMP td0
RETI
hex_bcd: MOV A,R1
MOV B,#10
DIV AB
MOV 20h,B

MOV B,#10
DIV AB
MOV 21H,B

MOV B,#10
DIV AB
MOV 22H,B
RETI

bcd_7doan: MOV DPTR,#bang
MOV A,20h
MOVC A,@A+DPTR
MOV 25h,A


MOV A,21H
MOVC A,@A+DPTR
MOV 26H,A

MOV A,22H
MOVC A,@A+DPTR
MOV 27H,A
RETI

delay_hienthi: MOV R7,#2
del1: MOV R6,#010h
del: LCALL hienthi
DJNZ R6,del
DJNZ R7,del1
RETI

hienthi: MOV p1,25h
MOV p2,#01h
LCALL delay
MOV p2,#00h

MOV P1,26H
MOV P2,#02H
LCALL delay
MOV p2,#00h

MOV P1,27H
MOV P2,#04H
LCALL delay

MOV p2,#00h
RETI

DUNG: MOV R0,#00H
MOV P2,#00H
LCALL DELAY
LJMP MAIN
THOAT: RETI

delay: MOV R4,#0ffh
DJNZ R4,$
RETI
bang: db
0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h
End

×