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

Tài liệu thí nghiệm vi xử lý 2015 NVD final

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 (1.78 MB, 41 trang )

H

d

B

B

ào bi

Vào thanh công c
ên file ( ví d ài 1 )

Vào Select device ch

Project, ch

Atmel, ch

New Project, ch

89C51, ch
89C52

OK


Vào File ch

New


Sau khi so

Vào File ch

save as

ên file ( chú ý

“.asm” ho

.c “ )


5. Kích chu
ào d +
ph
ào Source Group1 , Kích chu
d
“.asm”, Kích chu
close, Kích chu
ào d +

ào Bai1.asm

Target1 s
Source Group 1, Kích chu
ch Add files to group ‘Source Group1’, Ch
ên file , Kích chu
Add, Kích chu
Source ta



Vào Project ch Options for Target ‘Target1’; ch Ok.
Project ch
rget ‘Target1’ ta th
:


Kích chu

Ch
OK

ào Output

Create Hex File

Vào Project ch

Nh

Sau khi so
F11

ên file

Name of Executable ; Ch

Rebuild all target files, n


àd
Step

ào Debug ch

Start/Stop Debug Session .


Nh
trong c Value
ram trong vào m
ch

òng l
ào View ch
Address gõ D:0x00

Memory Window
ào m

Peripheals


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

BÀI THÍ NGHIỆM VI XỬ LÝ 2015
Mở file “fullkit8051” theo đường dẫn sau: C:\TNVXL\students\full kit 8051\mo phong, để mở
file mạch nguyên lý mô phỏng trên phần mềm proteus 8.1. ( bài thí nghiệm 1, 2,3, 4, 6)


Bài thí nghiệm 1
Bật tắt led đơn, hàng led
1.1. Mô tả mạch phần cứng

Hình 1: Mạch nguyên lý nháy led
Mạch phần cứng được mô tả như trong hình 1, cổng 0 nối với 8 led đơn (viết các giá trị 0/1 ra
các chân tương ứng của cổng 0 để bật/tắt led)
1.2. Chương trình mẫu
1.2.1. Chương tình nháy 1 led đơn
;=====================
; Nhay mot led don
; start
;=====================
7


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN
led bit p0.0
org 00h
main:
clr led
lcall delay_500ms
setb led
lcall delay_500ms
sjmp main
delay_500ms:
MOV 50H,#200
loop: MOV 51H,#250
DJNZ 51H,$

DJNZ 50H,loop
RET
end

[Year]

;led tai chan P0.0

;bat led
;delay 500ms
;tat led

1.2.2 Chương trình sáng lần lượt các led
;===========================
; Sang lan luot cac led
; start
;============================
led_data equ p0
org 00h
main:
mov a,#0x00
setb c
loop:
rlc a
cpl a
mov led_data,a
cpl a
lcall delay_500ms
sjmp loop
delay_500ms:

MOV
l1:
MOV
DJNZ
DJNZ
RET
end

50H,#200
51H,#250
51H,$
50H,l1

1.3 Yêu cầu
- Soạn thảo, dịch, chạy, ghi lại kết quả
- Mô phỏng trên phần mềm proteus
8


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

Bài thí nghiệm 2:
Led 7 thanh
2.1. Mô tả phần cứng

Hình 2: Mạch nguyên lý nối led 7 thanh
Các chân A-DP của led 7 thanh tương ứng được nối với P1.0-P1.7, 2 chân chọn led thanh thanh
1-2 tương ứng nối với P2.2-P2.3

2.2 Chương trình mẫu
2.2.1. Hiện 1 số
;======================
; Hien mot so
; start
;======================
data_7seg
equ p1
led1 bit p2.2
led2 bit p2.3
org 00h
main:
mov dptr,#ma7seg ;so 0
inc dptr
;+1
inc dptr
inc dptr
inc dptr
clr led2
clr a
movc a,@a+dptr
mov data_7seg,a

;so 4
;disable 7seg no2

9


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN


[Year]

sjmp $ ;stop here
ma7seg:
db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
end
2.2.2. Hiện 2 số (quét led)
============================
; hien hai so
; start
;===========================
data_7seg
equ p1
led1 bit p2.2
led2 bit p2.3
org 00h
main:
;hien so 57 theo pp quet led
mov dptr,#ma7seg
setb led1
;enable 7seg no1
mov a,#5
movc a,@a+dptr
mov data_7seg,a
;so 5
lcall delay
;delay 250us
clr led1
;disable 7seg no1

