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

Thí nghiệm vi điều khiển ĐHCNHN

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.46 KB, 22 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA ĐIỆN
BỘ MÔN ĐO LƯỜNG & ĐIỀU KHIỂN

Giáo viên hướng dẫn :

BÙI THỊ KHÁNH HÒA

Sinh viên thực hiện

:

TRỊNH TRẦN ĐỨC

Lớp

:

LTCĐ-ĐH ĐIỆN 3 – K2

Hà Nội tháng 3 - 2010

1


LỜI NÓI ĐẦU
Trong những thập niên gần đây công nghiệp hoá hiện đại hoá ngày càng phát
triển mạnh mẽ. Kỹ thuật điện tử đã có những bước phát triển đặc biệt là trong kỹ
thuật điều khiển tự động. Sự ra đời và phát triển nhanh chóng của kỹ thuật thuật vi
điều khiển


Nước ta hiện nay, kỹ thuật vi điều khiển tuy mới phát triển song đã và đang là
công cụ được ứng dụng rộng dãi trong lĩnh vực tự động hoá. Nó đang phát triển
nhanh chóng, đã mang lại những thay đổi to lớn trong công nghệ cũng như trong
đời sống hàng ngày. Việc các máy móc thiết bị trở nên linh hoạt hơn, thông minh
hơn và làm việc với năng suất cao là nhờ có sự hoạt động thông minh của bộ vi
điều khiển.
Với điều kiện học tập tại trường em đã được tìm hiểu cơ bản về vi điều khiển
8051 và ứng dụng phần mềm PROTEUS để vẽ mạch nguyên lý và phần mềm
RCHPSIM để lập trình và chạy mô phỏng.
Mặc dù đã cố gắng tìm hiểu nhưng báo cáo của em không tránh khỏi những
thiếu sót, em rất mong nhận được ý kiến đóng góp của các thầy cô giáo và các bạn
để báo cáo của em hoàn thiện hơn và có thể đưa vào làm tài liệu thí nghiêm thực tế.
Em xin chân thành cảm ơn!

2


NỘI DUNG BÁO CÁO THÍ NGHIỆM
NỘI DUNG:
Ghép nối vi điều khiển AT 89C52 (8051) với 4 đèn Led 7 thanh như hình dưới:

Với yêu cầu thí nghiệm như sau:
1. Vẽ sơ đồ nguyên lý như trên sử dụng phần mềm PROTEUS.
2. Lập trình chương trình và chạy mô phỏng trên sơ đồ vẽ ở trên sử dụng
phần mềm RCHPSIM với yêu cầu như sau:
- Ấn nút ấn FCNT → Đèn Led (Nx) tăng.
- Ấn nút ấn RCNT → Nx giảm.
- Ấn nút ấn RESET → Nx = 0
Nếu Nx tăng đến một giá trị đặt (SV) → Cảnh báo chuông kêu (ALARM).


3


1. VẼ SƠ ĐỒ NGUYÊN LÝ SỬ DỤNG PHẦN MỀM PROTEUS

Để vào phần mềm PROTEUS, từ màn hình Desktop vào biểu tượng
hình sẽ hiển thị như sau:

Tiếp đó vào giao diện để chuẩn bị vẽ như hình dưới:

4

màn


a. Xác định số linh kiện cần dùng:
Trước khi vẽ ta nên xem sơ đồ của mình cần vẽ dùng bao nhiêu linh kiện. Với
sơ đồ nguyên lý như trên ta cần lấy các linh kiện sau:
STT
1
2
3
4
5
6
7
8
9
10


Linh kiện

Số lượng

AT 89C52

01

Điện trở R = 1K
Điện trở R = 10K
Đèn
Bốn đèn Led 7 thanh
Loa cảnh báo
Nguồn 1 chiều
Nút ân
Transistor
Rơ le

09
04
01
01
01
01
03
01
01

Bước tiếp theo để vẽ ta vào biểu tượng chữ “P” để vào thư viện lấy linh kiện,
ta xem cần phải vẽ linh kiện nào thì ta lấy tất cả các linh kiện cần vẽ ra màn hình.

