Chữ chạy

"Con đường đến với tri thức không dễ dàng, nhưng nếu chúng ta quyết đi sẽ đến được bến bờ tri thức !". Chào mừng các bạn đến với trang thông tin của Võ Hoàng Tâm - GV Khoa Điện Điện tử - Trường Đại học SPKT Vĩnh Long. Trang cung cấp thông tin - tài liệu học tập cho các bạn học viên và sinh viên. Chúc các bạn thành công trên hành trình đi tìm tri thức ...

Ứng dụng vi điều khiển AT89S52 đếm và đặt trước vòng quay từ 0-99 cho máy quấn băng keo máy biến áp xung

Bài mô phỏng này được viết ra để ứng dụng cho điều khiển máy quấn băng keo vỏ cho biến áp xung Chiếc máy quấn này chỉ có một motor quay để cố định sản phẩm và 1 trục quấn để cố định cuộn băng keo.
 Đây là panel điều khiển
 Còn đây là sơ đồ mô phỏng Proteus

Như sơ đồ trên máy có 2 phần: phần hiển thị và phần nút nhấn cài đặt
+ Phần hiển thị gồm có:
- 4 led 7 đoạn (1 cặp hiển thị cho số vòng thực tế, 1 cặp hiển thị vòng cài đặt)
- 4 led hiển thị (1 led báo RUN, 2 led báo đang đặt chế độ chạy 1 vòng hoặc 2 vòng, led tùy ý)
+ Phần cài đặt nút nhấn gồm có:
- 4 nút nhấn (1 nút START, 1 nút STOP, 1 nút tăng, 1nút giảm dành cho chế độ tùy ý)
- 1 công tắc 3 nấc (có 3 nấc cho 2 chế độ cố định là 1 vòng hoặc 2 vòng và 1 nấc cho chế độ tùy ý)
Về nguyên tăc hoạt động tóm tắt như sau:
Bình thường vừa mới cấp nguồn cho máy thì:
Hai cặp led 7 đoạn sẽ hiển thị giá trị 00 – 00
Led RUN tắt, motor không quay
Còn khi cho máy hoạt đông sẽ như sau:
Chọn chế độ 1 vòng: bật núm vặn sang nấc “1 vòng” sau đó đèn báo “1 vòng” sáng lên. Nhấn nút START sau đó đèn RUN sáng lên motor quay. Trên cặp led hiển thị “số vòng thực tế” giá trị vòng quay được sẽ tăng lên, khi tăng lên 1 thì motor dừng quay đèn RUN tắt
Chọn chế độ 2 vòng: bật núm vặn sang nấc “2 vòng” sau đó đèn báo “2 vòng” sáng lên. Nhấn nút START sau đó đèn RUN sáng lên motor quay. Trên cặp led hiển thị “số vòng thực tế” giá trị vòng quay được sẽ tăng lên, khi tăng lên 2 thì motor dừng quay đèn RUN tắt
Chọn chế độ tùy ý: bật núm vặn sang nấc “tùy ý” sau đó đèn báo “tùy ý” sáng lên. Chọn giá trị số vòng cho trước từ 00-99 bằng 2 nút tăng hoặc giảm thì cặp led 7 đoạn hiển thị “giá trị cài đặt” sẽ thay đổi theo ý mình . Nhấn nút START sau đó đèn RUN sáng lên motor quay. Trên cặp led hiển thị “số vòng thực tế” giá trị vòng quay được sẽ tăng lên, khi tăng lên giá trị cài đặt trước đó trên cặp led 7 đoạn hiển thị “giá trị cài đặt” thì motor dừng quay đèn RUN tắt.
Khi đang chạy thì nhấn stop đèn RUN tắt motor dừng quay
+ Chương trình điều khiển cho vi xử lí AT89S52:
- Mình sử dụng các chức năng counter0 (T0), ngắt ngoài 0 (INT0), ngắt ngoài 1(INT1) của vi điều khiển
donvi equ 20h
chuc equ 21h
donvi_7seg equ 22h
chuc_7seg equ 23h
donvi2 equ 24h
chuc2 equ 25h
donvi_7seg2 equ 26h
chuc_7seg2 equ 27h
sovong_manu equ 28h
//=====khai bao den hien thi========
den_start bit p2.0
den_tuyy bit p2.1
den_2vong bit p2.2
den_1vong bit P2.3
//====khai bao nut nhan==============
nut_2vong bit p3.0
nut_1vong bit p3.1
nut_tang bit p3.2
nut_giam bit p3.3
nut_start bit p3.6
nut_stop bit p3.7
org 0000h
ljmp main1
org 0003h
ljmp ngat_ngoai0
org 0013h
ljmp ngat_ngoai1
//============================
main1: mov ie,#10000101b
setb it0
setb it1
mov TMOD,#00000101b
setb tr0
mov p0,#00h
mov P2,#00
mov sovong_manu,#00
mov TL0,#00h
mov TH0,#00h
main:
lcall giaima_tp
lcall gaima_7seg
lcall hienthi
//-------------------------------------
//***********khoi kiem tra nut start _ stop
jb nut_start,kt_nutstop
jb den_start,kt_nutstop
mov TL0,#00
setb den_start
kt_nutstop: jb nut_stop,kt_nut2vong
clr den_start
//***********khoi kiem tra nut start _ stop
//-------------------------------------
// ----***khoi kiem tra che do 1 vong _ 2 vong***---
kt_nut2vong:jb nut_2vong,kt_nut1vong
clr den_tuyy
setb den_2vong
clr den_1vong
mov a,TL0
cjne a,#2,main
clr den_start
kt_nut1vong: jb nut_1vong,kt_tuyy
clr den_tuyy
setb den_1vong
clr den_2vong
mov a,TL0
cjne a,#1,main
clr den_start
kt_tuyy:
jnb nut_2vong,main
jnb nut_1vong,main
setb den_tuyy
clr den_2vong
clr den_1vong
mov a,TL0
subb a,sovong_manu
cjne a,#0,main
clr den_start

// ----***khoi kiem tra che do 1 vong _ 2 vong***---
//-------------------------------------
ljmp main
giaima_tp:
mov a,TL0
mov b,#10
div ab
mov donvi,b
mov chuc,a
mov a,sovong_manu
mov b,#10
div ab
mov donvi2,b
mov chuc2,a
ret
gaima_7seg:
mov dptr,#dulieu
mov a,donvi
movc a,@a+dptr
mov donvi_7seg,a
mov a,chuc
movc a,@a+dptr
mov chuc_7seg,a
mov a,donvi2
movc a,@a+dptr
mov donvi_7seg2,a
mov a,chuc2
movc a,@a+dptr
mov chuc_7seg2,a
ret
hienthi:
mov p1,#0ffh
mov p0,donvi_7seg
mov p1,#11111110b
lcall delay
mov p1,#0ffh
mov p0,chuc_7seg
mov p1,#11111101b
lcall delay
mov p1,#0ffh
mov p0,donvi_7seg2
mov p1,#11111011b
lcall delay
mov p1,#0ffh
mov p0,chuc_7seg2
mov p1,#11110111b
lcall delay
ret
delay: mov r7,#255
de1: mov r6,#255
djnz r7,de1
ret
ngat_ngoai0:
inc sovong_manu
mov a,sovong_manu
cjne a,#99,thoat_ngat0
mov sovong_manu,#00
thoat_ngat0:reti
ngat_ngoai1:
dec sovong_manu
mov a,sovong_manu
cjne a,#-1,thoat_ngat0
mov sovong_manu,#00
reti

dulieu:
db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h
end