Bài 5: Lập trình 8051 ghép nối với các bộ chỉ thị
2. Lập trình ghép nối Led 7 đoạn
2.3. Lập trình cho Timer của 8051 làm chức năng bộ đếm
- Khi lập trình Timer làm chức năng bộ đếm ta cần quan tâm đếm các vấn đề sau:
+ Chọn bit C/Tx=1 ( x=0,1 tuỳ vào Timer mà ta sử dụng).
+ Chọn mode số đếm qua hai bit M0,M1 ( 8 bit, 13 bit hoặc 16 bit ).
+ Khởi động Timer: TRx=1
+ Chân cấp xung đếm cho bộ đếm theo bảng sau:
Chân Chân cổng Chức năng Mô tả
14 P3.4 T0 Đầu vào ngoài của bộ đếm 0
15 P3.5 T1 Đầu vào ngoài của bộ đếm 1
+ Giá trị số xung đếm được nằm ở TLx và THx.
Ví dụ 1: Viết chương trình cho VĐK họ 8051 đếm xung ngoài từ 0-45 sử dụng bộ đếm 0 (T0), hiển thị giá trị số đếm trên led 7 đoạn. Biết Port0 nối với các
đoạn a,b,c..h của led 7 đoạn, Port 2 quét led.
Phân tích yêu cầu:
Với yêu cầu trên ta sẽ sử dụng bộ đếm T0 của Timer0, cấp xung đếm vào chân P3.4, giá trị số đếm nằm ở TL0 và TH0. Nhưng yêu cầu chỉ cần đếm đến 45 do vậy ta có thể sử dụng Timer ở mode bit.
Để chỉ thị được số đếm 0-45 ta sẽ phải sử dụng 2 led 7 đoạn. Trước khi
đưa ra hiển thị số đếm đó cần được tách ra làm hàng chục và hàng đơn vị bằng phép chia ( DIV) sau đó phải được chuyển sang mã 7 đoạn.
Bước 1: Vẽ sơ đồ nguyên lý.
- Dùng phần mềm Proteus để vẽ sơ nguyên lý như sau.
VĐK chọn: AT89C51 Led 7 ®oan: 7seg Xung đếm: Clock
Các transistor chon: PNP ( ở đây ta nên thay bằng cổng NOT để chương trình mô
phỏng không bị chậm ).
Bước 2: Vẽ lưu đồ giải thuật.
- Lưu đồ giải thuật :
Bước 3: Soạn thảo chương trình trên trình hợp dịch:
;chuong trinh viet cho VDK 8051 dem xung ngoai su dung bo dem 1
;dem tu 0 den 45 hien thi so dem tren led 7 doan
;--- org 0
main:
mov dptr,#bang_ma ;nap dia chi ma 7 doan vao dptr Bắt đầu
- Thiết lập Timer0 ở chế
độ bộ đếm ( C/T0=1 ).
- Chọn Timer0 ở mode 8bit ( M0=0,M1=1).
- Chuyển địa chỉ của bảng mã vào DPTR.
Nạp TL0=0
- Tách và giải mã số đếm trong TL0.
- Hiển thị mã 7 đoạn vừa tách và giải mã được.
So sánh số
đếm trong TL0
≥ 45
> 45
setb P3.5
mov tmod,#00000101b ;chon timer0 mode 2 che do bo dem
setb tr0 ;khoi dong timer0
lap:
mov tl0,#00h ;dem tu 0
chua_bang:
call tach_giai_ma call hien_thi
mov a,tl0 ;dem tu 0
cjne a,#45,chua_bang ;so sanh so dem dem duoc voi 45 jmp lap
;---
;chuong trinh con tach va giai ma tach_giai_ma:
mov a,tl0 ;nap so dem can tach vao A
mov b,#10 ;nap B=10 ( de chia A cho 10) vi co hai so dem
div ab ;chia A cho B
movc a,@a+dptr ;lay ma 7 doan cua hang chuc
mov 30h,a ;cat ma 7 doan hang chuc vao ram nhap tai dia chi 30H mov a,b ;chuyen so du( la hang don vi) sang A
movc a,@a+dptr ;lay ma 7 doan hang don vi
mov 31h,a ;cat ma 7 doan hang don vi vao ram nhap ret ;---
;chuong trinh con hien thi hien_thi:
mov p0,31h ;hien thi hang don vi mov p2,#11111110b ;chon led don vi sang
call delay ;goi tre de mat quan sat duoc mov p2,#0ffh ;chong lem
mov p0,30h ;hien thi hang chuc
mov p2,#11111101b ;chon led hang chuc sang call delay ;goi tre de mat quan sat duoc mov p2,#0ffh ;chong lem
ret ;---
;chuong trinh con tao tre de mat quan sat duoc
delay: ;tao tre khoang 100ms mov r7,#50
djnz r7,$
ret ;---
;dinh nghia ma 7 doan bang_ma:
db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h end
Bước 4: Hợp dịch, sửa lỗi
Sau khi soạn thảo song ta lưu lại bài viết rồi tiến hành hợp dịch để chuyển file nguồn vừa soạn thảo sang mã máy bằng cách chọn: CTRL + F2.
Bước 5: Mô phỏng hoạt động của chương trình Bài tập:
Bài tập 1: Viết chương trình cho VĐK họ 8051 đếm xung ngoài từ 10-60 sử dụng bộ đếm 0 ( T0) , hiển thị giá trị số đếm trên led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quét led.
Bài tập 2: Viết chương trình cho VĐK họ 8051 đếm xung ngoài từ 0-245 sử dụng bộ đếm 0 ( T0) , hiển thị giá trị số đếm trên led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quét led.
Bài tập 3: Viết chương trình cho VĐK họ 8051 đếm xung ngoài từ 0-345 sử dụng bộ đếm 1 ( T1) , hiển thị giá trị số đếm trên led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quét led.