b. Cách lấy các linh kiện trong thư viện:
1. Muốn lấy linh kiện AT 89C52 từ thư viện vào Microprocessor ICs → AT
89C52 → OK như hình dưới:

5


Lấy các linh kiện khác vào tương tự như trên, cụ thể như sau:
2. Muốn lấy điện trở R = 1K & 10K từ thư viện vào Resistors → Chọn loại 1K
& 10K → OK
3. Muốn lấy đèn từ thư viện tại Keywords nhập Lamp → OK→ chọn Lamp →
OK
4. Muốn lấy 4 đèn Led 7 thanh từ thư viện vào Optoelectrnics →chọn đèn xanh
hoặc đỏ → OK.
5. Muốn lấy loa cảnh báo, từ thư viện vào Speakers & Sounders → Buzzer →
OK.
6. Muốn lấy nguồn 1 chiều, từ thư viện tại Keywords nhập Battery → chọn
Battery → OK.

6


7. Muốn lấy nút ấn, từ thư viện tại Keyword nhập Button → chọn Button →
OK.
8. Muốn lấy Transistor thuận NPN, từ thư viện vào Transistors → tại Keywords
nhập NPN → chọn Transistor loại NPN → OK.
9. Muốn lấy Rơle, từ thư viện vào Switch & Relays → chọn Rơle loại 12V →
OK.
Sau khi lấy hết các linh kiện ra ngoài màn hình ta có giao diện chuẩn bị vẽ
gồm có tất cả các linh kiện ta vừa lấy gồm 10 linh kiện như hình dưới:


Sau đó ta đưa tất cả các linh kiện sắp xếp ra màn hình như hình dưới:

7


Bước tiếp theo sử dụng chuột để nối thành mạch nguyên lý như yêu cầu,
sau khi nối xong ta có được sơ đồ nguyên lý yêu cầu như hình dưới:

Sơ đồ nguyên lý

8


2. LẬP TRÌNH CHƯƠNG TRÌNH SỬ DỤNG PHẦN MỀM RCHPSIM
Chương trình Đếm & Cảnh báo:
;========================================================
;Chuong trinh viet cho mo hinh dem nguoi vao ra cua
;

Update 05/12/2005

;========================================================
org

0000H

ljmp init
org


;Vector reset

;Nhay toi chuong trinh khoi tao

0003H

;Vector ngat ngoai INT0

ljmp COUNTER ;Nhay toi ctc dem so nguoi vao/ra
org
reti
org
reti
org

000BH

;Vector ngat tran T0

;Khong dung thi ket thuc luon
0013H

;Vector ngat ngoai INT1

;Khong dung thi ket thuc luon
001BH

;Vector ngat tran T1
9



reti
org

;Khong dung thi ket thuc luon
0023H

reti
org

;Vector ngat cong truyen thong noi tiep

;Khong dung thi ket thuc luon
002BH

ljmp INT_T2

;Vector ngat tran T2
;Nhay toi ctcpvn tran T2

;========================================================
;Phan khai bao cac bien so, hang so
;========================================================
D0equ

50H

D1equ

51H


D2equ

52H

D3equ

53H

D4equ

54H

NumL

equ

55H ;ben chua so nguoi dem duoc

NumH

equ

56H

;======================================================
;cac bien dung cho cac chuong trinh con cong, tru, nhan
;chia cac so hai byte
;======================================================
ZOV


equ

00H

AlarmL

equ

68H

AlarmH

equ

69H

FCNT

equ

70H

RCNT

equ

71H

X0


equ

72H

X1

equ

73H
10


X2

equ

74H

X3

equ

75H

Y0

equ

76H


Y1

equ

77H

Y2

equ

78H

Y3

equ

79H

Z0

equ

7AH

Z1

equ

7BH


Z2

equ

7CH

Z3

equ

7DH

Z4

equ

7EH

Z5

equ

