用51单片机写了一个可以制定脉冲输出数量的程序,调试了很久,求大侠指点...跪谢...
时间:10-02
整理:3721RD
点击:
这个程序是让单片机输出一定数量的脉冲,按下一次按键就去一组数来执行,数组中每两个数执行的时候中间间断一下,直至本数组执行完毕,等待下一次按键再执行第二个数。
在protuse里仿真的时候,第一组数执行正常,到第二组就不能执行了。反反复复调试了好多天,要疯了~~求大神指点啊~~~~
#include<reg52.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit key = P1^3;
int n1 = 0;
int n0 = 1;
int t = 0;
int i;
int i1;
int pulse;
int task[5];
int task0[5]={10,16,20,25};
int task1[5]={30};
int task2[5]={40};
int task3[5]={45,35,10};
int arraydata(n1)
{
switch(n1)
{
case 0 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task0[i1];
}break;
case 1 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task1[i1];
}break;
case 2 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task2[i1];
}break;
case 3 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task3[i1];
}break;
default :
{
n1 = 1;
for(i1=0;i1<=4;i1++)
{
task[i1]=task0[i1];
}
}
}
}
void init_Timer0(void)
{
TMOD = 0X01;
TH0 = 0x00;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
main()
{
while(1)
{
if(key == 0)
{
int i=0;
arraydata(n1);
init_Timer0();
while(!key);
n1++;
}
}
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0 = 0x00;
TL0 = 0x00;
P1_0 = ~P1_0;
if(task==0)
{
TR0 = 0;
P1_2 = ~P1_2;
}
else
{
pulse = task;
n0++;
if(n0 == pulse)
{
i++;
n0 = 1;
TR0 = 0;
P1_1 = ~P1_1;
TR0 = 1;
}
}
}
在protuse里仿真的时候,第一组数执行正常,到第二组就不能执行了。反反复复调试了好多天,要疯了~~求大神指点啊~~~~
#include<reg52.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit key = P1^3;
int n1 = 0;
int n0 = 1;
int t = 0;
int i;
int i1;
int pulse;
int task[5];
int task0[5]={10,16,20,25};
int task1[5]={30};
int task2[5]={40};
int task3[5]={45,35,10};
int arraydata(n1)
{
switch(n1)
{
case 0 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task0[i1];
}break;
case 1 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task1[i1];
}break;
case 2 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task2[i1];
}break;
case 3 :
for(i1=0;i1<=4;i1++)
{
task[i1]=task3[i1];
}break;
default :
{
n1 = 1;
for(i1=0;i1<=4;i1++)
{
task[i1]=task0[i1];
}
}
}
}
void init_Timer0(void)
{
TMOD = 0X01;
TH0 = 0x00;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
main()
{
while(1)
{
if(key == 0)
{
int i=0;
arraydata(n1);
init_Timer0();
while(!key);
n1++;
}
}
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0 = 0x00;
TL0 = 0x00;
P1_0 = ~P1_0;
if(task==0)
{
TR0 = 0;
P1_2 = ~P1_2;
}
else
{
pulse = task;
n0++;
if(n0 == pulse)
{
i++;
n0 = 1;
TR0 = 0;
P1_1 = ~P1_1;
TR0 = 1;
}
}
}
Protuse 中仿真...跪谢,跪谢,跪谢...