Nh vậy bạn đã tạo Project thành công- Bớc 2: Tạo file hợp ngữ để lập trình + File > New > Assembler Files + Lu file Assembler với tên “Bai 1” trong th mục “Bai tap” - Bớc 3: Viết chơng t
Trang 1Bài 1: Giới thiệu và cách sử dụng phần mềm ride
Bài tập với các nhóm lệnh cơ bản
I Kiến thức cần thiết
Vi điều khiển chỉ xử lý chơng trình dới dạng file Hex Vì vậy cần phải có phần mềmbiên dịch chơng trình sang mã Hex Hiện nay, có rất nhiều phần mềm có thể lậptrình và mô phỏng: keil C, prog studio, reads 51, ride…Với Với u điểm sử dụng dễ dàng,mô phỏng trực quan nên phần mềm ride đợc lựa chọn giới thiệu trong giáo trình này
Để khởi động chơng trình
- Start > Programs > Raisonance Kit 6.1 > Ride IDE
- Double click trên Desktop
Cửa sổ chơng trình sau khi khởi động:
Trang 2Nh vậy bạn đã tạo Project thành công
- Bớc 2: Tạo file hợp ngữ để lập trình
+ File > New > Assembler Files
+ Lu file Assembler với tên “Bai 1” trong th mục “Bai tap”
- Bớc 3: Viết chơng trình chớp tắt cổng P0, add file Bai 1 vào Project“ ”
Vựng soạn thảo chương trỡnh
Trang 3- Bíc 4: Biªn dÞch ch¬ng tr×nh, söa lçi vµ ch¹y m« pháng
+ Project > Build all (Shift+F9)
Chương trình chớp tắt cổng P0
Trang 4+ Chơng trình không báo lỗi, thực hiện chạy mô phỏng
Debug > Start project.aof (Ctrl+D)
- Click
- Sau đó Click
+ Quan sát kếtquả khi chạy chơng trình
Double click P0
Trang 5II Nội dung luyện tập
2.1 Sử dụng phần mềm:
- Tạo project, tạo file, thiết lập môi trờng lập trình bằng hợp ngữ
- Cách khai báo và viết chơng trình
- Cách lu, biên dịch, tìm và xử lý lỗi
- (40h) ở RAM nội = 10h - Chuyển nội dung tại vị trí 30h ở RAM nội vào R1 và A
- Chuyển nội dung tại vị trí 40h ở RAM nội vào B
- Chuyển nội dung 0CAh vào vị trí 40h ở RAM nội vào cổng P2
- Xác định giá trị của thanh ghi R1 , thanh ghi
A , B và nội dung của RAM nội tại các vị trí trên bảng Main Register
- Xuất dữ liệu của A và B ra cổng P1 và P3.Bài số 2
- (C) = 1 ; (P2) = 0C5h
- (P1) = 35h - Xác định nội dung mới của P1 sau khi thực hiện các lệnh sau :
MOV P1.3 , CMOV C , P2.3 MOV P1.2 , C
Trang 6Bài số 3.
- (R0) = 11h ; (R1) = 23h
- (11h) ở RAM ngoài = 35h - Sao chép nội dung tại vị trí 11h ở RAM ngoài vào A
- Sao chép nội dung 55h vào vị trí 23h của RAM ngoài
- Xuất dữ liệu của A ra cổng P0 bằng phơng pháp định địa chỉ trực tiếp
Bài số 6
- (R1) = 30h ; (A) = 0ffh
- (30h) ở RAM nội = 0fh - Hoán chuyển (A) và (30h) ở RAM nội.- Xác định nội dung mới của A và (30h)
- Xuất A và (30h) ở RAM nội ra cổng P1 và P3
Cho dữ kiện nh sau :
(2A) , (2B) , (2C) , (2D) và (2E) ở RAM nội là 00h, 12h , 34h , 56h , 78h Hãy xác định nội dung của bảng số liệu sau đây theo từng lệnh cho trớc
Trang 7Bài số 9.
Cho dữ kiện nh sau : (2A) , (2B) , (2C) , (2D) và (2E) ở RAM nội là 00h, 12h , 34h , 56h
và 78h Hãy xác định nội dung của bảng số liệu sau đây theo từng lệnh cho trớc
Cờ AC = 1 vì có nhớ từ bit D3 sang D4
Cờ P = 1 vì thanh ghi A có 5 bit 1 lẻ
Cờ CY = 1 vì có nhớ qua bit D7
Cờ AC = 1 vì có nhớ từ bit D3 sang D4
Cờ P = 0 vì thanh ghi A không có bit 1 chẵn
Cờ AC = 0 vì không có nhớ từ bit D3 sang D4
Cờ P = 0 vì thanh ghi A có 4 bit 1 (chẵn)
Trang 8ADD A,R1Bài số 5.
(A) = 0C3h
(R1) = 0AAh - Xác định nội dung của A, cờ nhớ phụ AC , cờ nhớ CF sau khi thực hiện lệnh :
ADDC A,R1Bài số 6
(A) = 09Ch
(R2) = 54h - Xác định nội dung của A, cờ nhớ phụ AC , cờ nhớ CF sau khi thực hiện lệnh :
SUBB A,R2Bài số 7
(DPTR) = 12FEh - Xác định lại (DPTR) sau khi thực hiện các
lệnh :
INC DPTRINC DPTR
Bài 2: Bài tập với nhóm lệnh Tính toán lôgic, rẽ nhánh
chơng trình và điều khiển biến lôgic
Trang 9I Kiến thức cần thiết
1.1 Nhóm lệnh tính toán lôgic
1.1.1 Lệnh AND cho các biến 1 byte.
Cú pháp câu lệnh: ANL <dest-byte>, <src-byte>
1.1.2 Lệnh AND cho các biến 1 bit
Cú pháp câu lệnh: ANL C, <src-bit>
1.1.3 Lệnh OR cho các biến 1 byte
Cú pháp câu lệnh: ORL <dest-byte>, <src-byte>
1.1.4 Lệnh OR cho các biến 1 bit
Cú pháp câu lệnh: ORL C, <src-bit>
1.1.5 Lệnh X-OR cho các biến 1 byte
Cú pháp câu lệnh: XRL <dest-byte>, <src-byte>
1.1.6 Lệnh dịch trái thanh ghi A
1.2 Nhóm lệnh điều khiển biến logic
1.2.1 Lệnh gọi tuyệt đối.
Cú pháp câu lệnh: ACALL addr11
1.2.2 Lệnh gọi dài.
Cú pháp câu lệnh: LCALL addr16
1.2.3 Lệnh quay trở lại từ chơng trình con.
1.2.6 Lệnh nhảy nếu 1 bit đợc thiết lập.
Cú pháp câu lệnh: JB bit, rel
1.2.7 Lệnh nhảy nếu 1 bit không đợc thiết lập.
Cú pháp câu lệnh: JNB bit, rel
1.2.8 Lệnh nhảy nếu 1 bit đợc thiết lập và xoá bit đó.
Cú pháp câu lệnh: JBC bit, rel
1.2.9 Lệnh nhảy nếu cờ nhớ đợc thiết lập.
Trang 10Cú pháp câu lệnh: CJNE <dest-byte>, <src-byte>, rel
Cú pháp câu lệnh: SETB bit
1.3.4 Lệnh lấy bù của bit
Cú pháp câu lệnh: CPL <bit>
1.3.5 Lệnh lấy bù của thanh ghi tích luỹ
Cú pháp câu lệnh: CPL A
II Nội dung luyện tập
- Thực hiện giải các bài toán, kiểm tra kết quả bằng phần mềm mô phỏng RIDE
(P1.0) = 1 , ACC.7 =1 , OV = 0 - Hãy thiết lập cờ nhớ bằng loệnh ANL.
(P1.0) = 1 , ACC.7 =1 , OV = 0 - Hãy thiết lập cờ nhớ bằng lệnh ORL.
(A) = 0C5h - Xác định (A) sau khi thực hiện lệnh :
RL A
Trang 11(A) = 0C5h - Xác định (A) sau khi thực hiện lệnh : RR ABài số 9.
(A) = 0C5h
(C) = 0 - Xác định (A) và cờ (C) sau khi thực hiện lệnh :
RRC A Bài số 10
(A) = 0C5h - Xác định (A) sau khi thực hiện lệnh : SWAP
A
II.2 Các lệnh rẽ nhánh, so sánh , giảm và nhảy :
Bài số 1
Cho đoạn chơng trình sau :
Bài số 2
Đoạn chơng trình sau sẽ xoá
ACC và sau đó cộng 3 vào ACC
- Hãy cho biết số lần cực đại mà vòng lập ở
đoạn chơng trình trên có thể lặp lại là bao nhiêu ?
Bài số 3
- Hãy viết đoạn chơng trình đẻ xác định xem
Trang 12R5 có chứa giá trị 0 không ? nếu không thì nạp vào R5 giá trị 55h.
Bài số 4
Đoạn chơng trình sau sẽ nạp giá
trị 55h vào thanh ghi ACC và lấy
(P1) = 5Dh - Thực hiện lệnh xoá bit để có (P1) = 59h
Bài số 2
(P1) = 34h ; (C) = 0 - Thực hiện lệnh thiết lập bit để có (P1) = 35h
và C = 1
Bài số 3
Cổng P1 vừa đợc ghi nội dung
Bài số 4
Sau khi thực hiện lệnh CPL A thì
(A) = 0A3h - Hãy xác định nội dung ban đầu của A.
Bài số 5
MOV P0,#0FEH - Thực hiện lệnh lấy bù bit, CPL A để (P0)=00H
Trang 13Bài 3: Lập trình với timer và các ngắt ngoài
Lập trình với led đơn, led 7 thanh, led matrix
I Kiến thức cần thiết
I.1 Trình tự thực hiện ngắt
- Ngắt Timer
$Include(reg51.inc)
org 0000h ; Địa chỉ bắt đầu chơng trình
ljmp main ; Nhảy tới chơng trình main
org 00xxh ; Địa chỉ ngắt Timer
ljmp Ngat_Timer ; Nhảy tới chơng trình phục vụ ngắt
main:
mov TMOD,#xxh ; Lựa chọn Timer , chế độ hoạt động
mov TLx,#xxh ; Xác định giá trị ban đầu cho TLx
mov THx,#xxh ; Xác định giá trị ban đầu cho THx
setb EA ; Khởi tạo ngắt Timer
org 0000h ; Địa chỉ bắt đầu chơng trình
ljmp main ; Nhảy tới chơng trình main
org 00xxh ; Địa chỉ ngắt ngoài
ljmp Ngat_ngoai ; Nhảy tới chơng trình phục vụ ngắt
main:
setb EA ; Cho phép ngắt hoạt động
setb EXx ; Lựa chọn ngắt ngoài tơng ứng
setb ITx ; Chọn mức cho ngắt ngoài
Trang 14Hình 3.1 Sơ đồ kết nối VĐK với các LED đơn
- Cực dơng của Led đợc nối với điện trở, điện trở đợc nối với các chân vi điều khiển.Cực âm của Led đợc nối với GND của vi điều khiển Nh vậy, khi chân vi điều khiển
ở mức cao ( tức là 5V), đèn Led sẽ sáng Khi chân vi điều khiển ở mức thấp ( 0V)
đèn LED sẽ tắt
- Lu ý trong hình: Giá trị điện trở đợc xác định dựa vào dòng tối đa của vi điều
khiển, điện áp và dòng tối đa của Led Nh vậy, giá trị nhỏ nhất của điện trở đợc
- Led anode chung
Với loại Led anode chung chân COM phải có mức logic 1(+5V), Led muốn sáng thìtơng ứng các chân A-F,H phải có mức logic 0
Bảng 3.1: Bảng mã cho Led anode chung:
Trang 15- Led cathode chung
Với loại Led cathode chung chân COM phải có mức logic 0, Led muốn sáng thì
t-ơng ứng các chân A-F,H phải có mức logic 1
Bảng 3.2: Bảng mã cho Led cathode chung:
Khi kết nối chung dữ liệu Led 7 thanh ta không thể cho các Led sáng đồng thời do
ảnh hởng của các Led với nhau Muốn các Led sáng ta phải sử dụng phơng phápquét, nghĩa là tại mỗi thời điểm chỉ có một Led đợc sáng còn các Led khác tắt Vìkhoảng thời gian tắt mở này rất nhanh (cỡ ms) và do hiện tợng lu ảnh của mắt ta sẽthấy các Led sáng đồng thời Dựa vào hiện tợng lu ảnh đó, chúng ta thiết kế phầncứng nh sau:
- Sơ đồ kết nối phần cứng vi điều khiển với Led 7 thanh loại cathode chung
Trang 16Hình 3.2 Sơ đồ kết nối phần cứng vi điều khiển với Led 7 thanh loại cathode chung
- Sơ đồ kết nối phần cứng vi điều khiển với Led 7 thanh loại anode chung
Hình 3.3 Sơ đồ kết nối phần cứng vi điều khiển với Led 7 thanh loại anode chung
I.3 Led Matrix
- Dạng Led
Trang 17- Sơ đồ cấu tạo
Hình 3.3 Sơ đồ cấu tạo Led Matrix
Một ma trận Led có 16 chân được sắp xếp theo thứ tự 8 h ng, 8 càng, 8 c ột Số chân của ledđược đánh từ 1 đến 16 theo sơ đồ hình vẽ
- Theo đó ta có thứ tự các cột gồm : 13, 3, 4, 10, 6, 11, 15, 16
- Các h ng theo thàng, 8 c ứ tự : 9, 14, 8, 12, 1, 7, 2, 5
Nguyên lý hoạt động:
Để ma trận Led sáng được ta tiến h nh càng, 8 c ấp nguồn như sau:
- Chân (theo thứ tự cột) gồm : 13, 3, 4, 10, 6, 11, 15, 16 được nối với âm nguồn
- Chân ( theo thứ tự h ng) gàng, 8 c ồm : 9, 14, 8, 12, 1, 7, 2, 5 được nối với dươngnguồn
Muốn cho Led n o àng, 8 c được sáng thì ta cấp nguồn cho Led đó Nguồn cấp cho Led làng, 8 c+Vcc v dòng càng, 8 c ấp tối đa trên mỗi Led l 10 mA.àng, 8 c
Để điều khiển led ma trận sáng theo ý muốn người ta có thể sử dụng nhiềuphương pháp để điều khiển như sử dụng kĩ thuật số, sử dụng vi điều khiển Trongcác phơng pháp đó thì sử dụng vi điều khiển để điều khiển l phàng, 8 c ương pháp được achuộng nhất hiện nay vì mạch không cồng kềnh, dễ điều khiển dễ thay đổi chươngtrình
Trang 18Ví dụ: Dùng vi điều khiển viết chơng trình hiển thị trên Led Matrix 8x8, hiển thị số 2 nh hình:
Để hiển thị số 2 như trên hình vẽ ta sử dụng kiểu xuất dữ liệu ra h ng (8 h ng)àng, 8 c àng, 8 c
v quét càng, 8 c ột (8 cột) theo công thức : địa chỉ = con trỏ + bộ đếm , địa chỉ l àng, 8 c địa chỉcủa byte đầu tiên của ký tự (mỗi ký tự đợc mã hóa bằng 8 byte liên tiếp) để xuất rabảng Led matrix, bảng ký tự đợc truy xuất bằng lệnh Movc a,@a+dptr Con trỏ sẽtăng lên 1 mỗi khi kết thúc một hay nhiều frame hoặc không tăng nếu nh nội dungcần hiển thị không dịch chuyển Mỗi frame là một phần hoặc toàn bộ nội dungmuốn hiển thị tại một thời điểm nào đó bao gồm một hoặc nhiều ký tự Thông thờng
để có thể nhìn thấy Led sáng bình thờng ( thực chất là chớp tắt ) ta cho tần số quétkhoảng 24 lần trong 1s
Với bảng mã quét cột nh sau: 80h,40h,20h,10h,08h,04h,02h,01h
Sau đây là sơ đồ kết nối phần cứng điều khiển ma trận Led hiển thị số 2, sửdụng cổng P0 làm cổng xuất dữ liệu ra hàng, P2 làm cổng quét cột
Hình 3.5 Sơ đồ kết nối phần cứng điều khiển Matrix Led 8x8
- Lu đồ thuật toán hiển thị Matrix
CộtHàng 1 2 3 4 5 6 7 8
Mó hex(theo cột)
Trang 19Tắt các cổng P0,P2 Trỏ DiaChi tới vùng Rom hiển thị Thiết lập tốc độ dịch
MOV DPTR,DiaChi Thiết lập số cột Matrix
Xuất dữ liệu hàng Xuất dữ liệu cột Call Delay (tạo lưu ảnh) Xoá dữ liệu hàng, cột Tăng DPTR
Số cột Matrix = ?
N
Y
Số lần quét một ảnh = ?
Tổng số trạng thái = 0
Trang 20Ví dụ 1: Chơng trình hiển thị dịch số 2 trên Matrix 8x8
$include(reg51.inc)
org 0000h ; Địa chỉ bắt đầu chơng trìnhmov dph,#03h ; Trỏ byte cao con trỏ DPTR tới mã hiển thị Start: mov r3,#00h ; Biến dùng để dịch Matrix
Lap: mov r4,#100 ; Quét lại 100 lần Matrix
Loop: mov 01h,03h
mov r2,#0f0h ; R2 quản lý địa chỉ quét cộtmov r0,#8 ; Tổng số cột của MatrixNext: mov dpl,r1 ; R1 quản lý địa chỉ hàng
clr a movc a,@a+dptr ; Lấy dữ liệu hiển thị ra thanh ghi Amov p0,a ; Xuất ra cổng P0
clr a mov dpl,r2 movc a,@a+dptr ; Lấy dữ liệu quét cột ta thanh ghi Amov p2,a ; Xuất ra cổng P2
acall Delay ; Tạo độ lu ảnh cho mắtmov p0,#00h ; Chống nhèm
mov p2,#00h inc r1 inc r2 djnz r0, Next ; Đủ số cột Matrix ???
djnz r4, Loop ; Đủ 100 lần ???
inc r3 ; Dịch hiển thịcjne r3,#16, Lap ; Tổng số trạng tháijmp Start ; Lặp lại từ đầu
mov r6,#01hw1: mov r7,#50h
Trang 21Ví dụ 2: Chơng trình hiển thị 0-9 dịch trên các LED 7 thanh anode chung
; CHUONG TRINH HIEN THI 0-9 DICH TREN CAC LED 7 THANH
; CHUONG TRINH DIEU KHIEN CHO LED A CHUNG
; DIEU KHIEN LED SU DUNG TRANZITOR A564
; CONG DIEU KHIEN CHON LED SANG P3
; CONG XUAT DATA P2
$INCLUDE(REG51.INC) org 0000h ; bat dau chuong trinh mov dph,#03h ; tro byte cao con tro dph toi 03h start:
mov r3,#00h ; bien dung dich so loop:
mov r4,#50 ; lap lai 100 lan quet 8 led lap:
mov 01h,03h ; (r1) = (r3) mov r2,#0f0h ; tro toi vung ma dich led mov r0,#8 ; tong so led 7 thanh next:
mov dpl,r1 ; (dpl) = (r1) clr a
movc a,@a+dptr ; (a) = du lieu hien thi tren led mov p2,a ; dua du lieu ra cong p2
clr a mov dpl,r2 movc a,@a+dptr ; (a) = du lieu dich cac led mov p3,a ; dua du lieu ra cong p3 acall delay ; tao do luu anh cho mat mov p3,#0ffh ; tat het cac led
mov p2,#0ffh inc r1
inc r2 djnz r0,next ; du 8 led chua???
djnz r4,lap ; du 50 lan chua???
inc r3 ; dich so hien thi tren led cjne r3,#16,loop ; tong so trang thai jmp start
;======ham delay tao do luu anh=====
delay:
mov r6,#01h w1: mov r7,#50h
djnz r7,$
djnz r6,w1 ret
;======dia chi chua vung du lieu======
org 0300h ; du lieu hien thi tren led
end ; ket thuc chuong trinh
II Nội dung luyện tập
II.1 Điều khiển Led đơn
Bài 1 : Viết chơng trình điều khiển hệ thống đèn sáng dần
- Viết chơng trình Port 1 sáng dần rồi tắt hết
- Viết chơng trình Port 1 sáng dần rồi tắt dần
- Viết chơng trình Port 0 và Port 1 sáng dần rồi tắt dần
- Viết chơng trình sáng dần 16 Led từ giữa sáng ra ngoài rồi tắt từ ngoài vào trong
Bài 2 : Viết chơng trình điều khiển hệ thống đèn sáng dồn
Trang 22- Viết chơng trình P0 sáng dồn.
- Viết chơng trình P0 và P1 sáng dồn từ dới lên
Bài 3 : Viết chơng trình đếm nhị phân trên các Port của VĐK
- Viết chơng trình đếm lên nhị phân từ 00 – FFh hiển thị trên Port P1
- Viết chơng trình đếm xuống nhị phân từ FFh – 00h hiển thị trên Port P1
II.2 Điều khiển Led 7 thanh
Bài 1: Viết chơng trình đồng hồ: hiển thị giờ, phút, giây trên Led 7 thanh
Bài 2: Làm lại bài 1 với xung Clock chính xác 1s sử dụng ngắt Timer
Bài 3: Viết chơng trình đếm sản phẩm sử dụng ngắt ngoài, hiển thị số sản phẩm trên Led 7 thanh
II.3 Điều khiển Matrix Led
Bài 1: Viết chơng trình hiển thị ký tự A,B,C trên Matrix 8x8
Bài 2: Viết chơng trình hiển thị số 1 chớp tắt trên Matrix 8x8 với xung clock 1s
Trang 23Bài 4: lập trình điều khiển động cơ DC, động cơ bớc
I Kiến thức cần thiết
1.1 Cấu tạo động cơ bớc:
Động cơ bớc là một thiết bị sử dụng rộng rãi để chuyển các xung điện thành chuyển
động cơ học Trong các ứng dụng chẳng hạn nh các bộ điều khiển đĩa, các máy inkim ma trận và các máy rô-bốt thì động cơ bớc đợc dùng để điều khiển chuyển
động Mỗi động cơ bớc đều có phần quay rôto là nam châm vĩnh cửu (cũng còn đợcgọi là trục dẫn - shaft) đợc bao bọc xung quanh là phần tĩnh gọi stato Lu ý rằng,trục của một động cơ thờng thì quay tự do, còn trục của động cơ bớc thì chuyển
động theo một độ tăng cố định lặp lại để cho phép ta chuyển dịch nó đến một vị tríchính xác Hớng quay đợc xác định bởi từ trờng của stato Từ trờng của stato đợcxác định bởi dòng chạy quanh lõi cuộn dây, khi hớng của dòng thay đổi thì cực từtrờng cũng thay đổi gây ra chuyển động ngợc lại của động cơ (đảo chiều) Động cơbớc đợc nối ở đây có 6 đầu dây: 4 đầu của cuộn dây stato và hai đầu dây chung điểmgiữa của các cặp dây Khi chuỗi xung nguồn đợc cấp đến mỗi cuộn dây stato thì
động cơ sẽ quay Có một số chuỗi xung đợc sử dụng rộng rãi với cấp độ chính xáckhác nhau Bảng 1.1 trình bày chuỗi 4 bớc thông thờng