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

Bài tập lớn Vi xử lý

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

p1.7
RS
RW
E
0
1
2
3
4
5
6
7
p1.0p1.1
p1.2
p1.3
p1.4p1.5
p1.6
p1.7
012
34567
E
p1.6p1.5p1.4
p1.0
p1.1
p1.2
p1.3
RW
RS
GND VCC
X1
CRYSTAL


FREQ=12MHz
C1
30p
C2
30p
81%
RV1
10k
VCC
C3
10uF
R1
10k
Reset
2
5 6
8 9
4
+
3
ON/C
CLR
CLR
7
=
ALL
10
A
B
C

D
1
2
4
3
GROUP6-TD06-HCMUTRANS
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1

VDD
2
VEE
3
LCD1
LM020L
GROUP VI - TD06 - HCMUTRANS
CALCULATOR
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35

P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13

P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
CALCULATOR
DIGITAL TECHNOLOGY
DIGITAL TECHNOLOGY
UNIVERSITY OF TRANSPORT IN HOCHIMINH CITY

TD06-NHÓM VI-ĐỀ TÀI 12

CALCULATOR
       
 GVHD: HOÀNG XUÂN DƯƠNG
 THỰC HIỆN: NHÓM VI
- Nguyễn Công Long TD06025
- Lê Văn Tình TD06042
- Hoàng Ngọc Ninh TD06034
-Trần Võ Ngọc Quỳnh TD06038
- Nguyễn Văn Thắng(A) TD06046
NHÓM 6
MICROPROCESSOR 8951
CALCULATOR
Let’s make things better HCM 25/4/2009
BÁO CÁO BÀI TẬP LỚN VI XỬ LÝ
 Nội dung:
A. PHẦN MỀM:
1. GIAO TIẾP 8951 VÀ LCD
2. GIAO TIẾP 8951 VÀ BÀN PHÍM
3. CHƯƠNG TRÌNH CHÍNH
4. CÁC CHƯƠNG TRÌNH CON
5. MÔ PHỎNG TRÊN PROTUES
B. PHẦN CỨNG:
1. BẢN VẼ MẠCH IN TRÊN ORCAD
2. MẠCH PHẦN CỨNG THỰC TẾ
C. KẾT LUẬN:
 Nhận xét của thầy giáo:
……………………………………………………………………………………
……………………………………………………………………………………

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
NHÓM 6
CALCULATOR
……………………………………………………………………………………
…………………………………………
Chữ ký:
NHÓM 6
CALCULATOR
A.PHẦN MỀM:
2. GIAO TIẾP 8951 VÀ LCD:
a. Tổng quan LCD
Trong những năm gần đây, LCD (Liquid Crystal Display) đã được sử dụng rộng rãi thay
thế cho LED 7 đoạn hay các loại LED nhiều đoạn khác. Ngày nay LCD với những tính
năng nổi trội của nó đã được sử dụng rất nhiều trong vi điều khiển. Khả năng hiện thị của
LCD là rất đa dạng, trực quan (chữ, số và nhiều loại ký tự đồ họa khác), dễ dàng đưa vào
mạch ứng dụng theo nhiều giao thức khác nhau, giá thành rẻ…
LCD sử dụng trong mạch: TC1602_01T

- Hình dạng, kích thước:
- Sơ đồ chân:
b. Giao tiếp LCD với 8951:
Nhóm chúng tôi thực hiện giao tiếp trực tiếp với 8951 (kết nối 8 bit):
- P2.0  P2.7 (của 8951) nối với DB0  DB7 (của LCD)
- P3.0 nối với E (chân 6 của LCD)
- P3.1 nối với RW (chân 5 của LCD)
- P3.2 nối với RS (chân 4 của LCD)
Để thuận lợi cho việc viết chương trình, chúng tôi định nghĩa các chân và nhóm chân
của LCD như sau (định nghĩa đầu chương trình):
RS BIT P3.2
RW BIT P3.1
E BIT P3.0
DATA_LCD EQU P2
Các chương trình con khi giao tiếp với LCD:
 Xử lý đường điều khiển E:
NHÓM 6
CALCULATOR
- Để thiết lập các lệnh hay gởi dữ liệu ký tự cho LCD, ta phải tạo ra một xung
cạnh xuống trên chân E, do đó ta đưa chân E lên mức cao, tạo một đỗ trễ
khoảng 200ms (để tạo độ rộng xung) và sau đó đưa E xuống thấp, ta có thể
coi nó là một chương trình con để ra lệnh cho LCD đọc dữ liệu, coi nó là
một chương trình con:
LENH:
SETB E
LCALL DELAY2
CLR E
RET
- Đọc dữ liệu hay trạng thái từ LCD: tạo một xung cạnh lên, chương trình như
sau:

LENH2: CLR E
LCALL DELAY2
SETB E
RET
- Chương trình delay: 200ms, timer1, chế độ 1
DELAY2: MOV TMOD,#10H
MOV R7,#4
LL: MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
DJNZ R7,LL
MOV R7,#00H
RET
 Kiểm tra trạng thái bận LCD:
Trong khi viết chương trình ta phải kiểm tra xem LCD có còn bận thực hiện lệnh đã
nhận trước đó hay không.
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời
gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi
giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên
để báo cho 8951 biết nó đang “bận”. Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0. Dựa
trên nguyên tắc đó ta viết đoạn chương trình con kiểm tra trạng thái bận của LCD như sau:
WAIT_LCD:
CLR E
CLR RS
SETB RW
MOV DATA_LCD,#0FFH
SETB E

MOV A,DATA_LCD
JB ACC.7,WAIT_LCD
CLR RW
CLR RS
RET
 Khởi tạo LCD: chương trình khởi tạo LCD như sau:
KHOITAO: CLR RS ;Chọn chế độ gởi lệnh
MOV DATA_LCD,#38H ;Chọn bus 8bit, font ký tự 5x8, 2 hàng
NHÓM 6
CALCULATOR
LCALL LENH ;Gọi lệnh thực thi xuất ra LCD
LCALL WAIT_LCD ;Kiểm tra trạng thái bận của LCD
CLR RS ;Chọn chế độ gởi lệnh
MOV DATA_LCD,#0FH ;LCD on, bật cursor
LCALL LENH
LCALL WAIT_LCD
RET
 Xóa màn hình hiển thị LCD:
CLR_LCD:
MOV DATA_LCD,#01H
LCALL LENH
LCALL WAIT_LCD
RET
 Ghi ra màn hình LCD:
CÁCH 1:
WRITE_TEXT:
SETB E ;E=1 bắt đầulệnh LCD
SETB RS ;RS=1 để chọn thanh chế độ xuất
;các dữ liệu ký tự để hiển thị lên LCD
MOV DATA_LCD,#’T’ ;goi dữ liệu ký tự chữ T lên LCD

CLR E ;E=0 tạo cạnh xuống
LCALL WAIT_LCD ; Kiểm tra xem LCD còn bận hay không
RET
CACH2:
WRITE_TEXT:
SETB RS
MOV DATA_LCD,#’T’
LCALL LENH
LCALL WAIT_LCD
RET
Trong chương trình có một số đoạn chương trình xuất chữ, VD:
WRITE_TEXT1:
MOV A,R6
MOV DPTR,#TEN1
MOVC A,@A+DPTR
SETB RS
MOV DATA_LCD,A
LCALL LENH
LCALL WAIT_LCD
MOV A,R6
INC A
MOV R6,A
CJNE A,#18,WRITE_TEXT1
RET
TEN1: DB ‘!DH GTVT TPHCM! ‘
NHÓM 6
CALCULATOR
3. GIAO TIẾP 8951 VỚI BÀN PHÍM 4x4:
Kết nối:
NHÓM 6

CALCULATOR
Xác định mã các phím nhấn bằng phần mềm:
- Khi nhấn phím thì hàng và cột tương ứng sẻ được nối với nhau
- Để xác định được phím nhấn ta quét bàn phím: ta thực hiện quét từng hàng,
đầu tiên cho hàng 1 ở mức logic 0, các hàng và cột khác ở mức logic 1, ta
đoc giá trị hàng và cột thông qua Port 1.
NHÓM 6
P1.7
P1.7
P1.7
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
H1
H2
H3
H4
C1
C2
C3
C4
3
2
1
0 4
5

