Tài liệu Bài 4. Thực hành với Led đơn - Pdf 96

BÀI 4: THỰC HÀNH VỚI LED ĐƠN
4.1.Một số qui định:
a. Chú thích: dùng dấu chấm phẩy ";"để bắt đầu các đoạn chú thích, các chú thích chỉ có tác
dụng trên dòng chứa nó và được đặt tuỳ ý tại bất kì vị trí nào trên dòng.
Chú thích giúp chương trình thể hiện rõ ràng trong sáng hơn, người lập trình dễ dàng hiểu
và chỉnh sửa chương trình được viết ra, các đoạn chú thích phù hợp sẽ giúp cho việc tìm kiếm
các đoạn chương trình dễ dàng hơn.
Sau đây là ví dụ cho phần chú thích bắt đầu một chương trình :
;
******************************************************************************
*******************
;**************///// TÊN CHƯƠNG TRÌNH \\\\\\
****************************************
;**

;**////////////////___ Các yêu cầu của bài toán_________________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ ghi chú trên các dòng này__________________\\\\\\\\\\\\\\\\\\\\\\\\\
;**//////////////____ Kết cấu phần cứng và các linh kiện kèm theo___\\\\\\\\\\\\\\\\\\\\\
;**<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>
;**\\\\\\\\\\\\\\\\\\ Mô tả các biến, các hàm cần sử dụng ///////////////////////
;**\\\\\\\\\\\\\\\\\\\\ cách giải quyết chương trình ////////////////////
;**\\\\\\\\\\\\\\\\\\\\\ các dòng ghi chú khác /////////////////////
;*****************************************************************************
************************
;************************************************************* ****************
***********************

Ví dụ về phân cách các đoạn chương trình phức tạp với nhau bằng chú thích:
;**<<<<<<<<<================= tên lệnh hoặc chức năng =======>>>>>>**
Câu lệnh 1 ;===>>>ghi chú cho câu lệnh 1
Câu lệnh 2


c.Kết thúc chương trình.
Sau khi chương trình hoàn tất phải kết thúc bằng câu lệnh END .Các câu lệnh này báo cho
trình biên dịch biết phần kết thúc của chương trình, trình biên dịch bỏ qua tất cả các câu lệnh sau
lệnh END.
d. Qui định về số
Xem qui định này trong bài 2: một số qui ước khi viết số trong chương trình

4.2 BÀI THỰC HÀNH:
Tên gọi cho các bit: mỗi ô nhớ đều có 8 bit, để thuận tiện cho quá trình hướng dẫn, mỗi bit
trong một ô nhớ sẽ được đánh số từ 0 đến 7 sau tên gọi của ô nhớ đó và được ngăn cách bằng
dấu chấm.
Ví dụ:
-Thanh ghi A gồm 8 bit: A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0 với bit nhỏ nhất là bit A0
-thanh ghi R1 gồm các bit R1.7 R1.6 R1.5 R1.4 R1.3 R1.2 R1.1 R1.0
Để bắt đầu bài thực hành, bạn nên xem lại phần kết nối vi điều khiển với led trong bài 1
Bài 1: Viết chương trình xuất tín hiệu ở Port 0 và Port 2 để 8 đèn led sáng với các led
được kết nối với Port 0 và Port 2 như sơ đồ dưới
Phân tích: Ở sơ đồ kết nối phần cứng như hình trên, đèn led sáng khi tín hiệu xuất ra ở mức
1(+5V). Như vậy cần viết chương trình để xuất mức logic 1 ra Port 0 và Port 2. Sau đây là
chương trình
;
******************************************************************************
*******************
;**************///// 8 LED SANG \\\\\\
****************************************************
;**

;**////////////////___ lam 8 led o Port 0 va Port 1 sang_________________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ led sang khi tin hieu xuat o muc 1__________________\\\\\\\\\\\\\\\\\\\\\\\\\

;
******************************************************************************
*******************
;**************///// 8 LED SANG XEN KE \\\\\\
****************************************
;**

