单片机控制直流电机

急需51单片机控制直流电机的流程、图 和程序 不要C语言 要 51单片机语言 有的请帮我一下吧 我可不希望被卡在学校不能毕业
可发邮件 [email protected] 谢谢 各位大虾了

第1个回答  2009-08-31

查看文章    

基于51单片机的直流电机调速程序(单片机课程设计所做)2008-10-25 12:44kg       bit   B.1    ;用来判断开机等待

t        bit   B.2    ;用来判断正反转,t=1正转,t=0反转

w        bit   B.3     ;用来辅助正反转判断,选择了就为1,不选则为0

KK1      BIT   B.4    ;用来辅助加速按键,使其不用延时可以按一次速度指甲一档

KK2      BIT   B.5    ;同上

cctv     bit   b.7    ;用来辅助中断显示程序计时

   org 0000h

      lJMP MAIN

      ORG 000BH

      LJMP CTC0

    ORG   0034h

Graphemic: DB   0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,84H,0FFH;共阳0~9字型码                

;PN1    EQU   30H              ;PN1用来记脉冲的低二位数

;PN2    EQU   31H     ;PN2用来记脉冲的高二位数

PN3    EQU   32H      ;PN3用来做延时程序

PN4    EQU   33H       ;PN4用来做延时程序

   ORG 100H

MAIN:   

         MOV R6,#00H    ;用R6来辅助显示计时

   MOV B, #00H

         CLR KG

         CLR W

         MOV TMOD,#01H    ;T1和T0都是方式一计数

         MOV TL0,#18H

         MOV TH0,#0E0H

   ;MOV   TL1, #0AFH

     ; MOV   TH1, #3CH

      SETB EA

      SETB ET0    ;T0中断允许

      SETB TR0

   SETB P3.4

   ; SETB ET1         ;T1中断允许

      ;SETB TR1 

   SETB PT0    ;设置T1T2的中断优先,都设其为高级中断

   ; SETB PT1

   MOV R1,#5H   ;默认开始的时候速度为5档

   SETB KK1

   SETB KK2

   MOV   A,#00H    ;把PN1,PN2都清零 

   ;MOV   PN1,A

     ; MOV   PN2,A

      MOV   DPTR,#Graphemic

   ANL   P1,#0FH

   ;ANL   P0,#00H

mainline:

   jb   p2.2,ks    ;关机等待

    clr   w

       clr   kg

    setb p1.0

    setb p1.1

    clr   p1.2

    clr   p1.3

ks:    jnb   kg,wait   ;是否开机?开了就往下执行,不开就跳到开机等待

    

      ANL   P1,#00011111B ;显示最后一位为1,即是可以工作了的意思

      SETB P1.4

      MOV   A,#1H

      MOVC   A,@A+DPTR

      MOV   P0,A

      SETB P3.6

      NOP

      NOP

      CLR   P3.6

      LCALL DELAY

SPD2:   

   JB   P2.1,KEY1

   CLR KK1

KEY1:    JNB P2.1,KEY2 ;当p2.1高电平时就往下执行,但是只要执行一次后,kk就为1,往后就不再执行       

   JB   KK1, KEY2 

   INC R1

   SETB KK1   ;这段的任务是不用延时也能消除按键抖动的程序

KEY2:    JB   P2.4,KEY3

   CLR KK2

KEY3: JNB P2.4,pos        

      JB   KK2, pos  

   SETB KK2

         DEC R1      

pos:   jb    p2.0,rev   ;正转按钮

       setb t

       setb w

rev:   jb    p2.3,tt   ;反转按钮

       clr   t

    setb w

tt:    jnb   w,pos    ;选择正反转了吗,选了电机就开始转了,不选电机就不转,等待正反转按钮

       jb    t,positive

    jnb   t,reverse

      

