background image

10.

      P1MDOUT |=0x3C;      

//P1.2-P1.5

 

推挽输出

  

 

11.

      P1 &= 0xc3;     

//P1.2-P1.5=0 

  

 

12.

  

 

3、定时器 0 初始化,定时时间为 1ms

 

1.

 

void

 Timer0_Init (

void

)   

 

2.

{   

 

3.

        CKCON|=0x8;   

 

4.

        TMOD|=0x1;                     

//16

 

  

 

5.

         Count1ms=10;   

 

6.

        TR0 = 0;                         

//停止定时器 0 

  

 

7.

        TH0 = (-SYSCLK/1000) >> 8;       

//设初值,1ms

 

时溢出

  

 

8.

        TL0 = -SYSCLK/1000;   

 

9.

        TR0 = 1;                      

//开启定时器 0 

  

 

10.

        IE|= 0x2;    

 

11.

}   

 

4、Timer0 中断:

 

1.

void

 Timer0_ISR (

void

) interrupt 1               

 

2.

{   

 

3.

    TH0 = (-SYSCLK/1000) >> 8;     

 

4.

    TL0 = -SYSCLK/1000;   

 

5.

    

if

 (Count1ms)   

 

6.

    {   

 

7.

        Count1ms--;   

 

8.

    }   

 

9.

    

if

 (Count1s)    

 

10.

    {   

 

11.

        Count1s--;                  

//Count1s 初值为 1000 

  

 

12.

    }   

 

13.

    

else

  

 

14.

    {   

 

15.

        Count1s=1000;   

 

16.

        SaveMotorCount=MotorCount;          

//MotorCount 为测得每秒脉冲个数

 

  

 

17.

        MotorCount=0;   

 

18.

        SD=SaveMotorCount/2-SetSpeed;    

//常量 SetSpeed 的值为转速的预设值,

单位为转/  

  

 

19.

        SaveMotorCount*=30; 

//转/

 

  

 

20.

        

if

 (SD)