setb led2
mov a,#7
movc a,@a+dptr
mov data_7seg,a
lcall delay
clr led2
sjmp main

;so 7

delay:
mov r7,#250
djnz r7,$
ret
ma7seg:
db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
end
2.2.3. Đếm từ 01-99 (quét led)
;======================
; dem tu 1 den 99
;======================
data_7seg
equ p1
led1 bit p2.2
led2 bit p2.3
10


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN


[Year]

org 00h
main:
mov r5,#100
reset_r6:
mov R6,#0
loop:
mov a,r6
cjne a,#100,skip
sjmp reset_r6
skip:
mov b,#10
div ab
mov dptr,#ma7seg
setb led1
movc a,@a+dptr
mov data_7seg,a
lcall delay_250us
clr led1
setb led2
mov a,b
movc a,@a+dptr
mov data_7seg,a
lcall delay_250us
clr led2

;1 so quet 100 lan

;dem len 100 thi quay ve 0


;tach chu so hang chuc luu torng a, don vi luu trong b

;enable 7seg no1
;chu so hang chuc
;delay 250us
;disable 7seg no1

; chu so hang don vi

djnz r5,loop
; r5=0 tang r6 len 1
inc r6
mov r5,#100
sjmp loop
;==================
delay_250us:
mov r7,#250
djnz r7,$
ret
;=================
ma7seg:
db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
end
2.3 Yêu cầu
- Soạn thảo, dịch, chạy, ghi lại kết quả
- Mô phỏng trên phần mềm proteus
11



Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

Bài thí nghiệm 3
Hiển thị LCD
3.1. Mô tả phần cứng

Hình 3: Mạch nguyên lý nối LCD 16x2
Sử dụng LCD 16x2, cổng P2.4 nối với chân D4, cổng P2.5 nối với chân D5, cổng P2.6 nối với
chân D6, cổng P2.7 nối với chân D7. Tín hiệu điều khiển từ cổng P2.0 nối chân RS, cổng P2.1
nối với chân E. Sử dụng một biến trở nối với chân VEE của LCD để điều chỉnh tương phản màn
hình.
3.2. Chương trình mẫu
;==========================
; Hien thi LCD
;==========================
$mod51
U equ 31
L equ 32

; memory location to hold upper nibble
; memory location to hold lower nibble

Port equ P2
; data port to connect LCD
RS equ P2.0
; RS pin connection
RW equ P2.2
; RW pin connection

EN equ P2.1
; EN pin connection
;============================
; Connection of Port
; Port.4 = DB4
; Port.5 = DB5
; Port.6 = DB6
; Port.7 = DB7
;============================
12


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

SS MACRO L1
MOV R1,#0
MOV DPTR,L1
LCALL lcd_puts
ENDM
;===========================
ORG 0000h
CLR RW
ACALL init
SS #STRING1
MOV A, #0c0H
; switch to 2nd line of LCD
ACALL lcd_cmd
SS #STRING2

SJMP $
; INFINITE LONG LOOP
;===========================
; Separator
;===========================
separator:
MOV U,A
; save A at temp location U
ANL U,#0F0H
; mask it with 0Fh (28h & F0h = 20h)
SWAP A
; swap nibble (28h => 82H)
ANL A,#0F0H
; mask it with 0fh (82h & f0h = 80h)
MOV L,A
; save it at temp location L
RET
; return
;========================
; Move To Port
; MOV port,A
; put content of A to port
; ANL port,#0x0FH
; ORL port,A
;========================
move_to_Port:
MOV C,Acc.4
MOV port.4,C
MOV C,Acc.5
MOV port.5,C

MOV C,Acc.6
MOV port.6,C
MOV C,Acc.7
MOV port.7,C
SETB EN
; make EN high
ACALL DELAY
; call a short delay routine
CLR EN
; clear EN
ACALL DELAY
; short delay
RET
; return
;=================================
13


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

;LCD command
;=================================
lcd_cmd:
CLR RS
; clear rs, going to send command
ACALL separator
; separate the command and save to U and L
MOV A, U

