首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

。C51单片机用L298驱动42步进电机

2013-09-06 
求助。C51单片机用L298驱动42步进电机我想把程序中的Delay_N_ms(10),换成用定时器延时0.5ms。要怎么改。求大

求助。C51单片机用L298驱动42步进电机
我想把程序中的Delay_N_ms(10),换成用定时器延时0.5ms。要怎么改。求大神赐教。。在线等

#include<reg52.h>
typedef  unsigned char   uint8;
typedef  unsigned int    uint16;
 sbit IN1=P0^0;
 sbit IN2=P0^1;
 sbit IN3=P0^2;
 sbit IN4=P0^3;
 sbit ENA=P3^0;
 sbit ENB=P3^1;
unsigned char C[5]={0x01,0x04,0x02,0x08,0x00};

uint8 i = 0;
uint8 j = 0;
uint8 zf = 0;
uint16 counter;
void Delay_N_ms(uint16 N)
{
uint8 cnt = 110;
while(N--)
{
for(cnt = 110;cnt > 0; cnt--);
}
}



void main (void)               

{  
TMOD = 0x11;
TH0  = 0xFE;
TL0  = 0x34;
//TH1 = 0xFC;
//TL1  = 0x67;
TR0  = 1;
TR1  = 1;
ET0  = 1;
ET1  = 1;
EA   = 1;
ENA=0;
    ENB=0;
   



 while(1)
{
if( j > 180 ) j = 4;
if( j > 4 ) j = 0;

P0= C[j];
Delay_N_ms(10);
if(0 == zf)
{
j++;//控制 逆时针
}   
else
{  
j--;  //控制顺时针
}


 
}
 
void time1() interrupt 3
{
TH1  = 0xFC;
TL1  = 0x67;
counter++;
if(counter == 2000)
{
zf = ~zf;
counter = 0;
}
}


[解决办法]
给你个类似的参考程序:

while(1)
{//加入的成对大括号
for(thou=0;thou
#defineuintunsignedint
#defineucharunsignedchar
sbitLED4=P2^0;//数码管千分位
sbitLED3=P2^1;//数码管百分位
sbitLED2=P2^2;//数码管十分位
sbitLED1=P2^3;//数码管个分位
ucharms20,s1;//20毫秒和1s变量定义(声明)


//定时器T0初始化,10ms秒初值
voidInitTimer0(void)
{
TMOD=0x01;
TH0=0x0D8;
TL0=0x0F0;
EA=1;
ET0=1;
TR0=1;
}
voidDisplay(uchardat4,uchardat3,uchardat2,uchardat1)
{
staticuchark;
P2=P2
[解决办法]
0xf0;
switch(k++)
{
case0:
P0=dat4;
LED4=1;
break;
case1:
P0=dat3;
LED3=1;
break;
case2:
P0=dat2;
LED2=1;
break;
case3:
P0=dat1;
LED1=1;
break;
default:k=0;return;
}
}
voidTimer0(void)interrupt1//1ms中断
{
TH0=0x0D8;
TL0=0x0F0;
ms20++;
s1++;
}
voidMain(void)
{
ucharthou,hun,ten,one;
InitTimer0();
while(1)
{
if(s1>=100)//每1秒钟one+1
{
s1=0;
if(one++>=9)
{
one=0;
if(ten++>=5)
{
ten=0;
if(hun++>=9)
{
hun=0;
if(thou++>=5)thou=0
}
}
}
}
if(ms20==2)//每20毫秒调用一次显示函数
{
Display(thou,hun,ten,one);
ms20=0;
}
}
}

热点排行