PWM_motor.c
上传用户:bamton
上传日期:2015-03-08
资源大小:1k
文件大小:1k
源码类别:

Telnet客户端

开发平台:

Visual C++

  1.   /*用PWM控制电机脉冲频率应控制在25HZ~35HZ之间*/
  2.   /*定时1ms,1个周期30ms,脉冲频率为33HZ    */
  3. #include   <reg52.h>
  4.   sbit   INT_1=P1^0;
  5.   sbit   INT_2=P1^1;
  6.   sbit   INT_3=P1^2;
  7.   sbit   INT_4=P1^3;
  8.   sbit   EN1=P1^4;
  9.   unsigned char    time=0;
  10.   unsigned char    period=30;
  11.   unsigned char    high=10;
  12.   unsigned char    th0=0;
  13.   unsigned char    tl0=1;
  14.   bit    dir;
  15. void dealy(unsigned char num)
  16. {
  17. unsigned char i;
  18. for(i=0;i<100*num;i++);
  19. }
  20. void   timer0()   interrupt   1   using   1
  21. {
  22.           TH0=0xfc;     /*定时器初值重装载64536*/
  23.           TL0=0x18;
  24.           time++;
  25.           if(dir==1)
  26. {
  27. if(time==high)
  28. {
  29. INT_1=1;
  30. INT_2=0;
  31. }
  32. else if(time==period)
  33. {
  34. time=1;
  35. INT_1=1;
  36. INT_2=0;
  37. }
  38.     }
  39. else
  40. {
  41. if(time==high)
  42. {
  43. INT_1=0;
  44. INT_2=1;
  45. }
  46. else if(time==period)
  47. {
  48. time=0;
  49. INT_1=0;
  50. INT_2=1;
  51.            }
  52.        }
  53. }
  54. void   main()
  55. {
  56. P0=0x00;
  57. P2=0x00;
  58. TMOD=0x01;   /*定时器0方式1*/
  59. TH0=0xfc;     /*定时器装载初值,设置脉冲信号的占空比为1/5*/
  60. TL0=0x18;
  61. ET0=1;   /*开定时器0中断*/
  62. TR0=1;    /*启动定时器0*/
  63.         EA=1;     //开CPU中断
  64.         dir=1;
  65. while(1)
  66. {
  67. ;
  68. }
  69. }