[51单片机] 求助:AT89C2051单片机的P1.0口怎么不能输出高电平

[复制链接]
4969|6
 楼主| neutanmin 发表于 2015-8-27 22:46 | 显示全部楼层 |阅读模式
本人刚开始做一个无刷电机控制器,要求如下:当BH(P3.7)输入为低时,电机停止转动,P1.0口输出高电平,并持续4s。现在的问题是P3.7输入0时,电机能停止,并持续一定时间,只是P1.0怎么也不能输出高电平,谢谢各位高手指导。
控制器原理图:
C:\Users\Administrator\Desktop\新建文件夹\新建文件夹\无刷电机控制原理
程序代码:
  1. ;2.24设计,
  2. S2            BIT  P1.2
  3. S6            BIT  P1.3
  4. S4            BIT  P1.4
  5. S5            BIT  P1.5
  6. S3            BIT  P1.6
  7. S1            BIT  P1.7
  8. BH            BIT  P3.7
  9. WDG           BIT  P1.1
  10. CMP           BIT  P1.0
  11. FOR           BIT  P3.1
  12. BACK          BIT  P3.0
  13. PWM           BIT  08H
  14. FLAG          BIT  09H             ;0-FACT SPEED;1-GIV SPEED
  15. FLAG0         BIT  0AH             ;0-启动定时器,1-获取给定值
  16. FLAG1         BIT  0BH             ;0-启动定时器,1-获取实际转速
  17. OPEN_FLAG     BIT  0CH  
  18. INT1_FLAG     BIT  0DH
  19.          
  20. H_TIME        EQU  31H
  21. L_TIME        EQU  32H
  22. SWITCH_TEMP   EQU  33H
  23. GIVEN_H       EQU  34H             ;给定转速
  24. GIVEN_L       EQU  35H
  25. SPEED_H       EQU  36H             ;电机实际转速
  26. SPEED_L       EQU  37H
  27. INTT0         EQU  38H
  28. INTT1         EQU  39H

  29. ORG  0000H                         ;BEGINE OF CODE
  30.       AJMP   MAIN                  ;JUMP TO MAIN PROGRAM
  31. ORG  0003H                         ;INT0 INTERRUPT
  32.       AJMP   INT0_INT
  33. ORG  000BH                         ;T0 INTERRUPT
  34.       AJMP   T0_INT
  35. ORG  0013H                         ;INT1 INTERRUPT
  36.       AJMP   INT1_INT
  37. ORG  001BH                         ;T1 INTERRUPT
  38.       AJMP   T1_INT
  39. ;_____________________________________________________________________

  40. ORG   0100H
  41. MAIN:
  42.       MOV    P3,#11111111B              ;INITIALIZATION
  43.       MOV    P1,#11111101B              ;TO CLOSE DRIVE SIGNAL
  44.       MOV    SP,#60H                    ;SET STACK POINTER
  45.       CLR    OPEN_FLAG
  46.       MOV    H_TIME,#206                ;PWM=60%,此初值可以设定,保证电机正确启动。
  47.       MOV    L_TIME,#56
  48.       MOV    TH1,#206
  49.       MOV    TL1,#56
  50.       MOV    TMOD,#00100001B            ;T1 DEFINE TIMER1 8 BIT AUTO RELOAD MODE
  51.       CLR    FLAG
  52.       CLR    FLAG0                       ;AND T0 16 BIT TIMER
  53.       SETB   EA                         ;TO PERMIT CHIEF INTERRUPT
  54.       SETB   ET1
  55.       SETB   TR1
  56.       SETB   IT0                        ;INT0 AND INT1 UP-DOWN CREATE
  57.       SETB   IT1
  58.       SETB   EX0                        ;TO PERMIT INT0 AND INT1
  59.       SETB   EX1

  60. ;_____________________________________
  61. POWJUDGE:
  62.       CPL    WDG
  63.       JB     CMP,POWJUDGE               ;0 POW>GIV,1 POW<GIV
  64.       JNB    FOR, FORWARDRUN            
  65.       JNB    BACK,BACKWARDRUN         
  66.       SJMP   POWJUDGE
  67. ;______________________________________________________________________________________
  68. FORWARDRUN:      
  69.       MOV    P3,#11111111B
  70.       JNB    BH,STOP                    ;TO CHECK BH SIGNAL
  71.       LCALL  JUDGE
  72.       MOV    A,H_TIME
  73.       CJNE   A,#240,FORLOOP1
  74.       SETB   OPEN_FLAG     
  75.       LCALL  FORFULL               
  76.       SJMP   POWJUDGE
  77.   FORLOOP1:
  78.       CLR    OPEN_FLAG   
  79.       LCALL  FORWARD
  80.       SJMP   POWJUDGE
  81. ;______________________________________________________________      
  82. STOP:
  83.       CLR    EA
  84.       SETB   P1.0
  85.       LCALL  DELAY
  86.       CLR    P1.0
  87.       SJMP   STOP
  88. ;______________________________________________________________________  
  89. BACKWARDRUN:   
  90.       MOV    P3,#11111111B
  91.       JNB    BH,STOP                    ;TO CHECK BH SIGNAL  
  92.       LCALL  JUDGE
  93.       MOV    A,H_TIME
  94.       CJNE   A,#240,BACKLOOP1
  95.       SETB   OPEN_FLAG      
  96.       LCALL  BACKFULL               
  97.       SJMP   POWJUDGE
  98.   BACKLOOP1:
  99.       CLR    OPEN_FLAG   
  100.       LCALL  BACKWORD
  101.       SJMP   POWJUDGE
  102. ;_____________________________________________________________   
  103. INT0_INT:                        
  104.       PUSH   PSW   
  105.       PUSH   ACC        
  106.       JB     FLAG,END_INT0         ;FLAG0=0,获取给定转速,FLAG=1跳出中断。     
  107.       JNB    FLAG0,GET_GIV         ;FLAG1=0,跳转至启动定时器,FLAG1=1,停止计数,获取给定   
  108.       CLR    TR0
  109.       MOV    GIVEN_H,TH0      
  110.       MOV    GIVEN_L,TL0
  111.    LOOP2:   
  112.       CPL    FLAG      
  113.       SJMP   ENDINT0
  114.    GET_GIV:
  115.       MOV    TH0,#0
  116.       MOV    TL0,#0
  117.       SETB   TR0      
  118.    ENDINT0:
  119.       CPL    FLAG0   
  120.    END_INT0:
  121.       POP    ACC
  122.       POP    PSW
  123.       RETI
  124. ;____________________________________________________________________________________
  125. INT1_INT:                          
  126.       PUSH   PSW
  127.       PUSH   ACC     
  128.       JNB    FLAG,END_INT1      
  129.       JNB    FLAG1,GET_FACT
  130.       CLR    TR0
  131.       MOV    SPEED_H,TH0     
  132.       MOV    SPEED_L,TL0      
  133.       CPL    FLAG      
  134.       SETB   INT1_FLAG     
  135.       SJMP   ENDINT1
  136.    GET_FACT:
  137.       MOV    TH0,#0
  138.       MOV    TL0,#0
  139.       SETB   TR0
  140.       NOP
  141.    ENDINT1:
  142.       CPL    FLAG1
  143.    END_INT1:
  144.       POP    ACC
  145.       POP    PSW
  146.       RETI
  147. ;___________________________________________________________________________________
  148. T0_INT:   
  149.       
  150.       RETI
  151. ;_________________________________________________________________________
  152. T1_INT:
  153.       CPL    PWM                         ;GENERATE PWM
  154.       JB     OPEN_FLAG,END_T1
  155.       JB     PWM,PWM_H                   ;PWM=1,OUTPUT SWITCH_TEMP
  156.       MOV    P1,#0FFH
  157.       MOV    TH1,L_TIME
  158.       SJMP   END_T1
  159.    PWM_H:               
  160.       MOV    P1,SWITCH_TEMP              
  161.       MOV    TH1,H_TIME
  162.    END_T1:   
  163.       RETI
  164. ;________________________________________________________________
  165. FORWARD:
  166.    FORWARD_101:
  167.       MOV     A,P3
  168.       ANL     A,#00111000B
  169.       CJNE    A,#00101000B,FORWARD_100
  170.       MOV     SWITCH_TEMP,#01110111B
  171.       SJMP    FORWARDHALL_END
  172.    FORWARD_100:
  173.       CJNE    A,#00001000B,FORWARD_110
  174.       MOV     SWITCH_TEMP,#01111011B
  175.       SJMP    FORWARDHALL_END
  176.    FORWARD_110:
  177.       CJNE    A,#00011000B,FORWARD_010
  178.       MOV     SWITCH_TEMP,#10111011B
  179.       SJMP    FORWARDHALL_END
  180.    FORWARD_010:
  181.       CJNE    A,#00010000B,FORWARD_011
  182.       MOV     SWITCH_TEMP,#10101111B
  183.       SJMP    FORWARDHALL_END
  184.    FORWARD_011:
  185.       CJNE    A,#00110000B,FORWARD_001
  186.       MOV     SWITCH_TEMP,#11001111B
  187.       SJMP    FORWARDHALL_END
  188.    FORWARD_001:
  189.       MOV     SWITCH_TEMP,#11010111B
  190.    FORWARDHALL_END:
  191.       RET
  192. ;_______________________________________________
  193. FORFULL:
  194.    FORFULL_101:
  195.       MOV     A,P3
  196.       ANL     A,#00111000B
  197.       CJNE    A,#00101000B,FORFULL_100
  198.       MOV     P1,#01110111B
  199.       SJMP    FORFULLHALL_END
  200.    FORFULL_100:
  201.       CJNE    A,#00001000B,FORFULL_110
  202.       MOV     P1,#01111011B
  203.       SJMP    FORFULLHALL_END
  204.    FORFULL_110:
  205.       CJNE    A,#00011000B,FORFULL_010
  206.       MOV     P1,#10111011B
  207.       SJMP    FORFULLHALL_END
  208.    FORFULL_010:
  209.       CJNE    A,#00010000B,FORFULL_011
  210.       MOV     P1,#10101111B
  211.       SJMP    FORFULLHALL_END
  212.    FORFULL_011:
  213.       CJNE    A,#00110000B,FORFULL_001
  214.       MOV     P1,#11001111B
  215.       SJMP    FORFULLHALL_END
  216.    FORFULL_001:
  217.       MOV     P1,#11010111B
  218.    FORFULLHALL_END:
  219.       RET
  220. ;________________________________________________
  221. BACKWORD:
  222.    BWHETHER_101:
  223.       MOV     A,P3
  224.       ANL     A,#00111000B
  225.       CJNE    A,#00101000B,BWHETHER_100
  226.       MOV     SWITCH_TEMP,#10101111B
  227.       SJMP    BHALL_END
  228.    BWHETHER_100:
  229.       CJNE    A,#00001000B,BWHETHER_110
  230.       MOV     SWITCH_TEMP,#11001111B
  231.       SJMP    BHALL_END
  232.    BWHETHER_110:
  233.       CJNE    A,#00011000B,BWHETHER_010
  234.       MOV     SWITCH_TEMP,#11010111B
  235.       SJMP    BHALL_END
  236.    BWHETHER_010:
  237.       CJNE    A,#00010000B,BWHETHER_011
  238.       MOV     SWITCH_TEMP,#01110111B
  239.       SJMP    BHALL_END
  240.    BWHETHER_011:
  241.       CJNE    A,#00110000B,BWHETHER_001
  242.       MOV     SWITCH_TEMP,#01111011B
  243.       SJMP    BHALL_END
  244.    BWHETHER_001:
  245.       MOV     SWITCH_TEMP,#10111011B
  246. BHALL_END:
  247.       RET
  248. ;_______________________________________________
  249. BACKFULL:
  250.    BACKFULL_101:
  251.       MOV      A,P3
  252.       ANL     A,#00111000B
  253.       CJNE    A,#00101000B,BACKFULL_100
  254.       MOV     P1,#10101111B
  255.       SJMP    BACKFULLHALL_END
  256.   BACKFULL_100:
  257.       CJNE    A,#00001000B,BACKFULL_110
  258.       MOV     P1,#11001111B
  259.       SJMP    BACKFULLHALL_END
  260.    BACKFULL_110:
  261.       CJNE    A,#00011000B,BACKFULL_010
  262.       MOV     P1,#11010111B
  263.       SJMP    BACKFULLHALL_END
  264.    BACKFULL_010:
  265.       CJNE    A,#00010000B,BACKFULL_011
  266.       MOV     P1,#01110111B
  267.       SJMP    BACKFULLHALL_END
  268.    BACKFULL_011:
  269.       CJNE    A,#00110000B,BACKFULL_001
  270.       MOV     P1,#01111011B
  271.       SJMP    BACKFULLHALL_END
  272.    BACKFULL_001:
  273.       MOV     P1,#10111011B
  274.    BACKFULLHALL_END:
  275.       RET
  276. ;________________________________________
  277. JUDGE:
  278.       JNB    INT1_FLAG,END_JUDGE
  279.       CLR    INT1_FLAG
  280.       MOV    A,SPEED_H              
  281.       CJNE   A,GIVEN_H,JUDGE0
  282.       SJMP   RE_JUDGE               
  283.    RE_JUDGE:      
  284.       MOV    A,SPEED_L              ;A>GIVEN_L,C=0,A<GIVEN,C=1
  285.       CJNE   A,GIVEN_L,JUDGE0
  286.       SJMP   END_JUDGE
  287.    JUDGE0:                        
  288.       JC     DOWNSPEED                ;C=1,跳转
  289.       SJMP   UPSPEED
  290.    DOWNSPEED:
  291.       MOV    A,L_TIME
  292.       CJNE   A,#240,DEC_SPEED        ;此处设定占空比的最小值,可以通过实验获取
  293.       SJMP   END_JUDGE
  294.    UPSPEED:
  295.       MOV    A,H_TIME
  296.       CJNE   A,#240,INC_SPEED        ;此处设定占空比的最大值
  297.       SJMP   END_JUDGE   
  298.    INC_SPEED:
  299.       INC    H_TIME
  300.       DEC    L_TIME
  301.       SJMP   END_JUDGE
  302.    DEC_SPEED:
  303.       DEC    H_TIME
  304.       INC    L_TIME
  305.    END_JUDGE:   
  306.       RET
  307. ;__________________________________________________________________
  308. DELAY:
  309.       MOV   R7,#40
  310.    DEL1:
  311.       MOV   R6,#0FFH
  312.    DEL2:
  313.       MOV   R5,#80H
  314.    KONG:
  315.       NOP
  316.       DJNZ  R5,$
  317.       DJNZ  R6,DEL2
  318.       DJNZ  R7,DEL1
  319.       RET
  320. ;_____________________________________________________________________
  321.       END
  322.       
  323.   
 楼主| neutanmin 发表于 2015-8-27 22:48 | 显示全部楼层
原理图没有上传,现补上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xuyaqi 发表于 2015-8-28 06:35 | 显示全部楼层
是不是没有上拉的缘故
 楼主| neutanmin 发表于 2015-8-28 08:15 | 显示全部楼层
xuyaqi 发表于 2015-8-28 06:35
是不是没有上拉的缘故

非常感谢你的回答,我分别试了1K和10K、+5V上拉,都没有输出高电平。
ayb_ice 发表于 2015-8-28 08:28 | 显示全部楼层
都不看手册的吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ningling_21 发表于 2015-8-28 08:30 | 显示全部楼层
本帖最后由 ningling_21 于 2015-8-28 08:31 编辑
neutanmin 发表于 2015-8-27 22:48
原理图没有上传,现补上

P1.0,P1.1 这2个脚的驱动能力很弱,最好换成其它的管脚
侣行天下 发表于 2015-8-28 08:41 | 显示全部楼层
neutanmin 发表于 2015-8-27 22:48
原理图没有上传,现补上

外部没有接上拉电阻吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部