; copy U to A
ACALL move_to_port
; move content of a to port
MOV A, L
; copy L to A
ACALL move_to_port
; move content of a to port
RET
; return
;=================================
; LCD data
;=================================
lcd_data:
SETB RS
; RS=1, going to send DATA
ACALL separator
; separate the data and save to U & L
MOV A, U
; copy U to A
ACALL move_to_port
; send it to LCD
MOV A, L
; copy L to A
ACALL move_to_port
; send it to LCD
RET
; return
;=================================
; Initilization
;=================================

init:
ACALL delay
; some delay to lcd after power on
ACALL delay
CLR port.4
SETB port.5
CLR port.6
CLR port.7
; send 20h to LCD to set 4 bit mode
CLR RS
; after that we can use lcd_cmd
SETB EN
; make EN switching
ACALL delay
CLR EN
MOV A, #28H
ACALL lcd_cmd
MOV A, #0CH
ACALL lcd_cmd
MOV A, #06H
ACALL lcd_cmd
MOV A, #01H
ACALL lcd_cmd
RET
;=================================
lcd_puts:
14


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN


[Year]

MOV A,R1
MOVC
A,@A+DPTR
LCALL
lcd_data
INC R1
CJNE R1,#15,lcd_puts
RET
;=================================
delay:
MOV R6, #5FH
L2: MOV R7,#3FH
L1: DJNZ R7, L1
DJNZ R6, L2
RET
;=================================
STRING1: DB ' VI XU LY '
STRING2: DB '==TEST PROGRAM=='
end
3.3 Yêu cầu
- Soạn thảo, dịch, chạy, gi lại kết quả
- Mô phỏng trên phần mềm proteus

Bài thí nghiệm 4:
Giải mã phím (mã trân phím 2x2)
4.1. Mô tả phần cứng


Hình 4: Mạch nguyên lý giải mã phím
Hai hàng được nối với P3.4-P3.5, 2 cột được nối với P3.6-P3.7
4.2. Chương trình
4.2.1. 1 phím bật tắt led đơn
;=================================
; Mot phim bat tat mot led
;=================================
15


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

ORG 00H
MAIN:
CLR P3.4
SETB P3.5
JNB P3.6,PHIM1
JMP MAIN
PHIM1:
CLR P0.0
acall delay_500ms
SETB P0.0
RET
delay_500ms:
MOV 50H,#200
l1:
MOV 51H,#250
DJNZ 51H,$

DJNZ 50H,l1
RET
END
4.2.2. Quét phím hiển thị LCD
;=================================
; Quet phim hien thi len LCD
;=================================
$mod51
U equ 31
; memory location to hold upper nibble
L equ 32
; memory location to hold lower nibble
Port equ P2
; data port to connect LCD
RS equ P2.0
; RS pin connection
RW equ P2.2
; RW pin connection
EN equ P2.1
; EN pin connection
;=================================
; Connection of Port
; Port.4 = DB4
; Port.5 = DB5
; Port.6 = DB6
; Port.7 = DB7
;=================================
SS MACRO L1
MOV R1,#0
MOV DPTR,L1

LCALL lcd_puts
ENDM
;=================================
ORG 0000h
16


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

CLR RW
ACALL init
main:
SS #STRING1
MOV A, #0c0H
; switch to 2nd line of LCD
ACALL lcd_cmd
SS #STRING2
;=================================
quetphim:
;QUET HANG 1
CLR P3.4
SETB P3.5
JNB P3.6,PHIM1
JNB P3.7,PHIM2
;============ QUET HANG 2===========
SETB P3.4
CLR P3.5
JNB P3.6,PHIM3

JNB P3.7,PHIM4
sjmp main
;=================================
PHIM1:
MOV A, #0c0H
; switch to 2nd line of LCD
ACALL lcd_cmd
SS #KEY1
JNB P3.6,$
sjmp main
;=================================
PHIM2:
MOV A, #0c0H
; switch to 2nd line of LCD
ACALL lcd_cmd
SS #KEY2
JNB P3.7,$
sjmp main
;=================================
PHIM3:
MOV A, #0c0H
; switch to 2nd line of LCD
ACALL lcd_cmd
SS #KEY3
JNB P3.6,$
sjmp main
;=================================
PHIM4:
MOV A, #0c0H
; switch to 2nd line of LCD

ACALL lcd_cmd
SS #KEY4
17


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

