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