6
7
8
9
A
B
C
D
E
F
CALCULATOR
- Nếu 1 phím nào đó được nhấn: hàng và cột tương ướng nối với nhau và ở
mức logic 0, tuân theo quy tắc sau ta xác định mã phím:
+Ta có số hàng là 4: đếm theo thứ tự
h
i
= 1(ứng với H4), 2( ứng với H3), 3(ứng với H2), 4(ứng với H1)
c
i
= 0 (ứng với C1), 4(ứng với C2), 8(ứng với C3), 12(ứng với C4)
Ta có thể thấy các cột hơn kém nhau 4 đơn vị
Mã phím
i
= (4-h
i
)+c
i
- Ta thực hiện quét 4 lần, lần lượt 4 hàng
- Chương trình con quét bàn phím như sau:
NHÓM 6

Xuất (mã quét hàng)
Ra port 1
Đọc giá trị hàng và
cột ở Port1 vào A
Mã quét hàng = 11111110 B
Nạp (đếm hàng) = 4
Xóa các bit hàng [4 bit thấp]
Giữ lại các bit cột [4 bit cao]
Có phím ấn?
[Có bít cột nào =0]
Quay trái mã quét hàng
[quét hàng kế]
Giảm (đếm hàng)
(Đếm hàng) = 0
Xóa (cờ)
1
SCAN_KEY
CALCULATOR
NHÓM 6
2
Xác định hàng có phím nhấn
(hàng) = 4 – (đếm hàng)
(mã phím) = (hàng)
1
CALCULATOR
Chương trình con quét bàn phím được viết như sau:
SCAN_KEY:
MOV R1,#0FEH
MOV R6,#4
SCAN:

MOV P1,R1
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,GET_CODE
XCH A,R1
RL A
NHÓM 6
Quay phải (A) qua cờ C [để
xác định vị trí của cột = 0]
(C) = 0
(mã phím) = (hàng) + 4
Giảm (đếm cột)
(Đếm cột) =
0
Đặt (cờ) = 1
Chuyễn mã cột về 4 bit thấp
(đếm cột) = 4
Cất mã phím vào A
Ret
2
CALCULATOR
XCH A,R1
DJNZ R6,SCAN
CLR F0
LJMP EXIT
GET_CODE:
PUSH ACC
MOV A,#4
CLR C
SUBB A,R6

MOV R5,A
POP ACC
SWAP A
MOV R4,#4
LOOP2:
RRC A
JNC SET_FLAG
XCH A,R5
ADD A,#4
XCH A,R5
DJNZ R4,LOOP2
SET_FLAG:
SETB F0
MOV A,R5
EXIT: MOV R1,#00H
MOV R6,#00H
RET
Mạch thực tế được kết nối với Port1 như sau:
NHÓM 6
2
5 6
8 9
4
+
3
ON/C
CLR
CLR
7
=

ALL
10
A
B
C
D
1
2
4
3
P1.4
P1.5
P1.6
P1.7
P1.0 P1.1 P1.2 P1.3
p1.7
RS
RW
E
0
1
2
3
4
5
6
7
p1.0p1.1
p1.2
p1.3

p1.4p1.5
p1.6
p1.7
012
34567
E
p1.6p1.5p1.4
p1.0
p1.1
p1.2
p1.3
RW
RS
GND VCC
X1
CRYSTAL
FREQ=12MHz
C1
30p
C2
30p
81%
RV1
10k
VCC
C3
10uF
R1
10k
Reset

2
5 6
8 9
4
+
3
ON/C
CLR
CLR
7
=
ALL
10
A
B
C
D
1
2
4
3
GROUP6-TD06-HCMUTRANS
D7
14
D6
13
D5
12
D4
11

D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM020L
GROUP VI - TD06 - HCMUTRANS
CALCULATOR
XTAL2
18
XTAL1
19
ALE
30

EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4

P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22

P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
CALCULATOR
SƠ ĐỒ MẠCH KẾT NỐI NHƯ SAU:
NHÓM 6
CALCULATOR
4. CHƯƠNG TRÌNH CHÍNH
NHÓM 6
Khởi tạo LCD
Xuất chữ
Đặt vị trí cusor cuối
dòng 1 của LCD
Nạp (đếm chữ số) = 5
Các chữ số sau khi nhấn lưu vào các ô
nhớ, bắt đầu là ô nhớ 30H, (R0) = 30H
Gán nội dụng các ô nhớ từ 30H tới 33H là
0FFH để dùng khi hiệu chỉnh các số trước
khi tính
Quét bàn phím
Đưa Port1 vào R4