JNB P3.7,$
sjmp main
;=================================
; Separator
;=================================
separator:
MOV U,A
; save A at temp location U
ANL U,#0F0H
; mask it with 0Fh (28h & F0h = 20h)
SWAP A
; swap nibble (28h => 82H)
ANL A,#0F0H
; mask it with 0fh (82h & f0h = 80h)
MOV L,A
; save it at temp location L
RET
; return
;=================================
; Move To Port
; MOV port,A

; Put content of A to port
; ANL port,#0x0FH
; ORL port,A
;=================================
move_to_Port:
MOV C,Acc.4
MOV port.4,C
MOV C,Acc.5
MOV port.5,C
MOV C,Acc.6
MOV port.6,C
MOV C,Acc.7
MOV port.7,C
SETB EN
; make EN high
ACALL DELAY ; call a short delay routine
CLR EN
; clear EN
ACALL DELAY ; short delay
RET
; return
;=================================
; LCD command
;=================================
lcd_cmd:
CLR RS
; clear rs, going to send command
ACALL separator
; separate the command and save to U and L
MOV A, U

; copy U to A
ACALL move_to_port
; move content of a to port
MOV A, L
; copy L to A
ACALL move_to_port
; move content of a to port
RET
; return
;=================================
18


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

; LCD data
;=================================
lcd_data:
SETB RS
; RS=1, going to send DATA
ACALL separator
; separate the data and save to U & L
MOV A, U
; copy U to A
ACALL move_to_port
; send it to LCD
MOV A, L
; copy L to A

ACALL move_to_port
; send it to LCD
RET
; return
;=================================
; Initilization
;=================================
init:
ACALL delay ; some delay to lcd after power on
ACALL delay
CLR port.4
SETB port.5
CLR port.6
CLR port.7
; send 20h to lcd to set 4 bit mode
CLR RS
; after that we can use lcd_cmd
SETB EN
; make EN switching
ACALL delay
CLR EN
MOV A, #28H
ACALL lcd_cmd
MOV A, #0CH
ACALL lcd_cmd
MOV A, #06H
ACALL lcd_cmd
MOV A, #01H
ACALL lcd_cmd
RET

;=================================
lcd_puts:
MOV A,R1
MOVC
A,@A+DPTR
LCALL
lcd_data
INC R1
CJNE R1,#15,lcd_puts
RET
;=================================
delay:
MOV R6, #5FH
L2: MOV R7,#3FH
19


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

L1: DJNZ R7, L1
DJNZ R6, L2
RET
;=================================
STRING1: DB ' VI XU LY '
STRING2: DB ' Press one key '
KEY1: DB ' KEY 1
'
KEY2: DB ' KEY 2

'
KEY3: DB ' KEY 3
'
KEY4: DB ' KEY 4
'
end
4.3 Yêu cầu
- Soạn thảo, dịch, chạy, ghi lại kết quả
- Mô phỏng trên phần mềm proteus

Bài thí nghiệm 5:
Giải mã bàn phím 4x4
5.1 Mô tả phần cứng

Hình 5: Mạch nguyên lý giải mã phím 4x4
20


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

Bốn hàng được nối với P2.0-P2.3, bốn cột được nối với P2.4-P2.7. Bấm từng phím từ trái sang
phải, từ trên xuống dưới sẽ hiện số tuần tự 0 đến 9 trên led 7 thanh. . Mô phỏng trên proteus bằng
cách mở file “Keypad_Scan_Interrupt” theo đường dẫn sau: C:\TNVXL\students\Bai 5 - Quet
ban phim dung ngat.
5.2 Chương trình mẫu
;=================================
; giai ma ban phim 4x4
;================================

$NOMOD51
$INCLUDE (8051.MCU)
;=================================
; Reset Vector
org 0000h
jmp Start
ORG 0003H
LJMP INT0_ISR
;=================================
; CODE SEGMENT
;=================================
org 0100h
Start:
SETB EA

; Enable Interrupt

SETB EX0

; Enable INT0

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

SETB IT0

; INT0 NGAT THEO SUON XUONG

;=================================
MOV


TMOD, #20H

MOV

TH1, #0B0H

MOV

P2, #0FH

MOV

P1, #0

MOV

R1, #0

CLR

A

; COUNT

21


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN


[Year]

SJMP $
;=================================
INT0_ISR:
CALL DELAY
JB

P3.2, EXIT

MOV

P2, #11111110B

MOV

A, P2