;**////////////////___ lam 8 led noi Port 1 va Port 2_________________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ led sang khi tin hieu xuat o muc 0__________________\\\\\\\\\\\\\\\\\\\\\\\\\
;**//////////////____ led sang xen ke o vi tri le____________________\\\\\\\\\\\\\\\\\\\\\
;**<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>
;** \\\\\\\\\\\\ can xuat voi gia tri tren 1 Port la: 01010101b ////////////////
;**\\\\\\\\\\\\\ Duoc viet gon thanh 55H ////////////////
;*****************************************************************************
************************
;*****************************************************************************
************************
ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Mov P1,#55H ;===>>>> lam tin hieu xuat xen ke tren P1
Mov P2,#01010101B ;===>>>> lam tin hieu xuat xen ke tren P2
End
4.4 GIẢI THUẬT VÀ LƯU ĐỒ
Giải thuật là một trình tự thực hiện công việc nào đó.
Lưu đồ là sự biểu diễn đồ hoạ của giải thuật.
Lưu đồ chứa các ký hiệu biểu diễn các bước của giải thuật.
Mỗi ký hiệu biểu diễn một hoạt động.
Các ký hiệu được sử dụng trong lưu đồ:
• Nhập - Input: tín hiệu vi điều khiển lấy vào để xử lí

• Xử lý – Process: quá trình xử lí tín hiệu

câu lệnh kế tiếp.
Phụ chú: Xem lại về nhãn và chương trình con
Chương trình:
;
*****************************************************************************
********************
;**************///// 8 LED SANG SANG TAT \\\\\\
****************************************
;**

;**////////////////___ lam 8 led sang roi tat_________________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ sang o muc 1 va tat o muc 0__________________\\\\\\\\\\\\\\\\\\\\\\\\\
;**//////////////____ lap di lap lai khong gioi han____________________\\\\\\\\\\\\\\\\\\\\\
;**<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>
;*****************************************************************************
************************
;*****************************************************************************
************************
ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Tudau:
Mov P1,#11111111B ;===>>>> lam 8 led noi P1 sang
LCall Delay ;===>>>> goi chuong trinh con Delay
Mov P1,#00 ;===>>>> lam 8 led noi P1 tat
LCall Delay
Sjmp Tudau ;===>>>> nhay ve thuc hien tu dau

;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> delay <<<<<<<<<<<<<<<<<<<<<<<<<<<<

Delay:
Mov R7,#0FFH ;===>>>> ga'n R7=#0FFH, 1 chu ki may

(255×2)chu kì máy của lệnh Djnz R6,Kt1
và 2 chu kì máy của lệnh Djnz R7,Kt2
và 1 chu kì máy của lệnh Mov R6,#0FFH
Tổng cộng đoạn trên đã thực hiện (1+(255×2)+2)×255)=130815 chu kì máy
• Vậy tổng cộng chương trình con Delay đã thực hiện 130815+1=130816 chu kì máy
tức là đã thực hiện trong 130816µs , khoảng thời gian gần bằng 0.13s
• Như vậy trong 1s led sáng khoảng 4 lần đủ để mắt người có thể nhận ra được
Nếu mô phỏng với Pinnacle 52 chương trình delay phải chạy với số lần lặp lại nhiều hơn để
thấy được các trạng thái ngõ ra của các Port, thay đoạn chương trình con Delay ở trên bằng đoạn
chương trình con như dưới đây khi mô phỏng bằng Pinnacle 52
;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> delay Pinnacle
52<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Delay:
Mov 70H,#2H ;===>>>> ga'n 70H=#0FFH, 2 chu ki may
Kt3: Mov 71H,#0FFH ;===>>>> ga'n 71H=#0FFH, 2 chu ki may
Kt2: Mov 72H,#0FFH ;===>>>> ga'n 72H=#0FFH, 2 chu ki may
Kt1: Djnz 72H,Kt1 ;===>>>> giam 72H xuong 1, 72H khac 0-> giam tiep,
2ckm
Djnz 71H,Kt2 ;===>>>> giam 71H xuong 1, khac 0-> ve Kt2
Djnz 70H,Kt3 ;===>>>> giam 70H xuong 1, khac 0-> ve Kt3
Ret ;===>>>> ket thuc chuong trinh con Bài 4 . Bài tập tự giải.
Làm cho các led nối Port 2 sáng tắt xen kẽ nhau, ( đèn 1,3,5,7 sáng, đèn
2,4,6,8 tắt , sau đó đèn 1,3,5,7 tắt, đèn 2,4,6,8 sáng. Lặp lại quá trình trên.). Biết led
sáng khi tín hiệu xuất ở các chân Port 2 ở mức 1. Minh họa trong hình phía dưới

Bài 5: "sáng lần lượt"