đề kiểm tra
(R4) =
0F7H
1
3
Khởi tạo LCD
2
START
CALCULATOR
NHÓM 6
Tắt mở chương trình
Xóa màn LCD
(R4) =
07EH
1
4
Gán số tràn phép
tính trước = 0
3
(R4) =
077H
(R4)=
0BBH
(R4) =
0B7H
(R4) =
07BH
(R4)=
07DH
Xóa màn LCD

Gán số tràn phép
tính trước = 0
1
1
Điều chỉnh và lưu số
thứ nhất
Xóa màn LCD
Đánh dấu đây là
phép tính cộng
(60H)= 0FFh
1
Điều chỉnh và lưu số
thứ nhất
Xóa màn LCD
Đánh dấu đây là
phép tính trừ
(60H)= 0FFh
1
Kết quả
2
CALCULATOR
Đoạn mã chương trình chính:
ORG 0000H
JMP MAIN
ORG 0030H
START: MOV DATA_LCD,#0FFH
MAIN: LCALL KHOITAO
;#####################################################################################
;CHUONG TRINH CHINH
;

LCALL XUATCHU ;Xuất chữ giới thiệu mạch
NHAPSO:
LCALL KHOITAO
MOV DATA_LCD,#8FH
LCALL LENH
LCALL WAIT_LCD
MOV R0,#30H
MOV R3,#5
NHÓM 6
Xuất số khi có phím nhấn
2
4
(đếm chữ số)=
0
Xóa màn LCD
1
Dịch hiển thị sang trái để
đợi xuất số kế tiếp
Xóa màn LCD
Đưa vị trí cursor về đầu
dòng 1
Xuất chữ báo:
‘ Nhập 4 số thui! ’
Xóa toàn bộ dữ liệu cũ
CALCULATOR
MOV 30H,#0FFH
MOV 31H,#0FFH
MOV 32H,#0FFH
MOV 33H,#0FFH
KK: LCALL SCAN_KEY ;Quet ban phim

MOV R4,P1
CJNE R4,#0F7H,NEXT ;Tiep tuc scan key khi tin hieu vao tu ban phim ko co
JMP KK
NEXT: CJNE R4,#077H,XOATUNGKYTU
LCALL TATMO ;stop tat mo ct
XOATUNGKYTU:
CJNE R4,#0BBH,NEXT3
MOV 29H,#0
MOV 39H,#0
LCALL CLR_LCD
LJMP NHAPSO
NEXT3:
CJNE R4,#0B7H,NEXTCONG ;Xoa man hinh
MOV 29H,#0
MOV 39H,#0
LCALL CLR_LCD
JMP NHAPSO
NEXTCONG:
CJNE R4,#07BH,NEXTTRU ;Nhấn phím +
LCALL DIEUCHINHSOTHU1 ;Luu so vua nhap vao dung vi tri de tinh toan sau
LCALL WAIT_LCD
LCALL CLR_LCD
CLR A
MOV 60H,#0FFH
LJMP NHAPSO ;quay lai nhap lai so moi
NEXTTRU:
CJNE R4,#07DH,NEXTBANG ;Nhấn phím -
LCALL DIEUCHINHSOTHU1 ;Luu so vua nhap vao dung vi tri de tinh toan sau
LCALL WAIT_LCD
LCALL CLR_LCD

CLR A
MOV 60H,#00H
LJMP NHAPSO ;quay lai nhap lai so moi
NEXTBANG: ;Nhấn phím =
CJNE R4,#07EH,XUATSO
LCALL KETQUA
LJMP KK
XUATSO:
LCALL WRITE1 ;Xuất số ra màn hình LCD
MOV DATA_LCD,#07H ;Dich hien thi sang trai de xuat so ke tiep
LCALL LENH
LCALL WAIT_LCD
DJNZ R3,KK ;Số chữ số có quá 4 không, quá thì báo ngay!
LCALL CLR_LCD
MOV DATA_LCD,#06H
LCALL LENH
LCALL WAIT_LCD
MOV R6,#0
NHÓM 6
(Số ký tự xuất)=0
A = (số ký tự xuất)
SETB RS chọn cđ xuất
Lệnh xuất
Xuất ký tự ra màn
LCD
(Số ký tự xuất) =
16
DPTR chỉ tới bảng TEN2
WRITE_TEXT2
Lấy ký tự từ TEN2 vào A