positive:     ;电机正转

       setb   p1.0

       clr   p1.1

       clr   p1.2

       setb   p1.3

    lcall BIJIAO0   ;PWM调制

   ; lcall ShowSpeed   ;显示速度程序

    LCALL showdigit1

       Ljmp mainline

reverse:         ;电机反转

       clr   p1.0

       setb p1.1

       setb p1.2

       clr   p1.3

    lcall BIJIAO0   ;PWM调制

   ; lcall ShowSpeed   ;显示速度程序

    LCALL showdigit2

       Ljmp mainline

       

wait: mov   a,#00h ;如果不开始,那么程序就在这里等待,

       mov   p0,a 

wait1: setb p0.6

       setb p0.7

    anl   p1,#0fh

    setb p1.4

    setb p1.5

    setb p1.6

    setb p1.7

    SETB P3.6

    NOP

    CLR   P3.6

    lcall delay

    jb    p2.5,wait1   ;开机等待

    setb kg

       Ljmp mainline

showdigit1:

    ANL   P1,#10001111B ;显示12在首位

    SETB P1.7

    MOV   A,#1H

    MOVC   A,@A+DPTR

    MOV   P0,A

     SETB P3.6

    NOP

    NOP

    CLR   P3.6

    LCALL DELAY

    ANL   P1,#01001111B

    SETB P1.6

    MOV   A,#2H

    MOVC   A,@A+DPTR

    MOV   P0,A

     SETB P3.6

    NOP

    NOP

    CLR   P3.6

    LCALL DELAY

    RET

showdigit2:

       ANL   P1,#10001111B ;显示21在首位

    SETB P1.7

    MOV   A,#2H

    MOVC   A,@A+DPTR

    MOV   P0,A

    SETB P3.6

    NOP

    NOP

    CLR   P3.6

    LCALL DELAY

    ANL   P1,#01001111B

    SETB P1.6

    MOV   A,#1H

    MOVC   A,@A+DPTR

    MOV   P0,A

     SETB P3.6

    NOP

    NOP

    CLR   P3.6

    LCALL DELAY

    RET

BIJIAO0: MOV A,R1        

         SUBB A,#0H         

   JZ   JJ0

BIJIAO1: MOV A,R1

         SUBB A,#1H

   JZ   JJ1

      

BIJIAO2: MOV A,R1

         SUBB A,#2H

   JZ   JJ2

    

BIJIAO3: MOV A,R1

         SUBB A,#3H

   JZ   JJ3

    

BIJIAO4: MOV A,R1

         SUBB A,#4H

   JZ   JJ4

    

BIJIAO5: MOV A,R1

         SUBB A,#5H

   JZ   JJ5

    

BIJIAO6: MOV A,R1

   SUBB A,#6H

   JZ   JJ6

   

BIJIAO7: MOV A,R1

         SUBB A,#7H

   JZ   JJ7

    

BIJIAO8: MOV A,R1

         SUBB A,#8H

   JZ   JJ8

    

BIJIAO9: MOV A,R1

         SUBB A,#9H

   JZ   JJ9

   

BIJIAO10:MOV A,R1

         SUBB A,#0AH

   JZ   JJ10

   MOV A,R1    ;如果R1的值小于零,则速度和pwm0的速度不变。

   SUBB A,#0FFH

         JNZ   PWM100    ;这一小段是限制调速范围只能在0-10之间

   MOV R1,#0H

   AJMP PWM0

PWM100: MOV R1,#0AH   ;如果r1>10则直接给r1赋值10,然后转速和最大速度不变

         LJMP PWM10 

JJ0:     LJMP PWM0   ;由于JZ跳转的距离不够长,所以这里只能用以下几句转跳转来辅助跳转

JJ1:     LJMP PWM1

JJ2: LJMP PWM2

JJ3:     LJMP PWM3

JJ4:     LJMP PWM4

JJ5:     LJMP PWM5

JJ6:     LJMP PWM6

JJ7:     LJMP PWM7

