电机转速信号的单片机测量程序

来源:互联网 发布:vb数值类型 编辑:程序博客网 时间:2024/04/24 23:18

 

Code:
  1. #include <reg52.h>  
  2. #include <absacc.h>  
  3. #include <stdio.h>  
  4. #define uchar unsigned char  
  5. #define uint unsigned int  
  6. // 定义8253的寄存器地址  
  7. #define     COM XBYTE[0x6000]   // 定义8253的控制字寄存器地址  
  8. #define     C0 XBYTE[0x0000]    // 定义8253的计数器0寄存器地址  
  9. #define     C0I XBYTE[0x1000]  
  10. sbit P1_7=P1^7;  
  11. uint BUF810;  
  12. uchar h,l,a,b,c,sendflag,FREQ;  
  13.   
  14. //主函数,初始化定时器和片外寄存器  
  15. void main(void)  
  16. {  
  17.     EA=1; PT0=1;  
  18.     ET0=1;  
  19.     IT0=1;IT1=1;  
  20.     EX0=1;EX1=1;ET2=1;  
  21.     T2CON=0x08;  
  22.     TMOD=0x21;  //用定时器0产生2s的中断信号,为8253计数提供门控。  
  23.     TH0=-1000/256;    
  24.     TL0=-1000%256;  
  25.       
  26.       
  27. // 向8253R中的控制字寄存器中选择计数器0,并对其幅初值0;  
  28. COM=0x30;  
  29.     C0=0;C0=0;  
  30. TR0=1;  
  31.     sendflag=1;  
  32.     while(1){}  
  33. }  
  34.   
  35. /* 定时计数器0的中断服务子程序 */  
  36. void timer0(void)  interrupt 1 using 1  
  37. {  
  38. TH0=-1000/256;                          // 定时器T0的高四位赋值  
  39. TL0=-1000%256;  
  40. FREQ=FREQ+1;                        // 定时器T0的低四位赋值  
  41. if (FREQ==1000)                     // 1秒判断  
  42.     {  
  43. FREQ=0;  
  44. P1_7=!P1_7;                     // 信号输出端口取反  
  45. COM=0x00;                       //计数器0闩锁操作  
  46. l=C0;                           //分别读取高、低8位的数据  
  47. h=C0;  
  48. BUF810=-(h*256+l);  
  49. COM=0x30;  
  50. C0=0;C0I=0;  
  51.     }  
  52. }   

 

原创粉丝点击