Kiểm tra LCD còn bận không
Tăng (số ký tự xuất)
RET
CALCULATOR
LCALL WRITE_TEXT3 ;Xuất báo nhập quá 4 chữ số
LCALL CLR_LCD
LCALL XOA
LJMP NHAPSO
END
5. CÁC ĐOẠN CHƯƠNG TRÌNH CON:
+ Xuất chữ:
WRITE_TEXT2:
MOV R6,#0
WW: MOV A,R6
MOV DPTR,#TEN2
MOVC A,@A+DPTR
SETB RS
MOV DATA_LCD,A
LCALL LENH
LCALL WAIT_LCD
MOV A,R6
NHÓM 6
CALCULATOR
INC A
MOV R6,A
CJNE A,#16,WW
RET
NHÓM 6
CALCULATOR
+ Tắt mở:

NHÓM 6
(R3)=(dấu hiệu đã tắt)
Xuất chữ bye bye
Tắt màn LCD
(DATA_LCD) = 08H
Lệnh xuất
Kiệm tra LCD còn bận ko
Đưa Port1 vào R4
đề kiểm tra
(R4) =
077H
1
TATMO
(R3) = 22H
Gán lại dấu hiệu đã mở
(69H) = 00H
Xóa số tràn trong phép
tính
Xóa màn LCD
Xóa màn LCD
clear RS
Gán lại dấu hiệu đã tắt
(69H) = 22H
TATMO:
MOV R3,69H
CJNE R3,#22H,TAT
MOV 69H,#00H
MOV 39H,#0
LCALL CLR_LCD
JMP NHAPSO

TAT: LCALL CLR_LCD
MOV DATA_LCD,#06H
LCALL LENH
LCALL WAIT_LCD
MOV R6,#0
LCALL WRITE_TEXT4
LCALL CLR_LCD
MOV DATA_LCD,#08H
LCALL LENH
LCALL WAIT_LCD
MOV 69H,#22H
TAT1: MOV R4,P1
CJNE R4,#077H,TAT1
LJMP TATMO
RET
CALCULATOR
+Điều chỉnh và lưu số thứ nhất:
DIEUCHINHSOTHU1:
MOV A,33H
CJNE A,#0FFH,B1
MOV A,32H
CJNE A,#0FFH,B2
MOV A,31H
CJNE A,#0FFH,B3
MOV A,30H
CJNE A,#0FFH,B4
B4: MOV 43H,30H
MOV 42H,#00H
MOV 41H,#00H
MOV 40H,#00H

LJMP EXIT1
B3: MOV 43H,31H
MOV 42H,30H
MOV 41H,#00H
MOV 40H,#00H
LJMP EXIT1
B2: MOV 43H,32H
MOV 42H,31H
MOV 41H,30H
MOV 40H,#00H
LJMP EXIT1
B1: MOV 43H,33H
MOV 42H,32H
MOV 41H,31H
MOV 40H,30H
MOV 39H,29H
EXIT1: RET
NHÓM 6
(30H) =
0FFH
R
E
(43H) = (33H)
(33H) =
0FFH
(32H) =
0FFH
(31H)=
0FFH
(42H) = (32H)

(41H) = (31H)
(40H) = (30H)
(39H) = (29H)
R
E
(43H) = (32H)
(42H) = (31H)
(41H) = (30H)
(40H) = 0
R
E
(43H) = (31H)
(42H) = (30H)
(41H) = 0
(40H) = 0
R
E
(43H) = (30H)
(42H) = 0
(41H) = 0
(40H) = 0
RET
R
E
ĐIỀU CHỈNH SỐ THỨ 1
CALCULATOR
+ Kết quả:
KETQUA: LCALL CLR_LCD
MOV DATA_LCD,#8FH
LCALL LENH