Xuat: Mov P1,#00000001B ;===>>>> lam led 1 sang
LCall Delay
Mov P1,#00000010B ;===>>>> lam led 2 sang
LCall Delay
Mov P1,#00000100B ;===>>>> lam led 3 sang
LCall Delay
Mov P1,#00001000B ;===>>>> lam led 4 sang
LCall Delay
Mov P1,#00010000B ;===>>>> lam led 5 sang
LCall Delay
Mov P1,#00100000B ;===>>>> lam led 6 sang
LCall Delay
Mov P1,#01000000B ;===>>>> lam led 7 sang
LCall Delay
Mov P1,#10000000B ;===>>>> lam led 8 sang
LCall Delay
Sjmp Xuat ;===>>>> nhay ve thuc hien tu dau

;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> delay <<<<<<<<<<<<<<<<<<<<<<<<<<<<

Delay:
Mov R7,#0FFH ;===>>>> gan R7=#0FFH, 1 chu ki may
Kt2: Mov R6,#0FFH ;===>>>> gan R6=#0FFH, 1 chu ki may
Kt1: Djnz R6,Kt1 ;===>>>> giam R6 xuong 1, R6 khac 0-> giam tiep
Djnz R7,Kt2 ;===>>>> giam R7 xuong 1, R6 khac 0-> ve Kt2
Ret ;===>>>> ket thuc chuong trinh con
;_____________________________________________________________________________
____
End ;===>>>> ket thuc chuong trinh


LCall Delay ;===>>>>goi chuong trinh con Delay
RL A
Sjmp Xuat ;===>>>> nhay ve thuc hien tu dau

;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> delay <<<<<<<<<<<<<<<<<<<<<<<<<<<<

Delay:
Mov R7,#0FFH
Kt2: Mov R6,#0FFH
Kt1: Djnz R6,Kt1
Djnz R7,Kt2
Ret
;_____________________________________________________________________________
____
End ;===>>>> ket thuc chuong trinh
Giải thích: ORG 000H là lệnh chỉ dẫn: chương trình này được lưu vào ROM bắt đầu từ địa chỉ
000H.
Khi mới bắt đầu chương trình, Mov P1,#0 làm tất cả các led đều tắt,
LCall Delay làm cho thời gian tắt đủ để mắt người nhận ra.
Mov A,#00000001B làm cho bit A.0 của thanh ghi A được set lên 1, các bit còn lại ở giá trị 0.
Tiếp theo trong chương trình là nhãn Xuat: vị trí trở về, trên lưu đồ giải thuật là điểm mũi tên
trở về.
Mov P1,A xuất tín hiệu ra P1, lúc này led 1 sáng lên.
Tiếp theo là lệnh gọi chương trình con LCall Delay.
Câu lệnh RL A làm trạng thái các bit dịch sang trái 1 bit, trước đó chỉ có A.0 ở giá trị 1, sau
câu lệnh A.1 mang giá trị 1, còn bit A.0 bây giờ mang giá trị 0 do bit A.7 có giá trị 0 chuyển
sang.
Sjmp Xuat chương trình nhảy đến đoạn chương trình được đánh dấu bằng nhãn Xuat, nên
nhớ rằng chương lệnh gọi Sjmp chỉ nhảy được đến vị trí cách lệnh gọi không quá 128 byte, nếu
vượt qua giới hạn này chương trình dịch sẽ báo lỗi, khi đó cần thay Sjmp bằng Ljmp vì Ljmp có

;*****************************************************************************
************************
;*****************************************************************************
************************
ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Mov P0,#0 ;===>>>> |||
Mov P1,#0 ;===>>>> ||| cac led deu tat
Mov P2,#0 ;===>>>> |||
Mov P3,#0 ;===>>>> |||
LCall Delay ;===>>>>goi chuong trinh con Delay
Xuat: ;**>>>>>>>>>>>>>>>>>>> lam led P0 sang
<<<<<<<<<<<<<<<<<<<<<<<<<<
Mov P0,#00000001B ;===>>>> lam led 1 sang
LCall Delay ;===>>>>goi chuong trinh con Delay
Mov P0,#00000010B ;===>>>> lam led 2 sang
LCall Delay
Mov P0,#00000100B ;===>>>> lam led 3 sang
LCall Delay
Mov P0,#00001000B ;===>>>> lam led 4 sang
LCall Delay
Mov P0,#00010000B ;===>>>> lam led 5 sang
LCall Delay
Mov P0,#00100000B ;===>>>> lam led 6 sang
LCall Delay
Mov P0,#01000000B ;===>>>> lam led 7 sang
LCall Delay
Mov P0,#10000000B ;===>>>> lam led 8 sang
LCall Delay
;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>lam led P1 sang <<<<<<<<<<<<<<<<<<<
Mov P0,#00000000B ;===>>>> lam P0 tat