ANL

A, #0F0H

CJNE A, #0F0H, ROW0
MOV

P2, #11111101B

MOV

A, P2


MOV

R1, #4

ANL

A, #0F0H

CJNE A, #0F0H, ROW1
MOV

P2, #11111011B

MOV

A, P2

MOV

R1, #8

ANL

A, #0F0H

CJNE A, #0F0H, ROW2
MOV

P2, #11110111B


MOV

A, P2

MOV

R1, #12

ANL

A, #0F0H

CJNE A, #0F0H, ROW3
ROW0:
RLC

A

JNC

MATCH

INC

R1

SJMP ROW0
ROW1:
RLC


A

JNC

MATCH
22


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN
INC

[Year]

R1

SJMP ROW1
ROW2:
RLC

A

JNC

MATCH

INC

R1


SJMP ROW2
ROW3:
RLC

A

JNC

MATCH

INC

R1

SJMP ROW3
MATCH:
MOV

A, #0

MOV

A, R1

MOV

P1, A

MOV


R1, #0

MOV

P2, #0F0H

EXIT:

RETI
;=================================
DELAY:
SETB TR1
JNB

TF1, $

CLR

TF1

CLR

TR1

RET
;=================================
END
5.3 Yêu cầu
- Soạn thảo, dịch, chạy, ghi lại kết quả
- Mô phỏng trên phần mềm proteus

23


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

Bài thí nghiệm 6:
Truyền tin UART
6.1. Chương trình mẫu
;=================================
; Gửi 1 byte từ máy tính xuống vi điều khiển, vi điều khiển đọc rồi gửi lại byte tương tự lên máy
tính.
;=================================
org 000h
ljmp begin
org 23h
ljmp serial_IT
;=================================
;/**
; * FUNCTION_PURPOSE: This file set up uart in mode 1 (8 bits uart) with
; * timer 1 in mode 2 (8 bits auto reload timer).
; * FUNCTION_INPUTS: void
; * FUNCTION_OUTPUTS: void
; */
;=================================
org 0100h
begin:
MOV SCON, #50h ; /* uart in mode 1 (8 bit), REN=1 */
ORL TMOD, #20h ; /* Timer 1 in mode 2 */

MOV TH1, #0FDh ; /* 9600 Bds at 11.059MHz */
MOV TL1, #0FDh ; /* 9600 Bds at 11.059MHz */
SETB ES
; /* Enable serial interrupt*/
SETB EA
; /* Enable global interrupt */
SETB TR1
; /* Timer 1 run */
JMP $
; /* endless */
;/**
; * FUNCTION_PURPOSE: serial interrupt, echo received data.
; * FUNCTION_INPUTS: P3.0(RXD) serial input
; * FUNCTION_OUTPUTS: P3.1(TXD) serial output
; */
serial_IT:
JNB RI,EMIT_IT
; test if it is a reception
CLR RI
; clear reception flag for next reception
MOV A,SBUF
; read data from uart
MOV SBUF,A
; write same data to uart
LJMP END_IT
EMIT_IT:
CLR TI
; clear transmition flag for next transmition
END_IT:
RETI

end
24


Tài liệu TN Vi xử lý-Bộ môn KTĐ&THCN

[Year]

6.2 Yêu cầu
- Soạn thảo, dịch, chạy, ghi lại kết quả
- Mô phỏng trên phần mềm proteus

Bài thí nghiệm 7
Đo nhiệt độ bằng cảm biến LM35
7.1 Mô tả phần cứng

Hình 6: Mạch nguyên lý mạch đo nhiệt độ
Sử dụng CLOCK ngoài cấp cho ADC0808. Đọc nhiệt độ vào chân IN0 của ADC. Chân dữ liệu
của 8051 gửi lên led 7 thanh là: P0.0 – P0.6 nối lần lượt với các chân A – G của led 7 thanh . Mô
phỏng trên proteus bằng cách mở file “do nhiet do_89c51” theo đường dẫn sau:
C:\TNVXL\students\Bai 7 Do nhiet do\mo phong.
7.2 Chương trình
;=================================
; do nhiet do
;=================================
start
bit
p1.3
eoc
bit

p1.4
ale
bit
p1.5
org
td:

000h
lcall
lcall
lcall
lcall
jmp

cdoi
hex_bcd
bcd_7doan
hienthi
td
25


×