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

Bài tập lớn ASM

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

MỤC LỤC

Trang
Lời nói đầu………………………………………………………………….0
PHẦN I: Sơ đồ mạch và các linh kiện sử dụng………………………… 1
1.Sơ đồ mạch……………………………………………………………… 1
2.Linh kiện………………………………………………………………….2
a.Bàn phím 4x4…………………………………………………………… 2
b.LCD 16x2……………………………………………………………… 3
c.Vi điều khiển 8051……………………………………………………… 4
d.Linh kiện khác……………………………………………………………5
PHẦN II: Chương trình và giải thích lệnh……………………………….7













LỜI NÓI ĐẦU

Hiện nay có rất nhiều các loại vi điều khiển của các hãng khác
nhau.Ví dụ như họ 89c51, AVR của hãng Atmel,PIC của hãng
Microchip,…vv.


Trong các loại vi điều khiển thì phổ biến nhất ở Việt Nam hiện
nay là chip vi điều khiển thuộc họ 8051. Do Intel sản xuất là một
trong những chip vi điều khiển xuất hiện sớm nhất nên nó là nền
tảng cho sự phát triển của các họ vi điều khiển thế hệ sau.Vì thế
nên nếu hiểu về 8051 thì sẽ dễ dàng hơn cho việc tìm hiểu các chip
vi điều khiển khác thuộc thế hệ sau. Hơn nữa nó được sử dụng
trong hầu hết các loại đồ điện tử dân dụng ở nước ta hiện nay cho
nên lập trình cho vi điều khiển đã được đưa vào chương trình học
cho sinh viên.
Qua quá trình học tập trên lớp và tìm hiểu tài liệu về 8051.
Nhóm chúng em đã thực hiện mô phỏng chiếc máy tính điện tử cơ
bản sử dụng bàn phím 4x4 và màn hình LCD 2x16 trên Proteus.
Cơ sở lập trình sử dụng ngôn ngữ Assembler. Là một chiếc máy
tính đơn giản có thể thực hiện được những phép tính như cộng,
trừ, nhân, chia. Chi tiết được trình bày ở phần sau bài báo cáo của
nhóm.
Do điều kiện có hạn nên nhóm em chưa thể làm được mạch
thực tế. Nhóm sử dụng phần mềm Proteus để mô phỏng hữu hiệu
về bài thiết kế. Trong quá trình làm báo cáo còn nhiều hạn chế,
nhóm em hi vọng được sự chỉ bảo của giáo viên bộ môn và mọi
người.
Chúng em xin chân thành cảm ơn!






PHẦN I
SƠ ĐỒ MẠCH VÀ CÁC LINH KIỆN SỬ DỤNG


1. Sơ đồ mạch




Sơ đồ mạch được vẽ trên phần mềm Proteus. Sử dụng bàn phím
(keypad) 4x4 và mành hình LCD 2x16 có trong thư viện linh kiện của phần
mềm. Kết hợp với một số linh kiện khác như điện trở, tụ điện…

2. Linh kiện
a. Bàn phím ma trận 4x4


* Cấu tạo
:
Phím bấm được nối thành ma trận 4 hàng x 4 cột các hàng và cột được
nối với các chân cổng vào ra của vi điều khiển Psoc. Khi một phím được bấm,
nó sẽ nối một hàng và một cột tương ứng. Như vậy ta sẽ có 16 nút nhấn mà
chỉ mất có 8 chân vi điều khiển còn muốn tiếp kiệm hơn nữa là dùng con giải
mã 74138 hay dùng 74LS154. Khi nút 0 được nhấn thì nó nối giữa cột 1 hàng
1. Còn nút 1 được nhấn thì cột 2 và hàng 1 được nối hay nút 2 được nhấn thì
nối giữa cột 3 và hàng 1 cứ như vậy đến nút thứ 15.

*Nguyên lý quét:

Thuật toán quét phím được sử dụng là lần lượt tìm hàng và tìm cột
(hoặc ngược lại) Khi tìm hàng, các hàng sẽ được đặt làm đầu vào,các cột được
đặt làm đầu ra mức thấp. Sau đó kiểm tra các hàng xem có hàng nào ở mức
thấp hay không (có phím nào bấm gây ra nối với cột hay không)? Sau khi xác

định được hàng sẽ đặt các cột làm đầu vào, hàng vừa tìm được làm đầu ra
mức thấp. Việc kiểm tra được tiến hành với các cột. Sau khi xác định được
hàng và cột sẽ suy ra phím được bấm.
Nói thế này cũng khó hiểu nhỉ nhưng mà chỉ cần hiểu sơ qua thuật toán quét
LED như thế này:
+ Đầu tiên cho các hàng ở mức 1 và các cột ở mức 0
+ Kiểm tra xem nào hàng nào đựoc nhấn (khi nút được nhấn) tức là
đựoc nhận tín hiệu từ các cột
+ Nếu mà có 1 hàng bất kỳ đựoc nhấn sau đó ta lại chuyển giá trị 0 vào
hàng đựoc nhấn và giá trị 1 vào các cột. Khi đó cột lại nhận nhiệm vụ làm tín
hiệu vào. Nếu mà 1 trong các cột đựoc nhấn (Khi nút được nhấn) trong các
trường hợp này thì cho ra các giá trị tương ứng.
+ Việc kiểm tra các hàng khác là tương tự như trên!Ở đây không đề
cập đến việc nhiễu phím nút nhấn nên bỏ qua.


b. Màn hình LCD 2x16
* Cấu tạo:


* Nguyên lý họat động
- Chân Vss

,

Vcc và Vee: Các chân Vcc, Vss, và Vee cấp dươnng nguồn
-5v và đất tương ứng thì chân Vee được dùng để điều khiển độ tương phản
của LCD.
- Chân chọn thanh ghi Rs: Có ghi (R/W): Đầu vào đọc/ghi cho phép E
được sử dụng bởi LCD để chốt dữ liệu của nó. Khi data được cấp đến chân

dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này và LCD
chốt dữ liệu trên các chân dữ liệu. Xung này phải rộng tối thiểu 450ns.
- Chân D0-D7: Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin
lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ
cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a
đến f và các con số từ 0-9 các chân này khi RS =1.
- Cũng có các mã lệnh mà có thể được gửi đến LCD để xóa màn hình
hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ.
- Sử dụng RS = 0 để kiểm tra bít cờ bận xem LCD có sẵn sàng nhận
thông tin? Cờ bận là bít D7 và có thể được đọc khi R/W = 1 và RS = 0 như
sau:
+ Nếu R/W = 1, RS = 0 khi D7 = 1 thì LCD bận bởi các hai thanh
ghi trong LCD, chân RS được dùng để chọn thanh ghi như sau: Nếu RS = 0
thì thanh ghi mà lệnh được lựa chọn để cho phép người dùng gửi một lệnh
chẳng hạn như xóa màn hình, đưa con trò về đầu dòng v v… Nếu RS = 1 thì
thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị
trên LCD.
- Chân đọc/ công việc bên trong và sẽ không nhận bất kỳ thông tin mới
nào. Khi D7 =0 thì LCD sẵn sàng nhận thông tin mới.
c. Vi điều khiển 8051
*Cấu tạo:


Vi điều khiển 8051 được Intel sản xuất năm 1981. Đặc điểm chủ yếu:
- Bộ xử lý 8bit
- 4 cổng I/O mỗi cổng 8bit
- Tối đa 64K ROM trong chip
- Bộ nhớ dữ liệu ngoài tối đa 64K
- Bộ nhớ đoạn mã lệnh ngoài tối đa 64K
- 2 bộ định thời và một cổng nối tiếp

- 128 byte RAM trong chip
- Tốc độ thay đổi từ 12MHz
d. Một số linh kiện khác

74LS373, 6264, 74LS00, diode có chức năng cấp ổn định nguồn cho
LCD, tạo bộ nhớ tạm thời và bộ đếm logic.





