Thông báo

Collapse
No announcement yet.

Lập trình để 89C51 điều khiển động cơ DC

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lập trình để 89C51 điều khiển động cơ DC

    Có ai giúp mình lập trình bằng ngôn ngữ VDK bài tập này với dc ko? ( dây là bài tập lớn ở lớp nhưng mình chưa biết làm )

    Yêu cầu của bài :
    Ðiều khiển động cơ DC ( dùng 89C51)
    _ Motor dc điều chế độ rộng xung(PWM) để thay đổi tốc độ
    _ Khi reset motor quay thuận với tốc độ chậm
    _ Khi tác động ngắt(theo mức)>>motor đổi chiều quay ( tốc độ ko đổi )
    _ Khi tác động ngắt INT1 ( theo mức )>> motor quay thuận với tốc độ cao
    Nhở mọi người giải và giải thích kĩ từng câu lệnh nhé dùm nhé .
    Thanks trước^^
    P/s : dùng ngôn ngữ VDK để mô phỏng trên Reads51 nhé( ko phải C )
    Last edited by hgfhfghgf; 26-09-2007, 00:34.

  • #2
    Có ai giúp mình lập trình bằng ngôn ngữ VDK bài tập này với dc ko? ( dây là bài tập lớn ở lớp nhưng mình chưa biết làm )

    Yêu cầu của bài :
    Ðiều khiển động cơ DC ( dùng 89C51)
    _ Motor dc điều chế độ rộng xung(PWM) để thay đổi tốc độ
    _ Khi reset motor quay thuận với tốc độ chậm
    _ Khi tác động ngắt(theo mức)>>motor đổi chiều quay ( tốc độ ko đổi )
    _ Khi tác động ngắt INT1 ( theo mức )>> motor quay thuận với tốc độ cao
    Nhở mọi người giải và giải thích kĩ từng câu lệnh nhé dùm nhé .
    Thanks trước^^
    P/s : dùng ngôn ngữ VDK để mô phỏng trên Reads51 nhé
    bạn vào link này nhé: http://dientuvietnam.net/forums/showthread.php?t=7599
    chúc thành công

    Comment


    • #3
      Bạn ơi , mình cần 1 code hoàn chỉnh để dịch trên Reads 51 cơ , bạn có thế giúp mình dc ko?

      Comment


      • #4
        Nguyên văn bởi hgfhfghgf Xem bài viết
        Bạn ơi , mình cần 1 code hoàn chỉnh để dịch trên Reads 51 cơ , bạn có thế giúp mình dc ko?
        bạn ah...
        bạn đang làm đồ án hay BTL môn học
        cái này mình cũng chưa làm cũng như 89C51 mình không còn làm về nó nữa nhưng có 1 file mình post lên cho bạn tham khảo.
        Nếu bạnlàm bằng AVR thì mình sẽ giúp dc nhiều hơn.
        chúc thành công.

        Code:
        #include <sfr52.inc>
        ORG		0H
        	
        	LJMP 	SCANKEY 	; gäi ch­¬ng tr×nh con quÐt bµn phÝm
        ;Ch­¬ng tr×nh con ®iÒu khiÓn ®Ìn LED b»ng bµn phÝm
        Start:
        LJMP 	SCANKEY 	; gäi ch­¬ng tr×nh con quÐt bµn phÝm
        ;Ch­¬ng tr×nh con ®iÒu khiÓn ®Ìn LED b»ng bµn phÝm
        SOSANH:	
        	MOV	R0,#32H		;n¹p thanh ghi R0 gi¸ trÞ #30h ( m· ASCII cña phÝm 0) ®Ó so s¸nh
        	XRL	A,R0		;so s¸nh m· bµn phÝm
        	JZ	QUAYPHAI 	; nÕu ®óng th× A = 0, nh¶y tíi ch­¬ng tr×nh con QUAYPHAI,nÕu A #0 thùc hiÖn lÖnh tiÕp theo
        	MOV	A,R5		; chuyÓn  m· bµn phÝm (m· ASCII) vµo A
        	MOV	R1,#33H		;n¹p thanh ghi R1 gi¸ trÞ #31h ( m· ASCII cña phÝm 1) ®Ó so s¸nh
        	XRL	A,R1		;so s¸nh m· bµn phÝm
        	JZ	QUAYTRAI	; nÕu ®óng th× A = 0, nh¶y tíi ch­¬ng tr×nh con NHAY1,nÕu A #0 thùc hiÖn lÖnh tiÕp theo	
        	LJMP	SCANKEY
        	RET
        ;Ch­¬ng tr×nh con göi liªn tôc mét chuçi xung tíi cæng P1, ®ång thêi kiÓm tra xem cã phÝm kh¸c ®­îc Ên, nÕu cã nh¶y tíi ch­¬ng tr×nh con kh¸c
        QUAYPHAI:
        MOV 	P2,#00h
        acall	Lcd
        Loop:
        CLR	p2.4
        SETB	p2.7
        ACALL	Delay_1s
        CLR	p2.7
        SETB	p2.6
        Acall	delay_1s
        CLR	p2.6
        SETB	p2.5
        acall	delay_1s
        clr	p2.5
        setb	p2.4
        acall	delay_1s
        acall	test
        SJMP	Loop
        ;
        QUAYTRAI:
        MOV 	P2,#00h
        acall	Lcd
        Loop1:
        CLR	p2.6
        SETB	p2.7
        ACALL	Delay_1s
        CLR	p2.7
        SETB	p2.4
        Acall	delay_1s
        CLR	p2.4
        SETB	p2.5
        acall	delay_1s
        clr	p2.5
        setb	p2.6
        acall	delay_1s
        acall	test
        SJMP	Loop1
        ;Ch­¬ng tr×nh con quÐt bµn phÝm theo b¶ng m· ASCII vµ göi m· ASCII tíi thanh ghi tÝch luü A (sö dông 4 phÝm ®iÒu khiÓn,cæng P0 use lµm cét, P2 use lµm hµng) 
        SCANKEY:
        	MOV	P0,#0FFH		; ®Æt cæng P2 lµm cæng vµo
        K1:	
        	CLR	P0.3
        	CLR	P0.4
        	MOV	A,P0		; ®äc cét P0D
        	ANL	A,#00000111B	; che c¸c bÝt ko dïng
        K2:	ACALL	DELAY20	; ®îi 20ms
        	CJNE	A,#00000111B,K1	; kiÓm tra nh¶ phÝm
        	MOV	A,P0		; ®äc cét
        	ANL	A,#00000111B	; che c¸c bÝt ko dïng
        	CJNE	A,#00000111B,OVER	; x¸c nhËn cã phÝm Ên
        	SJMP	K2
        OVER:	ACALL	DELAY20	; ®îi 20ms
        	MOV	A,P0		; ®äc cæng P2
        	ANL	A,#00000111B	; che c¸c bÝt ko dïng
        	CJNE	A,#00000111B,OVER1	; cã phÝm nhÊn th× x¸c ®Þnh hµng
        	SJMP	K2
        OVER1:	MOV	P0,#11110111B	; tiÕp ®Êt hµng 0
        	MOV	A,P0		; ®äc c¸c cét
        	ANL	A,#00000111B	; che c¸c bÝt ko dïng
        	CJNE	A,#00000111B,HANG0	; x¸c nhËn hµng 0 cã phÝm nhÊn
        	MOV	P0,#11101111B	; tiÕp ®Êt hµng 0
        	MOV	A,P0		; ®äc c¸c cét
        	ANL	A,#00000111B	; che c¸c bÝt ko dïng
        	CJNE	A,#00000111B,HANG1	; x¸c nhËn hµng 1 cã phÝm nhÊn
        	LJMP	K2
        HANG0:	
        	MOV 	DPTR,#KCODE0	; ®Æt gi¸ trÞ khëi ®éng tõ hµng 0
        	SJMP	FIND		; t×m cét cã phÝm nhÊn
        HANG1:	
        	MOV 	DPTR,#KCODE1	; ®Æt gi¸ trÞ khëi ®éng tõ hµng 1
        FIND:	
        	RRC	A		; kiÓm tra cê CY cã ë møc thÊp kh«ng
        	JNC	MATCH		; nÕu b»ng 0, lÊy m· ASCII
        	INC	DPTR		; nÕu kh«ng trá ®Õn cét tiÕp theo
        	SJMP	FIND		; tiÕp tôc t×m
        MATCH:	CLR	A		; xo¸ thanh ghi A
        	MOVC	A,@A+DPTR	; x¸c ®Þnh m· ASCII tõ b¶ng vµ göi vµo thanh ghi A
        	MOV 	R5,A
        	LJMP	SOSANH
        	ret
        ;Ch­¬ng tr×nh con kiÓm tra bµn phÝm cã ®­îc nhÊn kh«ng
        TEST:
        	MOV	P0,#0FFH
        	CLR	P0.3
        	CLR	P0.4
        	MOV	A,P0
        	ANL	A,#00011111B
        	CJNE	A,#00000111B,KT
        	SJMP	EXIT
        KT:	LJMP	OVER1
        	RET
        ; Ch­¬ng tr×nh con tho¸t 
        EXIT:
        	RET
        ;
        
        Delay_1s:
           	mov    r0,#2
        loop4:
           	mov    r1,#250
        loop5:
           	nop
           	nop
           	nop
           	nop
           	nop
         	nop
           	nop
           	nop
           	djnz   r1,loop5
           	djnz   r0,loop4
        ret
        ;Ch­¬ng tr×nh con t¹o trÔ 20ms
        DELAY20:
        	MOV 	R4,#9
        HERE:	DJNZ	R4,HERE
        	RET
        ;
        ;Chuong trinh hien thi
        
        HIENTHI:
                ACALL	DELAY_50MS
        	MOV 	P3,#0FFH
        	MOV	P3,#00H
        	MOV	P3,#0FFH
        LAP:
        	ACALL	DELAY_50MS
        	MOV     A,#38H        ;init. LCD 2 do`ng, ma tra^.n 5x7 
               	ACALL   CSTROBE 
              	ACALL	DELAY_50MS
        	MOV     A,#0EH        ;LCD on, cursor on
           	ACALL   CSTROBE
        	ACALL	DELAY_50MS
           	MOV     A,#01H        ;clear LCD
                ACALL   CSTROBE
        	ACALL	DELAY_50MS
               	MOV	A,#82H
                ACALL   CSTROBE
        	ACALL	DELAY_50MS
                MOV     DPTR,#MYDATA0    ;Dua con tro du lieu toi bang
        DONG1:  CLR     A
                MOVC    A,@A+DPTR
                JZ      XUONGDONG    ;Neu A=0 thi thi xuong dong tiep theo
                ACALL   DSTROBE
                ACALL	Delay_1s
                INC     DPTR
        XUONGDONG:  
                MOV     A,#0C0H      ;Chuyen con tro den dong 2 cot 1
                ACALL   CSTROBE     ;Gui lenh den LCD
                INC     DPTR        ;Tang con tro du lieu
        DONG2:  CLR     A           ;xoa A
                MOVC    A,@A+DPTR
                ACALL   DSTROBE
        	ACALL	Delay_1s
                INC     DPTR	
        CSTROBE:                      ;command strobe
                ACALL   READY         ;is LCD ready?
                MOV     P1,A          ;xua^'t ma~ le^.nh
                CLR     P3.0            ;RS=0: le^.nh
                CLR     P3.1            ;R/W=0 -> ghi ra LCD
                SETB    P3.2             ;E=1 -> ta.o ca.nh xuo^'ng
         
                CLR     P3.2             ;E=0 ,cho^'t
                RET
        DSTROBE:                      ;data strobe
                ACALL   READY         ;is LCD ready?
                MOV     P1,A          ;xua^'t du+~ lie^.u  
                SETB    P3.0            ;RS=1 for data
                CLR     P3.1            ;R/W=0 to write to LCD
                SETB    P3.2             ;E=1 -> ta.o ca.nh xuo^'ng
             
        	CLR     P3.2             ;E=0, cho^'t 
                RET
        ; kie^?m tra co+` BF
        READY:  SETB    P1.7          ;P1.7: input
                CLR     P3.0            ;RS=0: thanh ghi le^.nh
                SETB    P3.1            ;R/W=1: ddo.c
        BACK:   CLR     P3.2             ;E=0 -> ta.o ca.nh le^n
                SETB    P3.2             ;E=1  
                JB      P1.7,BACK     ;cho+` busy flag=0
                RET
        
        Delay_50ms:
           	mov    r0,#1
        loop:
           	mov    r1,#1
        loop1:
        	nop
             	djnz   r1,loop1
           	djnz   r0,loop
        ret
        
        Delay_1s:
           	mov    r0,#250
        loop4:
           	mov    r1,#250
        loop5:
           	nop
           	nop
           	nop
           	nop
           	nop
         	nop
           	nop
           	nop
           	djnz   r1,loop5
           	djnz   r0,loop4
        ret
        ;---------------------------------------------------------------------------------------
        ;B¶ng m· ASCII tham chiÕu quÐt bµn phÝm b¾t ®Çu tõ ®Þa chØ 300H
        ORG	300H
        	KCODE0:	 DB	'0','1','2'
        	KCODE1:	 DB	'3','4','5'
        	MYDATA0: DB  	'QUAY THUAN'
        	MYDATA1: DB  	'QUAY NGUOC'
        	MYDATA2: DB  	'TANG TOC'
        	MYDATA3: DB  	'GIAM TOC'
        	MYDATA4: DB  	'STOP'
        	MYDATA5: DB  	'NOCOMAND'
        END

        Comment


        • #5
          Hì, mình làm BTL thôi , mình bắt buộc phải làm về 89C51 , mà yêu cầu của bài là điều khiển động cơ 1 chiều mà bạn ? Dù sao cũng cám ơn bạn nhiều ^^

          Comment


          • #6
            Sao ko có ai giúp mình vậy ?

            Comment


            • #7
              mình cung dang lam đồ án liên quan đến cái này: làm KIT điểu khiển động cơ (cho robot sumo, làm lại KIT khác, chỉ dùng lại cái xác+ động cơ DC); động cơ DC nhưng nó lùi & tiến được mà; tức là quay đc 2 chiều ....?????
              robot nó như thế này : http://www.tabrobotkit.com/

              Comment


              • #8
                các bác oi..có ai có tài liệu liên quan tới điều khiển động cơ dc dùng vi điều khiển không?cho em xin voi...em muốn điều khiển động cơ dc quay thuận nghịch với hai tốc độ nhanh chậm,co hồi tiếp hiển thị trên led 7 đoạn..em mới vào nghề...còn gà lắm...mong các bác chỉ giáo.thank các bác nhiu nhiu..

                Comment


                • #9
                  minh da lam ve cai nay rui.neu can thi minh gui cho so do nguyen ly va code.chay rat ngon boi vi minh o biet up anh len day

                  Comment


                  • #10
                    ah lien lac theo mail la thangdtr@yahoo.com

                    Comment


                    • #11
                      ah quen minh viet theo c o biet ban can khong nhi

                      Comment


                      • #12
                        anh thang có thể gửi cho em dc ko ạ
                        mail em : thanchau_91@yahoo.com

                        Comment


                        • #13
                          Bác NANO PRO ơi! Bác có thể cho em xin bài lập trình bằng AVR được không? em đang cần để TN.
                          Nếu bác có gửi mail: mrviet2801@gmail.com
                          TKS bác trước!

                          Comment

                          Về tác giả

                          Collapse

                          hgfhfghgf Tìm hiểu thêm về hgfhfghgf

                          Bài viết mới nhất

                          Collapse

                          Đang tải...
                          X