Chức năng của các chân trên Port 3- Port 0 khi được dùng làm Port xuất nhập cần phải sử dụng điện trở kéo lên bên ngoài Port0 như hình H.2.2.. Do đó ta có mã hiển thị số 5 như sau: Đối
Trang 1BÀI 1
THIẾT KẾ VÀ MÔ PHỎNG MẠCH ĐIỂN TỬ BẰNG PHẦN MỀM PROTEUS
- SỬ DỤNG PHẦN MỀM KEIL C LẬP TRÌNH VI ĐIỀU KHIỂN
File mô phỏng
BÀI 2
TẬP LỆNH CỦA AT89C51 VÀ PORT XUẤT NHẬP
I Tóm tắt lý thuyết
1 Các Port xuất nhập của AT89C51
AT89C51 có 4 Port xuất nhập tương ứng P0, P1, P2, P3 như hình H.2.1.
Trang 2Bảng 2.1 Chức năng của các chân trên Port 3
- Port 0 khi được dùng làm Port xuất nhập cần phải sử dụng điện trở kéo lên bên ngoài
Port0 như hình H.2.2
- Port P1, P2, P3 có thể cấu hình làm port xuất nhập mà không cần dùng điện trở kéo lên do bên trong đã tích hợp sẵn điện trở
- Port P0, P2, P3 ngoài chức năng làm Port xuất nhập còn có thêm các chức năng khác
(Hình H.2.1 và Bảng 2.1)
2 Tập lệnh của AT89C51
Lệnh của AT89C51 có độ dài 8bit, tương ứng có 256 câu lệnh, được chia thành các nhóm
cơ bản như sau:
• Nhóm lệnh di chuyển dữ liệu
• Nhóm lệnh số học
• Nhóm lệnh logic
• Nhóm lệnh nhảy
• Nhóm lệnh xử lý bit
II Nội dung thực hành:
Bài2.1: Cấu hình port P1 là Port đầu vào, port P0 là Port đầu ra Khi ấn Button (P1.0) thì gửi ra P0 giá trị bằng 45
Khi ấn Button 2 (P1.1) thì gửi ra một xung từ cao xuống thấp lên chân P0.0
org 0000H
main:
jnb p1.0,nhan1
jnb p1.1,nhan2
sjmp main
nhan1: mov p0,#45
ret
nhan2:
clr p0.0
ret
end
Trang 3Khi ấn buton1
Khi ấn button2
Trang 4Bài 2.2 Sử dụng lệnh nhảy và lặp viết chương trình để led ở chân P0.0 nhấp nháy.
org 0000H
main:
clr p0.0
call delay
setb p0.0
call delay
jmp main
delay:mov r5,#20
d1:mov r6,#20
d2: mov r7,#255
djnz r6,d2
djnz r5,d1
ret
end
Tín hiệu xuất ra chân p0.0
Trang 5Bài 2.3 Viết chương trình để các Led trên Port 0 sáng xen kẽ nhau: led 1,3,5,7 sáng – 2,4,6,8 tắt
và ngược lại
Quá trình được lặp đi lặp lại
org 0000H
mov a,#01010101b
main:
mov p0,a
delay: mov r0,#255
agin: mov r1,#255
here: nop
djnz r1,here
djnz r0,agin
rl a
sjmp main
end
Tín hiệu xuất ra mạch mô phỏng
Trang 6Bài 2.4 Viết chương trình để các led trên Port 0 lần lượt sáng từ 1-8 Quá trình trên lặp lại không ngừng.
org 0000H
main:
mov a,1fh
mov p0,a
rl a
call delay
call delay
sjmp main
delay: mov r0,#250
loop1: mov r1,#250
loop2: djnz r1,loop2
djnz r0,loop1
ret
end
Tín hiệu xuất ra mạch mô phỏng
Trang 7BÀI 3
GIAO TIẾP VI ĐIỀU KHIỂN VỚI LED7 THANH
I.Tóm tắt lý thuyết
1 Giới thiệu về Led 7 thanh
Hình 3.1 Led 7 đoạn
Led 7 thanh gồm 2 loại: loại có anot chung và loại có catot chung
Đối với loại có anot chung, chân COM phải được đưa lên mức logic 1 và muốn led nào
áng phải đặt các chân tương ứng từ a-f xuống mức thấp
Ví dụ: Muốn hiển thị số 5 bằng Led 7 đoạn có anot chung, các led a – f – g – c – d phải sáng
Để thực hiện được điều này thì các chân a – f – g – c – d phải được đặt ở mức logic 0
Do đó ta có mã hiển thị số 5 như sau:
Đối với Led7 thanh có catot chung ta làm ngược lại, chân COM được đặt ở mức 0 và
muốn một led nào đó sáng phải đặt chân tương ứng với Led đó lên mức cao
Ví dụ muốn hiển thị số 6 bằng led 7 thanh có catot chung, ta phải đặt các chân a – f – g – c – d-
e lên mức cao Tương ứng có mã hiển thị như sau:
Bảng 3.1 Bảng mã hiển thị của Led 7 thanh có anot chung:
Trang 8
Bảng 3.2 Bảng mã hiển thị của Led 7 thanh có catot chung:
2 Hiển thị nhiều Led 7 đoạn:
Trang 9a Phương pháp quét Led:
Phương pháp này dựa trên hiện tượng lưu ảnh trên võng mạc, tức là nếu một hình ảnh
xuất hiện tối thiểu 24 lần/s sẽ tạo cho người quan sát cảm giác là một hình ảnh liên tục Khi nhiều led cùng dùng chung một đường dữ liệu như Hình 3.3, dữ liệu từ vi xử lý sẽ
đồng thời được gửi đến tất cả các Led, do đó ta không thể để các Led sáng cùng một lúc Tại mỗi thời điểm chỉ có duy nhất một led sáng, các led còn lại sẽ tắt Sau thời gian duy trì, Led đó
sẽ tắt và Led tiếp theo sẽ sáng Do hiện tượng lưu ảnh trên mắt nên người quan sát sẽ nhìn thấy các led sẽ hiển thị đồng thời với các số khác nhau Quá trình quét LED được hiển thị như sau: Bật led sáng – Hiển thị dữ liệu TrTrễ TrTắt Led xóa dữ liệu
Phương pháp quét Led
Do đó có thể tính được thời gian duy trì cho từng led sáng như sau:
Giả sử có n Led cần hiển thị
-Tần số cho một chu kỳ quét n led = 25hz X n
-Thời gian duy trì cho một lần sáng của từng led = 1/Tần số chu kỳ quét led
Phương pháp này tiện dụng ở phần cứng lẫn phần mềm, tuy nhiên nếu số lượng led qu
nhiều thì thời gian sáng trung bình dành cho mỗi led giảm đi Điều này kéo theo các led sẽ su giảm độ sáng Mặt khác phải tích hợp thêm IC giải mã, nhiều việc phát sinh cho thiết kế mạch lẫn lập trình Phương pháp này ứng dụng cho các hiển thị thông tin ít, khoảng 20 led bảy đoạ trở xuống nhưng thông tin nhiều như bảng tỉ giá ngoại tệ cần vài trăm led thì không được
b Phương pháp chốt Led:
Trang 10Vẫn chia sẻ bus dữ liệu cho tất cả các led như phương pháp quét , đồng thời các led đều
có chân A (hoặc C) chung nối sẵn lên nguồn (hoặc đất) nghĩa là các Led lúc nào cũng sẵn sàng hiển thị Mỗi led bảy đoạn kết hợp với 1 IC chốt, vi xử lý điều khiển chốt dữ liệu cho chính xác Dữ liệu cho từng led sẽ lần lượt đưa lên Bus, ứng với dữ liệu của led nào thì IC chốt của led đó sẽ chốt dữ liệu lại, động tác này do vi xử lý thực hiện Sau một lượt dữ liệu sẽ xuất hiện đầy đủ trên tất cả các led bảy đoạn, kể từ đó vi xử lý không cần mất công hiển thị nữa, các led sẽ sáng liên tục chứ không như phương pháp quét Như vậy hình ảnh của phương pháp chốt sáng hơn và không nhấp nháy
Hạn chế của phương pháp này là tốn nhiều IC chốt, mạch điều khiển chốt phức tạp (có thể dùng IC giải mã 74138, 74154 như phương pháp quét)
II Nội dung thực hành:
Bài 3.1 Chương trình đếm số xung được đưa vào chân P1.0 và hiển thị lên Led đoạn Khi đếm đến 9 thì reset về 0 Quá trình được lặp đi lặp lại.
org 0000h
main:
mov P2,#0C0h
call delay
mov p2,#0F9h
call delay
mov p2,#0A4h
call delay
mov p2,#0B0h
call delay
mov p2,#99h
call delay
mov p2,#92h
call delay
mov p2,#82h
Trang 11call delay
mov p2,#0F8h
call delay
mov p2,#80h
call delay
mov p2,#90h
call delay
jmp main
delay:
mov r0,#200
gain: mov r1,#200
loop: djnz r1,loop
djnz r0,gain
ret
end
Tín hiệu xuất ra mạch mô phỏng
Trang 12Bài3.2 Chương trình đếm từ 0-99
org 0000h
main:
mov dptr,#maled mov r0,#00 lap:
call ht call delay call delay call delay call delay call delay call delay inc r0 cjne r0,#100,lap jmp main ht:
quay:
mov a,r0 mov b,#10 div ab movc a,@a+dptr mov p2,a setb p1.1 setb p1.1
call delay clr p1.1 mov a,b movc a,@a+dptr mov p2,a setb p1.0 clr p1.0 ret maled: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h delay:
mov tmod,#01h mov th0,#0b1h mov tl0,#0e0h setb tr0 here:
jnb tf0,here clr tr0 clr tf0 ret end
Tín hiệu xuất ra
Trang 13Bài3 chương trình hien thi so 56
org 0000h
main:
setb p1.1 mov p2,#82h call delay clr p1.1 setb p1.0 mov p2,#92h
call delay clr p1.0
sjmp main
delay:
mov tmod,#01h mov th0,#0b1h
Trang 14mov tl0,#0e0h setb tr0 here:
jnb tf0,here clr tr0 clr tf0 ret end
Tín hiệu xuất ra.
BÀI 4
TIMER /COUNTER – NGẮT
I.Tóm tắt lý thuyết
1 Timer/Counter:
a Thanh ghi định thời
- 8051 có hai bộ điều khiển định thời là Timer 0 và Timer 1
- Mỗi Timer có một thanh ghi định thời 16bit, và được chia thành hai thanh ghi 8bit: Timer high (TH) và Timer Low (TL)
b.Thanh ghi điều khiển TCON:
- TFx: Cờ tràn Timerx Được set và clear bởi phần cứng
Dùng khi ngắt Timer 0,1
- TRx: bit điều khiển Timerx: TRx=0 Trdừng Timerx
TRx=1 Trbật Timerx
Trang 15- IEx: Ngắt ngoài 0,1
- ITx:Ngắt nối tiếp 0,1
c.Thanh ghi chế độ định thời TMOD:
Để thiết lập chế độ làm việc của các Timer ta sử dụng thanh ghi TMOD 8bit Cả Timer
0 và Timer 1 đều dùng chung thanh ghi TMOD để điều khiển, trong đó: 4bit thấp thiết lập chế
độ điều khiển cho Timer 0 và 4bit cao thiết lập chế độ điều khiển cho Timer 1
-Gate: Khi Gate =1 thì Timer/Counter chỉ làm việc khi cả TRx =1 và INTx=1
Khi Gate = 0 thì Timer/Counter làm việc được khi TRx=1
- C/T: Bit lựa chọn chế độ đếm (counter) hay định thời (Timer)
C/T = 0: chế độ Timer
C/T=1: chế độ định thời
- M0,M1: Lựa chọn chế độ định thời
2 Ngắt:
89C51 có 5 nguồn ngắt: 2 ngắt ngoài, 2 ngắt timer và ngắt nối tiếp
Thanh ghi điều khiển ngắt IE:
- EA: =1 cho phép ngắt toàn cục
=0 không cho phép ngắt
- ES: cho phép ngắt nối tiếp
- ET1, ET0: cho phép ngắt Timer 1, Timer0
- EX1, EX0: cho phép ngắt ngoài 1, ngắt ngoài 0
Muốn cho phép một ngắt nào xảy ra phải set 2 bit: Bit cho phép ngắt toàn cục và bit cho phép từng ngắt riêng rẽ
Dưới đây là các vector ngắt và vị trí ngắt tương ứng:
II Nội dung thực hành:
Bài4.1 Chương trình đếm từ 0-9 dùng Timer/counter.
org 0000h
main:
mov P2,#0C0h
call delay
mov p2,#0F9h
call delay
mov p2,#0A4h
call delay
mov p2,#0B0h
call delay
mov p2,#99h
Trang 16call delay
mov p2,#92h
call delay
mov p2,#82h
call delay
mov p2,#0F8h
call delay
mov p2,#80h
call delay
mov p2,#90h
call delay
jmp main
delay:
mov tmod,#01h
mov th0,#03ch
mov tl0,#0b0h
setb tr0
here: jnb tf0,here
clr tr0
clr tf0
ret
end
Tín hiệu xuât ra
Bài4.2 Chương trình tạo một xung vuông có tần số 4Khz trên chân P3.7 dùng ngắt Timer
org 0000h
main:
setb p3.7 call delay clr p3.7 call delay sjmp main
Trang 17delay:
mov tmod,01h mov th0,#0ffh mov tl0,#06h setb tr0 here:
jnb tf0,here clr tr0 clr tf0 ret end
Bài4.3 Chương trình tạo đàn điện tử với các phím tạo ra âm thanh có tần số như sau:
Các phím tương ứng từ button 1 Button 8.Button Button 8.8.
org 0000h
main:
jnb p1.0,nhan1
jnb p1.1,nhan2
jnb p1.2,nhan3
jnb p1.3,nhan4
jnb p1.4,nhan5
jnb p1.5,nhan6
jnb p1.6,nhan7
jnb p1.7,nhan8
sjmp main
nhan1:setb p3.7
call delay1
clr p3.7
call delay1
sjmp main
nhan2: setb p3.7
call delay2
clr p3.7
call delay2
sjmp main
nhan3: setb p3.7
call delay3
clr p3.7
call delay3
sjmp main nhan4: setb p3.7
call delay4
clr p3.7
call delay4
sjmp main
Trang 18nhan5: setb p3.7 call delay5 clr p3.7
call delay5
sjmp main nhan6: setb p3.7 call delay6 clr p3.7
call delay6
sjmp main nhan7: setb p3.7 call delay7 clr p3.7
call delay7
sjmp main nhan8: setb p3.7 call delay8 clr p3.7
call delay8
sjmp main delay1:
mov r1,#191 loop1:
call delaydv djnz r1 , loop1 ret
delay2:
mov r1,#170 loop2:
call delaydv djnz r1 , loop2 ret
delay3:
mov r1,#152 loop3:
call delaydv djnz r1 , loop3 ret
delay4:
mov r1,#143 loop4:
call delaydv djnz r1 , loop4 ret
delay5:
mov r1,#128 loop5:
call delaydv
Trang 19djnz r1 , loop5
ret
delay6:
mov r1,#114
loop6:
call delaydv
djnz r1 , loop6
ret
delay7:
mov r1,#101
loop7:
call delaydv
djnz r1 , loop7
ret
delay8:
mov r1,#95
loop8:
call delaydv
djnz r1 , loop8
ret
delaydv:
mov TMOD,#02h
Mov TH0 , #246
setb TR0
loop9: JNB TF0 ,loop9
clr TR0
clr TF0
ret
end
Tín hiệu xuất ra là dạng âm thanh Đô rể mi pha son la si đố