JJ8:     LJMP PWM8

JJ9:     LJMP PWM9

JJ10:    LJMP PWM10

PWM0:    MOV R2,#0FFH

   MOV R3,#0FFH

   MOV R4,#0f8H

   MOV R5,#02fH

   MOV   A,#0H

   LCALL SHOW   

   LJMP MAINLINE1

PWM1:    MOV R2,#0FFH

   MOV R3,#037H

         MOV R4,#0F8H

   MOV R5,#0F7H

    MOV   A,#1H

   LCALL SHOW

   LJMP MAINLINE1

PWM2:    MOV R2,#0FEH

   MOV R3,#06FH

   MOV R4,#0F9H

   MOV R5,#0BFH

      MOV   A,#2H

   LCALL SHOW

   LJMP MAINLINE1

PWM3:    MOV R2,#0FDH

   MOV R3,#0A7H

   MOV R4,#0FAH

   MOV R5,#087H

    MOV   A,#3H

   LCALL SHOW

   LJMP MAINLINE1

PWM4:    MOV R2,#0FCH

   MOV R3,#0DFH

   MOV R4,#0FBH

   MOV R5,#4FH

    MOV   A,#4H

   LCALL SHOW

   LJMP MAINLINE1

PWM5:    MOV R2,#0FCH

   MOV R3,#18H

   MOV R4,#0FCH

   MOV R5,#18H

    MOV   A,#5H

   LCALL SHOW

   LJMP MAINLINE1

PWM6:    MOV R2,#0FBH

   MOV R3,#4FH

   MOV R4,#0FCH

   MOV R5,#0DFH

    MOV   A,#6H

   LCALL SHOW

   LJMP MAINLINE1

PWM7:    MOV R2,#0FAH

   MOV R3,#087H

   MOV R4,#0FDH

   MOV R5,#0A7H

       MOV   A,#7H

   LCALL SHOW

   LJMP MAINLINE1

PWM8:    MOV R2,#0F9H

   MOV R3,#0BFH

   MOV R4,#0FEH

   MOV R5,#6FH

    MOV   A,#8H

   LCALL SHOW

   LJMP MAINLINE1

PWM9:    MOV R2,#0F8H

   MOV R3,#0F7H

   MOV R4,#0FFH

   MOV R5,#37H

    MOV   A,#9H

   LCALL SHOW

   LJMP MAINLINE1

PWM10:   MOV R2,#0f8H

   MOV R3,#02FH

   MOV R4,#0FFH

   MOV R5,#0FFH

   MOV   A,#0AH

   LCALL SHOW

   LJMP MAINLINE1

MAINLINE1: RET

show: ANL   P1,#00101111B;显示速度档次

      SETB P1.5      

      MOVC   A,@A+DPTR

      MOV   P0,A

      SETB P3.6

      NOP

      NOP

      CLR   P3.6

      LCALL DELAY

   RET

DELAY:   MOV PN4,#08H ;40ms延时子程序

L7:      MOV PN3,#0FAH 

L8:      DJNZ PN3,L8 

         DJNZ PN4,L7 

         RET 

;CTCA:    MOV   TL1,   #0AFH   ;定时一秒钟输出速度值一次(定时0.05秒R6自加一)

;        MOV   TH1,   #3CH

;      INC   R6

;      RETI         

CTC0:    

         JNB   P3.4,CTC1           ;这里是定时中断程序,p3.4的高低电平就是在这里控制的

         JB P3.4,CTC2

CTC1:    MOV TL0,R3

         MOV TH0,R2

      CPL P3.4      

         RETI 

CTC2:    MOV TL0,R5

         MOV TH0,R4

   CPL P3.4

   RETI

END

本回答被提问者采纳
第2个回答  2009-08-31
我也要,谁给我邮件我开新帖,给200分,谢谢
说话算数。[email protected]
第3个回答  2009-08-31
OMG
相似回答