7FH

XL

equ

X0


XH

equ

X1

YL

equ

Y0

YH

equ

Y1

ZL

equ

ZH
X

Z0
equ

equ


Z1

XL

;========================================================
;Phan chuong trinh khoi tao
;========================================================
11


org

100

init:
clr

;bat dau chuong trinh khoi tao
EA

;cam tat ca cac ngat

mov SP,#2FH

;khoi tao ngan xep bat dau tu dia chi 30H

mov T2CON,#00H

;T2 lam viec o che do Auto_reaload


mov RCAP2H,#0DBH ;voi chu ky ngat 10ms
mov RCAP2L,#0FFH
mov TH2,RCAP2H
mov TL2,RCAP2L
setb IT0

;Dat ngat ngoai INT0 theo suon xuong

;==================================================
;khoi tao bien so, hang so
;==================================================
mov r7,#4
mov r6,#01h

;xac dinh LED bay thanh can hien thi

mov r5,#01H

;D0 sang dau tien

mov r0,#D0

;(r0)=dia chi cua D0

;==================================================
clr

P3.0


mov AlarmL,#0AH
mov AlarmH,#00H
mov NumH,#0H
mov NumL,#0H
setb TR2

;cho phep T2 chay

setb IE.5

;cho phep ngat tran T2

setb EX0

;cho phep ngat ngoai INT0

setb EA

;cho phep tat ca cac ngat

here:
12


sjmp here

;doi ngat

;========================================================
;Interrupt INT_T2

;co chuc nang dieu khien cac LED va cac LED bay thanh
;Input

: None

;Output

: None

;Destroys:
;========================================================
INT_T2:
clr

;bat dau ctcpvn tran T2
TF2

;xoa co tran bao ngat

mov XH,NumH
mov Xl,NumL
lcall hextodec
lcall xlat
lcall display
lcall COUNTER
lcall Reset1
lcall Alarm
reti
;========================================================
COUNTER:

clr

IE0

mov a,FCNT
cjne a,#0,KT1
jb

P1.0,KT2

mov FCNT,#1
mov a,NumL
add

a,#1
13


mov NumL,a
mov a,NumH
addc a,#0
mov NumH,a
sjmp KT2
KT1:
jnb

P1.0,KT2

mov FCNT,#0
KT2:

mov a,RCNT
cjne a,#0,KT3
jb

P1.1,Thoat

mov RCNT,#1
mov a,NumL
subb a,#1
mov NumL,a
mov a,NumH
subb a,#0
mov NumH,a
sjmp Thoat
KT3:
jnb

P1.1,Thoat

mov RCNT,#0
Thoat:
ret
;========================================================
Reset1:
jb

P1.2,thoat1
14



mov NumL,#0
mov NumH,#0
thoat1:
ret
;========================================================
Alarm:
mov XL,AlarmL
mov XH,AlarmH
mov a,NumL
add

a,#1

mov YL,a
mov YH,NumH
lcall sub16
jnC

th

setb P3.0
sjmp kth1
th:
clr

P3.0

kth1
ret
;========================================================

;Subroutine display
;co chuc nang hien thi led
;Input

: Ma bay thanh (D3,D2,D1,D0)

;Output

: none

;Destroys:
;========================================================
display:
15


djnz r7,H_THI
mov r0,#D0
mov r6,#01h
mov r7,#4
H_THI:
mov p2,r6
mov a,@R0
mov p0,a
inc r0
mov a,r6
rl a
mov r6,a
ret
;=======================================================

;Subroutine xlat
;co chuc nang chuyen tu soBCD sang ma 7 thanh
;Input

: Ma BCD

;Output

: BCD(D3,D2,D1,D0) chu so BCD so can hien thi

;Destroys:
;========================================================
xlat:
mov dptr,#SEG_COD ;
mov

a,D0 ;

movc a,@a+dptr ;
mov D0,a

;

mov dptr,#SEG_COD ;
mov

a,D1 ;
16



movc a,@a+dptr ;
mov D1,a

