微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用51单片机写了一个可以制定脉冲输出数量的程序,调试了很久,求大侠指点...跪谢...

用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 中仿真...跪谢,跪谢,跪谢...


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top