找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4294|回复: 0
收起左侧

我是新手,用P0.0产生周期0.1ms脉冲,作为计数器T1输入,定时器T0定时1ms,在定时器中断中判断技术脉冲个数,进而驱动电机正反转,问题是拷进代码后蜂鸣器

[复制链接]
ID:41459 发表于 2012-6-7 15:09 | 显示全部楼层 |阅读模式
这是程序代码

#include<reg52.h>
#include <intrins.h>
 
sbit wave=P0^0;
unsigned char Flag;//定义正反转和停止标志位
//sbit KEY = P3^3;


unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正转表格
unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反转表格

 void Delay(unsigned int i)//延时
{
 while(--i);
}

 

void T0ISR(void) interrupt 1
{
 unsigned char i;
 unsigned char a;
 a=TL1;
 while(a>3&& a<11)
 {
     for(i=0;i<4;i++)      //4相
      {
      P2=F_Rotation;  //输出对应的相 可以自行换成反转表格
      Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
   }
   }
  while(a<3||a>11)
   {
  
    for(i=0;i<4;i++)      //4相
      {
      P2=B_Rotation;  //输出对应的相 
      Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
   }
   }
   a=0;
   TL1=0;
  TL0=0x18;
     TH0=0x1c;


}

 void delay1()
{
unsigned char a,b,c;

for(a=0;a<1;a++)
   for(b=0;b<1;b++)
     for(c=0;c<61;c++);
}

void main()
{

TMOD=0x40;
TL0=0x18;
TH0=0x1c;
TR0=1;
TR1=1;
ET0=1;
EX1=1;         //外部中断0开
IT1=1;         //边沿触发
EA=1;


 while(1)
   {
     wave=0;
  delay1();
  wave=1;
 
 }   
 }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表