;

mov dptr,#SEG_COD ;
mov

a,D2 ;

movc a,@a+dptr ;
mov D2,a

;

mov dptr,#SEG_COD ;
mov

a,D3 ;

movc a,@a+dptr ;
mov D3,a

;

Ret
;========================================================
;Subroutine hextodec
;co chuc nang chuyen tu so HEX sang so BCD
;Input


: X(XH,XL)

;Output

: BCD(D4,D3,D2,D1,D0) chu so BCD so can hien thi

;Destroys:
;========================================================
hextodec:
mov YH,#00h
mov YL,#0ah
lcall DIV16
mov D0,Z0
mov XH,Z3
mov XL,Z2
lcall DIV16
17


mov D1,Z0
mov XH,Z3
mov XL,Z2
lcall DIV16
mov D2,Z0
mov XH,Z3
mov XL,Z2
lcall DIV16
mov D3,Z0
mov XH,Z3

mov XL,Z2
lcall DIV16
mov D4,Z0
ret
;========================================================
;subroutine div16
;

Z=X/Y

; input :

X:(XH,XL); Y:(YH,YL)

; output :

Z3,Z2 hold high and low bytes of the quotient

;

Z1,Z0 hold high and low bytes of the remainder

;

ZOV is set if Y=0, i.e., the result is out of range.

; calls :
; destroys:

sub16

a, r0, r1, r2, r3, r7, flags

;========================================================
div16:
push 7
push 3
push 2
18


push 1
push 0
mov

a,YH

; get divisor high byte

orl

a,YL

; OR with low byte

jnz

div_OK

; divisor OK if not 0


setb

ZOV

; else, overflow

pop

0

pop

1

pop

2

pop

3

pop

7

ret
div_OK:
mov


r1,XH

mov

r0,XL

mov

XH,#0

mov

XL,#0

mov

r3,#0

mov

r2,#0

mov

r7,#16

; store dividend in r1, r0
; clear partial remainder
; clear partial quotient
; set loop count


div_loop:
clr

C

mov
rlc

; clear carry flag
a,r0

a

; ... into...

mov

r0,a

mov

a,r1

rlc

; shift the highest bit of the dividend...

a
19



mov

r1,a

mov

a,XL

rlc

a

; ... remainder

mov

XL,a

mov

a,XH

rlc

; ... the lowest bit of the partial ...

a


mov

XH,a

lcall sub16

; attempt to subtract to see if the...
; ... partial remainder is as large or...
; ... larger than the divisor.;

mov

c,ZOV

cpl

c

jnc

div_1

; get subtraction external borrow
; complement external borrow;

mov XH,ZH
mov XL,ZL
div_1:
mov
rlc


a,r2
a

mov

r2,a

mov

a,r3

rlc

; add result bit to partial quotient

a

mov

r3,a

djnz

r7,div_loop

mov

Z3,r3


mov

Z2,r2

mov

Z1,XH

; put quotient in Z3, and Z2
; get remainder, saved before the...
20


mov

Z0,XL

clr

ZOV

pop

0

pop

1

pop


2

pop

3

pop

7

; last subtraction
; divisor is not 0

ret
;========================================================
;subroutine sub16
;

Z(ZH,ZL) = X(XH,XL) - Y(YH,YL)

;

if (Y > X)

;

ZOV = 1

;========================================================

sub16:
push acc
mov a,XL
clr

c

; load X low byte into accumulator
; clear carry flag

subb

a,YL

; subract Y low byte

mov

ZL,a

; put result in Z low byte

mov

a,XH

; load X high byte into accumulator

subb


a,YH

; subtract Y high byte with the borrow ...
; ... from low byte operation

mov

ZH,a

mov

ZOV,c

pop

; save result in Z high byte
; set ZOV id an external borrow is produced

acc

ret
;========================================================
21


;Bang ma bay thanh (Segment code)
;========================================================
SEG_COD:
db


;0

1

2

3

4

5

6

7

8 9

0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H

22



×