Mov P2,#01000000B ;===>>>> lam led 7 sang
LCall Delay
Mov P2,#10000000B ;===>>>> lam led 8 sang
LCall Delay
;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>lam led P1 sang <<<<<<<<<<<<<<<<<<<
Mov P2,#00000000B ;===>>>> lam P2 tat
Mov P3,#00000001B ;===>>>> lam led 1 sang
LCall Delay
Mov P3,#00000010B ;===>>>> lam led 2 sang
LCall Delay
Mov P3,#00000100B ;===>>>> lam led 3 sang
LCall Delay
Mov P3,#00001000B ;===>>>> lam led 4 sang
LCall Delay
Mov P3,#00010000B ;===>>>> lam led 5 sang
LCall Delay
Mov P3,#00100000B ;===>>>> lam led 6 sang
LCall Delay
Mov P3,#01000000B ;===>>>> lam led 7 sang
LCall Delay
Mov P3,#10000000B ;===>>>> lam led 8 sang
LCall Delay
Mov P3,#00000000B ;===>>>> lam led P3 tat
;***
Ljmp Xuat ; ===>>>> nhay ve thuc hien tu dau

;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> delay <<<<<<<<<<<<<<<<<<<<<<<<<<<<

Delay:
Mov R7,#0FFH ;===>>>> gan R7=#0FFH, 1 chu ki may


Chương trình:
;
******************************************************************************
*******************
;**************///// 32 LED SANG LAN LUOT \\\\\\
****************************************
;**

;**////////////////___ led sang lan luot tu led 1 den led 32___________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ sang o muc 1 va tat o muc 0__________________\\\\\\\\\\\\\\\\\\\\\\\\\
;**//////////////____ lap di lap lai khong gioi han____________________\\\\\\\\\\\\\\\\\\\\\
;**<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>
;** \\\\\\\\\\\\ su dung lenh xoay phai voi co C xoay 32 bit voi
C ////////////////
;*****************************************************************************
************************
;*****************************************************************************
************************
ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Mov P0,#0 ;===>>>> ||| tat tat ca ca led
Mov P1,#0 ;===>>>> |||
Mov P2,#0 ;===>>>> |||
Mov P3,#0 ;===>>>> |||
SetB C ;===>>>> lam co C len 1
Xoay32bit:
Mov A,P0 ;||||||||||
RLC A ;||||||||||===>>>> xoay trai P0 voi co nho C
Mov P0,A ;||||||||||
Mov A,P1 ;@@@@

Bài 9: " Sáng dần 8 led"
Phần cứng: 8 led nối với Port 0 được định vị trí như sau: led 1 nối với P0.0,
lần lượt cho đến led 8 (nối với P0.7). Biết led sáng khi tín hiệu xuất ở mức 1.Viết
chương trình để các led nối với Port 0 sáng dần từ led 1 đến led 8 sau đó tắt hết led
và lặp lại. Các quá trình được lặp lại không giới hạn.
Minh hoạ:

Cách 1: Cách này đơn giản là làm cho các led sáng bằng cách thiết đặt các giá trị
thích hợp cho các Port để làm led sáng theo từng trạng thái, cách này đơn giản nhưng
cần viết dài và tốn dung lượng bộ nhớ Rom. Nếu cần thiết các bạn tự giải
Cách 2: Dùng lệnh xoay A với cờ C, mỗi lần xoay đều SetB C (C=1), sau mỗi lần xoay xuất
kết quả ra P0 .Đặt giá trị ban đầu cho A là #00000000B, vì C luôn được set lên 1 nên sau lần
xoay đầu tiên thanh ghi A có giá trị là: #00000001B, lần 2: #00000011B, lần3: #00000111B
Khi thanh ghi A đầy: #11111111B chương trình phải được khởi động lại với giá trị ban đầu
của A là #00000000B. Để nhận biết được khi nào thanh ghi A đầy để khởi động lại các thông số,
sau mỗi lần xoay kiểm tra cờ nhớ C. Vì sau mỗi lần xoay giá trị của cờ nhớ C do bit A.7 chuyển
sang.
Chương trình:
;
******************************************************************************
*******************
;**************///// SANG DAN 8 LED \\\\\\
****************************************
;**