PHẦN II
CHƯƠNG TRÌNH VÀ GIẢI THÍCH LỆNH


org 00h ;viet cau lenh o vi tri 00h khoi tao gia tri dau tien cho
phim ban lan 1 = 0
ljmp main ;nhay den chuong trinh main
org 0bh ;su dung ngat bo timer 0
ljmp ngattimer0 ;nhay den chuong trinh ngat
org 40h ;viet tai vi tri 40h

main:
lcall khoitao ;nhay den nhan~ khoi tao
mainloop: ;nhay den chuong trinh chinh
lcall quetphim ;nhay den quet phim, de nhap vao so thu nhat
lcall quetphim2 ;nhay den quet phim de nhap vao so thu 2
sjmp mainloop ;lap lai o cho nay

khoitao: ;khoi tao ,su dung timer 0,

mov r1,#0
mov tmod,#01h
setb et0
setb ea
mov th0,#high(-10000)
mov tl0,#low(-10000)
setb tr0
ret

ngattimer0: ;chuong trinh ngat time
push psw
push acc
mov th0,#high(-10000)
mov tl0,#low(-10000)
lcall quetled
pop acc
pop psw
reti

quetled: ;chuong trinh quet led va hien thi
mov p0,r1

;mov r6,#4
;mov r5,#3

MOV A,#38H ;thiet lap LCD
acall conlenh ;nhay den chuong trinhh conlenh
acall delay ;che
mov A,#0eh ;nhap nhay con tro
acall conlenh

acall delay
acall hienthi

mov A,#01h ;hien thi dau ' cach'
acall hienthi
acall delay


cong:

mov A,r6 ;di chuyen 6 vao thanh ghi R6,de lat nua dua vao thanh ghi
a,hien thi
add a,#30h ;cong them vao 30h,de hien thi dang asscii
acall hienthi
acall delay

mov a,#'+' ;hien thi dau + thi khong can add a,#30h
acall hienthi
acall delay



mov a,r5
add A,#30h
acall hienthi
acall delay



mov a,#'=' ;hien thi dau =

acall hienthi
acall delay

;doan nay la di chuyen r5 vao a,sau do cong r6 voi a,cong 31h de hien thi dang
ascii cua no

mov a,r5
add a,r6
add a,#30h
acall hienthi
acall delay
mov r1,#0
mov r1,a

ret

;cac chuong trinh hien thi
conlenh: ;tao ra khoang chong 'cach'
MOV P1, A
CLR P3.0
CLR P3.1
SETB P3.2
CLR P3.2
RET

hienthi: ;hien thi nhieu so,
MOV P1, A
SETB P3.0
CLR P3.1
SETB P3.2

CLR P3.2
RET
delay: ; chuong trinh che time
mov TMOD,#01h
mov R0,#1
againi:
mov TH0,#high(-500)
mov TL0,#low(-500)
setb TR0

here:
jnb TF0,here
clr TF0
djnz R0,againi
ret
ret
;ret

delay1ms: ;che 1ms
mov r2,#100
delay1msloop:
nop
nop ;dung de tre 1 khoang thoi gian
nop
nop
nop
nop
nop
nop
djnz r2,delay1msloop ;R2-1 nhay den dalay1msloop

ret

delay10ms: ;tre 10ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
ret

quetphim:
mov p2,#11110000b
jnb p2.4,quet ;jnb la nhay neu p2.4=0
jnb p2.5,quet
jnb p2.6,quet
jnb p2.7,quet
ret
quet:
lcall delay10ms
jnb p2.4,hang1
jnb p2.5,hang2
jnb p2.6,hang3
jnb p2.7,hang4
ret

hang1:

setb p2.0 ;cho bit p2.0=1
setb p2.1
setb p2.2
setb p2.3
clr p2.4
nop
jnb p2.0,phim1
jnb p2.1,phim2
jnb p2.2,phim3
jnb p2.3,phim4
ret
hang2:
setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.5
nop
jnb p2.0,phim5
jnb p2.1,phim6
jnb p2.2,phim7
jnb p2.3,phim8
ret
hang3:
setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.6
nop