LCALL WAIT_LCD
LCALL DIEUCHINHSOTHU2
MOV A,60H
CJNE A,#00H,TINH
LCALL TINHTRU
JMP TIEPTUC
TINH: LCALL TINHCONG
TIEPTUC: LCALL BANG
MOV R0,#30H
MOV R3,#5
NHÓM 6
Xóa màn LCD
Điều chỉnh số thứ 2
Tính cộng
Xuất kết quả bằng
Gán lại (R0) = 30H
Để tính phép tính khác
(60H) = 00H
KẾT QUẢ
Đặt vị trí cusor cuối dòng
1 của LCD
Tính trừ
Gán lại (R5) = 3
Để tính phép tính khác
RET
CALCULATOR
RET
+ Điều chỉnh số thứ 2:
DIEUCHINHSOTHU2:
MOV A,33H

CJNE A,#0FFH,EXIT2
MOV A,32H
CJNE A,#0FFH,BB2
MOV A,31H
CJNE A,#0FFH,BB3
MOV 33H,30H
MOV 32H,#00H
MOV 31H,#00H
MOV 30H,#00H
LJMP EXIT2
BB3: MOV 33H,31H
MOV 32H,30H
MOV 31H,#00H
MOV 30H,#00H
LJMP EXIT2
BB2: MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,#00H
LJMP EXIT2
EXIT2: RET
NHÓM 6
(30H) =
0FFH
R

E
(33H) =
0FFH
(32H) =

0FFH
(31H)=
0FFH
R

E
(33H) = (32H)
(32H) = (31H)
(31H) = (30H)
(30H) = 0
R
E
(33H) = (31H)
(32H) = (30H)
(31H) = 0
(30H) = 0
R

E
(33H) = (30H)
(32H) = 0
(31H) = 0
(30H) = 0
RET
R

E
ĐIỀU CHỈNH SỐ THỨ 2
A=(43H)+(33H)
Chia A cho 10

Chia A cho 10
Nạp phần dư vào (33H)
TÍNH CỘNG
A=A+(32H)+(42H)
RET
Chia A cho 10
Nạp phần dư vào (32H)
A=A+(31H)+(41H)
Chia A cho 10
Nạp phần dư vào (31H)
A=A+(30H)+(40H)
Nạp A vào (29H)
Nạp phần dư vào (30H)
A=A+(39H)
CALCULATOR
+ Tính cộng:
TINHCONG: CLR A
MOV B,#10
MOV A,43H
ADD A,33H
DIV AB
MOV 33H,B ;Luu vao the nay thi minh co
; the cong lien tuc cac so
MOV B,#10
ADD A,32H
ADD A,42H
DIV AB
MOV 32H,B ;Luu vao the nay thi minh co
; the cong lien tuc cac so
MOV B,#10

ADD A,31H
ADD A,41H
DIV AB
MOV 31H,B ;Luu vao the nay thi minh co
; the cong lien tuc cac so
MOV B,#10
ADD A,30H
ADD A,40H
DIV AB
MOV 30H,B
MOV 29H,A ;trong TH tinh cong ma co so
; thu 5(tran) xuat hien thi ta phai
; thuc hien cac lenh nay de duy tri so thu 5 tran do
MOV A,39H ;So tran thu 5 nay minh da luu
; vao 39h, nen gio lay ra de tinh
ADD A,29H
MOV 29H,A ;Luu vao the nay thi minh co
; the cong lien tuc cac so
CLR A
RET
NHÓM 6
Báo lỗi
TÍNH TRỪ
(33H) (43H) – (33H)
(39H)=0
N
O
K
Y
(30H)<=(40H

)
N
(31H)<=(41H
)
(32H)<=(42H
)
(33H)<=(43H
)
(33H)<=(43H
)
A[(43H)+10]–
(33H)
(33H) phần dư A/10
(32H) (32H)+1
N
N
N
N
T
Y
RET
(30H) (40H) – (30H)
Y
(30H)<=(40H
)
A[(40H)+10]– (30H)
(30H) phần dư A/10
(29H) (39H)-1
N
T

(32H) (42H) – (32H)
(32H)<=(42H
)
A[(42H)+10]– (32H)
(32H) phần dư A/10
(31H) (31H)+1
N
Y
(31H) (41H) – (31H)
(31H)<=(41H
)
A[(41H)+10]– (31H)
(31H) phần dư A/10
(30H) (30H)+1
N
CALCULATOR
+ Tính trừ:
NHÓM 6

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×