;**////////////////___ Sang dan tu led 1 den led 8___________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ sang o muc 1 va tat o muc 0__________________\\\\\\\\\\\\\\\\\\\\\\\\\
;**//////////////____ lap di lap lai khong gioi han____________________\\\\\\\\\\\\\\\\\\\\\
;**<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>
;*****************************************************************************

dần". Toàn bộ trạng thái sáng của led được minh họa trong hình dưới, sau đó hãy mở
rộng chương trình này cho 16 và 32 led
Minh hoạ:


Bài 12: Bài tập tự giải: Bài này mang tên :" Sâu bò"
Phần cứng: 32 led nối với Port 0,1,2,3, được định vị trí như sau: led 1 nối với
P0.0, lần lượt cho đến led 32 (nối với P3.7), các led được xếp thẳng hàng với nhau.
Biết led sáng khi tín hiệu xuất ở mức 1. Viết chương trình để led sáng theo minh hoạ
sau đây.
Minh hoạ:
• Dạng 1: "sâu bò" đơn giản
Chú ý:
• Lúc nào cũng có 8 led được bật sáng
• Các quá trình được lặp lại không giới hạn
• Khi hoạt động, các led sáng tắt thành một vệt sáng có chiều dài bằng 8 led, di
chuyển từ led 1 đến led 32. Vì vệt sáng của led di chuyển giống con sâu di
chuyển nên bài này có tên là "Sâu bò", và gọi "sâu" thay cho vệt sáng.
• Sau khi đã viết xong bài này, phát triển thêm để "sâu bò" như ở dạng 2 và dạng
3 trong minh họa ở các hình dưới.
Minh hoạ:
• Dạng 2: "sâu bò tới"
• Dạng 3: " sâu bò vòng"
Bài 13: Bài tập tự giải, bài này có tên:" Sâu lớn"
Dầu tiên. khi sâu còn nhỏ:vệt sáng led chạy với chiều dài là 1 led trong lần đầu tiên
như trong bài 5 và bài 6, sau khi vệt sáng chạy đến led cuối cùng và trở về thực hiện ở
lần kế tiếp, sâu lớn hơn và có độ dài là 2 led sáng, cứ thế sâu lớn dần. Sâu có một độ
lớn chiều dài nhất định, chiều dài lớn của sâu do các bạn tự chọn, nhưng trước hết
chọn sâu có độ lớn là 8 led, sau đó là 16 led. Sau khi sâu đã đạt độ lớn tối đa, các quá
trình được bắt đầu lại từ đầu. Hãy viết chương trình với yêu cầu trên với 8 led, 16 led

led 8 sáng cố định, trong lúc đó có 1 led sáng di chuyển từ led 1 đi vào. Đến led 7 vi điều khiển
lưu lại giá trị P0 vào 30H (giá trị mới lưu là #11000000B).
Các quá trình tiếp tục như trên. Như vậy cần phải đếm số quá trình đã thực hiện, khi quá trình
thực hiện đến lần thứ 8, lúc này các led đều sáng hết, quá trình phải được lặp lại từ đầu. Dùng
thanh ghi R0 để lưu giữ giá trị này
Trong quá trình thực hiện, số bit tham gia vào xoay giá trị 1 sẽ giảm theo các quá trình, vì vậy
cần kiểm soát số lần xoay trái trong mỗi quá trình. Dùng thanh ghi R1 lưu giữ giá trị này.

Giải thuật
Chương trình:

;
******************************************************************************
*******************
;**************///// SANG DON 8 LED \\\\\\
****************************************
;**

;**////////////////___ Sang dan tu led 1 den led 8___________\\\\\\\\\\\\\\\\\\\\\\\\\\\
;**///////////////___ sang o muc 1 va tat o muc 0__________________\\\\\\\\\\\\\\\\\\\\\\\\\
;**//////////////____ lap di lap lai khong gioi han____________________\\\\\\\\\\\\\\\\\\\\\
;**<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>
;*****************************************************************************
************************
;*****************************************************************************
************************
ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
TuDau:
Mov P0,#00h
Mov R0,#8 ;+++>>>so qua trinh thuc hien



Bài 16:
Phát triển các chương trình đã viết trong bài 14 và 15 cho 16 led và 32 led


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status