jnb p2.0,phim9
jnb p2.1,phim10
jnb p2.2,phim11
jnb p2.3,phim12
ret
hang4:
setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.7
nop
jnb p2.0,phim13
jnb p2.1,phim14
jnb p2.2,phim15
jnb p2.3,phim16
ret
phim1:
jnb p2.0,$
mov r1,#7
mov r5,#7
ret
phim2:
jnb p2.1,$
mov r1,#4
mov r5,#4
ret
phim3:
jnb p2.2,$
mov r1,#1

mov r5,#'1'
ret
phim4:
jnb p2.3,$
mov r1,#0
mov r5,#0
ret
phim5:
jnb p2.0,$
mov r1,#8
mov r5,#8
ret
phim6:
jnb p2.1,$
mov r1,#5
mov r5,#5
ret
phim7:
jnb p2.2,$
mov r1,#2
mov r5,#2
ret
phim8:
jnb p2.3,$
mov r1,#0
mov r5,#0
ret
phim9:
jnb p2.0,$
mov r1,#9

mov r5,#9
ret
phim10:
jnb p2.1,$
mov r1,#6
mov r5,#6
ret
phim11:
jnb p2.2,$
mov r1,#3
mov r5,#3
ret
phim12:
jnb p2.3,$
mov r5,#'='
ret



phim13:
jnb p2.0,$
mov r5,#'\'
ret
phim14:
jnb p2.1,$
mov r5,#'x'
ret
phim15:
jnb p2.2,$
mov r5,#'-'

ret
phim16:
jnb p2.3,$
mov r5,#'+'
ret

;quet phim 2

quetphim2:
mov p2,#11110000b
jnb p2.4,quet2
jnb p2.5,quet2
jnb p2.6,quet2
jnb p2.7,quet2
ret
quet2:
lcall delay10ms
jnb p2.4,hang12
jnb p2.5,hang22
jnb p2.6,hang32
jnb p2.7,hang42
ret

hang12:
setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.4
nop

jnb p2.0,phim123
jnb p2.1,phim22
jnb p2.2,phim32
jnb p2.3,phim42
ret
hang22:
setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.5
nop
jnb p2.0,phim52
jnb p2.1,phim62
jnb p2.2,phim72
jnb p2.3,phim82
ret
hang32:
setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.6
nop
jnb p2.0,phim92
jnb p2.1,phim102
jnb p2.2,phim112
jnb p2.3,phim122
ret
hang42:

setb p2.0
setb p2.1
setb p2.2
setb p2.3
clr p2.7
nop
jnb p2.0,phim132
jnb p2.1,phim142
jnb p2.2,phim152
jnb p2.3,phim162
ret
phim123:
jnb p2.0,$
mov r1,#7
mov r6,#7
ret
phim22:
jnb p2.1,$
mov r1,#4
mov r6,#4
ret
phim32:
jnb p2.2,$
mov r1,#1
mov r6,#1
ret
phim42:
jnb p2.3,$
mov r1,#0
mov r6,#0

ret
phim52:
jnb p2.0,$
mov r1,#8
mov r6,#8
ret
phim62:
jnb p2.1,$
mov r1,#5
mov r6,#5
ret
phim72:
jnb p2.2,$
mov r1,#2
mov r6,#2
ret
phim82:
jnb p2.3,$
mov r1,#0
mov r6,#0
ret
phim92:
jnb p2.0,$
mov r1,#9
mov r6,#9
ret
phim102:
jnb p2.1,$
mov r1,#6
mov r6,#6

ret
phim112:
jnb p2.2,$
mov r1,#3
mov r6,#3
ret
phim122:
jnb p2.3,$
mov r6,#'='




phim132:
jnb p2.0,$
mov r5,#'\'
ret
phim142:
jnb p2.1,$
mov r6,#'x'
ret
phim152:
jnb p2.2,$
mov r6,#'-'
ret
phim162:
jnb p2.3,$
mov r6,#'+'
ret


end














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

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