mình có thực hiện một mạch điều khiển động cơ bước dạng 1.8 đọ áp 12v 6 đầu dây. thông qua biến trở bằng adc. nhung có một số vấn đề xảy ra là khi mình text để port1 không ảnh hưởng đên adc0804 thì mov p1,#0 và mỗi lần reset thì và thay đổi giá trị biến trở thì thấy 8 led ở đầu ra của adc0804 thay đổi . có nghĩa là con này hoạt động nhung khi nạp chưong trình mình viết vô thì thấy động cơ không chạy và mấy led đó cũng không thầy sáng port1 do lun ở 5v. còn 3 led 7 doạn báo tốc độ thì chỉ nhấp nháy mờ thồi. mình nghĩ có lẽ do chương trình mình viết có lỗi gì chăng ?? ở đây mình đã viết và chú thích khá rõ từng dòng lệnh và í đồ thiết kế bác nào hiểu sâu về lập trình assemly thì có thể chỉ ra lỗi của chương trình mình viết ??????:
;----- Chuong trinh dieu khien & hien thi toc do encoder-------------
Org 0000h
Ljmp Main
Org 0003h ; ngat dem xung encoder
Inc R0 ; bien dem xung
Mov A, R0
Cjne A,#100,finish ; neu du 100 xung/vong
INC 60H ; thi luu so vong vao R1
Mov R0, #0 ; va xoa bien dem xung R0cho lan dem sau
finish:
nop
RETI
Org 0013H ; ngat tu ADC bao da chuyen xong tu (voltage to digital)
Clr P3.5 ; cho phep vi dieu khien doc tu ADC (chan p3.5 dieu khien chan "READ" cua 0804
Mov A,p1
Setb P3.5 ; set cho lan doc tu adc sau.
Clr P3.6 ;
Setb P3.6 ; tao xung tu 0-->1 de cho phep "WR" from analogue to digital (dieu khien chan Write of 0804)
RETI
Org 001BH ; ngat bao thoi diem hien toc do ra 7segment
ljmp Hien_thi ; ngat time 1 bao led---
Main:
Mov R0, #0
Mov R1, #0
Mov TMOD,#11H ; khai bao su dung timer 1 va 0
Mov IE,#10001101B ; khai bao cho phep su dung 3 ngat ( INT0,INT1,TIMER1)
Setb IT0
Setb IT1
Clr P3.6
Setb P3.6 ;--------------- Khai bao cho phep convert voltage to digital lan dau tien
Mov TH1,#HIGH(-50000) ; nap gia tri dau cho ngat timer 1
Mov TL1,#LOW(-50000) ;***********
SetB TR1 ;-------------------------cho phep timer 1 hoat dong
;****************************************
;/////; **---cho motor hoat dong---**//
Kiem_tra:
Mov A,P1 ; kiem tra bien tro qua trung gian ic ADC va P1
Cjne A,#0FFH,Begin ; bien tro khong o min thi cho motor hoat dong
Mov P2,#0 ;-------------neu de o min thi stop moto and wait
; a new value; dùng port 2 de kich opto ..-->motor
Sjmp Kiem_tra
Begin:
Mov R5,#4 ; 4 xung de kich du mot chu trinh kich 4 cuon day .....vv...
Mov R6,#0 ; thay doi thu tu cac cuon day kich...
Mov DPTR,#buoc_quay
Chay_tiep:
Mov A,R6
Movc A,@A+DPTR
Mov P2, A
Inc R6
Call Delay_chay
Djnz R5,Chay_tiep ; neu kich chua du chu trinh thi Jmp chay_tiep
Sjmp Kiem_tra ; khi kich du chu trình 4 cuon dây thì Jmp to Kiem_tra
Delay_chay:
;***** neu nap #63H vào Th0 và tl0 thì motor quay min..
;***** neu nap #0F0H vào th0 và tl0 thì motor quay max
;***** do do sau khi check motor not " min" thì
;****** kiem tra xem #63h<= P1<= #0F0h ???
Mov A,P1
Clr C ; xoa co nho ve "Zero"
Mov R3, #63h ; dua value min "#63h " vao R3de so sanh voi gia tri tu Port 1
Subb A,R3
Jc Next ;if #63H thi nhay den label Next
Mov R0,#0F0H ; tiep tu so sanh voi chuan "max" #0F0H"
Mov A,P1
Subb A,R3
Jc Inner ; P1< #0F0h thi nhay den label "Inner"
Mov A,#0F0H ; P1>= max thì chon max chuan lam gia tri cho ham delay
Sjmp Delay1
Next:
Mov A,#63H ; neu P1 <#63h thi chon TH0= #63H lam gia tri delay
Sjmp Delay1
Inner:
Mov A,P1 ; neu #63h <= P1 <= #0F0h thi lay P1 lam gia tri ham delay
; ********* ham delay cho motor***********
Delay1:
Mov TH0,A
Mov TL0,A
Setb TR0
Jnb TF0,$
Clr TF0
Clr TR0
RET
buoc_quay: DB 01h,02h,04h,08h
;************************ phan hien thi ra led *******************************
Hien_thi:
Clr TR1 ; stop timer 1
Clr TF1 ; xoa co tran timer 1
Mov TH1,#HIGH(-50000) ;---nap lai gia tri cho timer 1
Mov TL1,#LOW(-50000) ;----nap lai gia tri cho timer 1
SETB TR1 ;---------------------tiep tuc cho timer 1 hoat dong
Inc R7 ; bien R7 de kiem soat lap 20 lan cho du 1s
Mov A,R7 ; kiem tra xem da du 1s chua ??
Cjne A,#20,Nothing ; thoat khoi ngat neu chua du 1s
Mov R7,#0 ; neu du 1s thi R7 cho lan sau
Mov DPTR,#ma_led ; thuc hien viec giai ma xuat led
Mov B,#60
Mov A, 60H ; dua so vong quay sau 1s vao A
Mov 60H, #0 ; dua bien dem vong ve "zero" cho lan dem sau/
Mul AB ; so vong /phut
Xch A,B
Swap A
Orl A,B
Mov B,#10
Div AB
Xch A,B
Movc A,@A+DPTR
Mov P0, A ; ; hien thi hang don vi
Clr P3.4 ; p3.4 noi voi cua baze cua transistor kich hang don vi
Acall Small_d ; goi tre de quan sat led
Setb P3.4 ; tat led don vi
Xch A,B
Mov B,#10
Div AB
Movc A,@A+DPTR
Mov P0,A ;**************
Clr P3.0 ;----On led hàng tram
Acall Small_d
Setb P3.0 ;----Off led hang tram
Mov A,B
Movc A,@A+DPTR
Mov P0,A ;------hien thi hang chuc
Clr P3.1 ;------on led hang chuc
Acall Small_d
Setb P3.1 ; off led hàng chuc
Sjmp Nothing ; hien thi xong thi nhay den "nothing de thoat khoi ngat timer 1
Small_d:
Mov R4, #255
Djnz R4, $
Ret
ma_led: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
Nothing:
nop
RETI
End
;----- Chuong trinh dieu khien & hien thi toc do encoder-------------
Org 0000h
Ljmp Main
Org 0003h ; ngat dem xung encoder
Inc R0 ; bien dem xung
Mov A, R0
Cjne A,#100,finish ; neu du 100 xung/vong
INC 60H ; thi luu so vong vao R1
Mov R0, #0 ; va xoa bien dem xung R0cho lan dem sau
finish:
nop
RETI
Org 0013H ; ngat tu ADC bao da chuyen xong tu (voltage to digital)
Clr P3.5 ; cho phep vi dieu khien doc tu ADC (chan p3.5 dieu khien chan "READ" cua 0804
Mov A,p1
Setb P3.5 ; set cho lan doc tu adc sau.
Clr P3.6 ;
Setb P3.6 ; tao xung tu 0-->1 de cho phep "WR" from analogue to digital (dieu khien chan Write of 0804)
RETI
Org 001BH ; ngat bao thoi diem hien toc do ra 7segment
ljmp Hien_thi ; ngat time 1 bao led---
Main:
Mov R0, #0
Mov R1, #0
Mov TMOD,#11H ; khai bao su dung timer 1 va 0
Mov IE,#10001101B ; khai bao cho phep su dung 3 ngat ( INT0,INT1,TIMER1)
Setb IT0
Setb IT1
Clr P3.6
Setb P3.6 ;--------------- Khai bao cho phep convert voltage to digital lan dau tien
Mov TH1,#HIGH(-50000) ; nap gia tri dau cho ngat timer 1
Mov TL1,#LOW(-50000) ;***********
SetB TR1 ;-------------------------cho phep timer 1 hoat dong
;****************************************
;/////; **---cho motor hoat dong---**//
Kiem_tra:
Mov A,P1 ; kiem tra bien tro qua trung gian ic ADC va P1
Cjne A,#0FFH,Begin ; bien tro khong o min thi cho motor hoat dong
Mov P2,#0 ;-------------neu de o min thi stop moto and wait
; a new value; dùng port 2 de kich opto ..-->motor
Sjmp Kiem_tra
Begin:
Mov R5,#4 ; 4 xung de kich du mot chu trinh kich 4 cuon day .....vv...
Mov R6,#0 ; thay doi thu tu cac cuon day kich...
Mov DPTR,#buoc_quay
Chay_tiep:
Mov A,R6
Movc A,@A+DPTR
Mov P2, A
Inc R6
Call Delay_chay
Djnz R5,Chay_tiep ; neu kich chua du chu trinh thi Jmp chay_tiep
Sjmp Kiem_tra ; khi kich du chu trình 4 cuon dây thì Jmp to Kiem_tra
Delay_chay:
;***** neu nap #63H vào Th0 và tl0 thì motor quay min..
;***** neu nap #0F0H vào th0 và tl0 thì motor quay max
;***** do do sau khi check motor not " min" thì
;****** kiem tra xem #63h<= P1<= #0F0h ???
Mov A,P1
Clr C ; xoa co nho ve "Zero"
Mov R3, #63h ; dua value min "#63h " vao R3de so sanh voi gia tri tu Port 1
Subb A,R3
Jc Next ;if #63H thi nhay den label Next
Mov R0,#0F0H ; tiep tu so sanh voi chuan "max" #0F0H"
Mov A,P1
Subb A,R3
Jc Inner ; P1< #0F0h thi nhay den label "Inner"
Mov A,#0F0H ; P1>= max thì chon max chuan lam gia tri cho ham delay
Sjmp Delay1
Next:
Mov A,#63H ; neu P1 <#63h thi chon TH0= #63H lam gia tri delay
Sjmp Delay1
Inner:
Mov A,P1 ; neu #63h <= P1 <= #0F0h thi lay P1 lam gia tri ham delay
; ********* ham delay cho motor***********
Delay1:
Mov TH0,A
Mov TL0,A
Setb TR0
Jnb TF0,$
Clr TF0
Clr TR0
RET
buoc_quay: DB 01h,02h,04h,08h
;************************ phan hien thi ra led *******************************
Hien_thi:
Clr TR1 ; stop timer 1
Clr TF1 ; xoa co tran timer 1
Mov TH1,#HIGH(-50000) ;---nap lai gia tri cho timer 1
Mov TL1,#LOW(-50000) ;----nap lai gia tri cho timer 1
SETB TR1 ;---------------------tiep tuc cho timer 1 hoat dong
Inc R7 ; bien R7 de kiem soat lap 20 lan cho du 1s
Mov A,R7 ; kiem tra xem da du 1s chua ??
Cjne A,#20,Nothing ; thoat khoi ngat neu chua du 1s
Mov R7,#0 ; neu du 1s thi R7 cho lan sau
Mov DPTR,#ma_led ; thuc hien viec giai ma xuat led
Mov B,#60
Mov A, 60H ; dua so vong quay sau 1s vao A
Mov 60H, #0 ; dua bien dem vong ve "zero" cho lan dem sau/
Mul AB ; so vong /phut
Xch A,B
Swap A
Orl A,B
Mov B,#10
Div AB
Xch A,B
Movc A,@A+DPTR
Mov P0, A ; ; hien thi hang don vi
Clr P3.4 ; p3.4 noi voi cua baze cua transistor kich hang don vi
Acall Small_d ; goi tre de quan sat led
Setb P3.4 ; tat led don vi
Xch A,B
Mov B,#10
Div AB
Movc A,@A+DPTR
Mov P0,A ;**************
Clr P3.0 ;----On led hàng tram
Acall Small_d
Setb P3.0 ;----Off led hang tram
Mov A,B
Movc A,@A+DPTR
Mov P0,A ;------hien thi hang chuc
Clr P3.1 ;------on led hang chuc
Acall Small_d
Setb P3.1 ; off led hàng chuc
Sjmp Nothing ; hien thi xong thi nhay den "nothing de thoat khoi ngat timer 1
Small_d:
Mov R4, #255
Djnz R4, $
Ret
ma_led: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
Nothing:
nop
RETI
End
Comment