找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 851|回复: 2
收起左侧

这个单片机程序逻辑有问题吗?好奇怪

[复制链接]
ID:53813 发表于 2022-12-6 12:11 | 显示全部楼层 |阅读模式
/////上述这个,Flag = 2 的时候,close 只能执行5次,就回到 flag  =1 那里去了
单片机源程序如下:
#include <xc.h>
/* Private define-------------------------------------------------------------*/

#define JDQ_Switch   RD0

unsigned char  Flag;
unsigned int    Open;
unsigned int    Close;




/* Private function prototypes------------------------------------------------*/  

/*
        * @name   GPIO_Init
        * @brief  输入输出端口初始化
        * @param  None
        * @retval None      
*/
static  void GPIO_Init()               
{   

    //RD0-控制三极管
    //TRISDbits.TRISD0 = 0;                // TRISd方向寄存器 ,RA0口设置为 输出;
    //PORTDbits.RD0 = 1;                   // RA5设置为 高电平,关闭光耦

    //TRISDbits.TRISD1 = 0;                // TRISd方向寄存器 ,RA1口设置为 输出;
   // PORTDbits.RD1 = 0;                   // RA5设置为 低电平,打开光耦

    TRISD = 0x00;                // TRISD方向寄存器 ,RC5口设置为 输出;
    PORTD = 0x00;                // RD0~RD7 设置为 高电平,关闭LED

}
/*
        * @name   Delay_ms
        * @brief  1毫秒延时函数
        * @param  ms -> 对应需要延时的时间
        * @retval None      
*/
static void Delay_10ms(unsigned int ms)
{
        unsigned int i,j;
        for(i=0;i<ms;i++)
                for(j=0;j<990;j++);
}


void main(void)
{
    GPIO_Init();
    //Fosc_Init();
    //Timer0_Init();
    //IE_Init();

    Flag = 1;

    while(1)
    {
         Flag = 1;

        switch(Flag)
        {
            case1:
            for(Open = 0; Open <10; Open++)
            {
                RD2 = 0;
                Delay_10ms(10);
                RD2 = 1;
                Delay_10ms(10);
            }
            RD0 = 0;
            Flag = 2;
            break;

            case2:
            for(Close = 0; Close <10; Close++)
            {
                RD4 = 0;
                Delay_10ms(10);
                RD4 = 1;
                Delay_10ms(10);
            }
            RD0 = 1;
            Flag = 1;
            break;

        }
    }
}
////////////上述这个,烧录后没反应、、、
void main(void)
{
    GPIO_Init();
    //Fosc_Init();
    //Timer0_Init();
    //IE_Init();
    Flag = 1;

    while(1)
    {
        if(Flag == 1)
        {
            for(Open = 0; Open <10; Open++)
            {
                RD2 = 0;
                Delay_10ms(10);
                RD2 = 1;
                Delay_10ms(10);
            }

            Flag = 2;

            RD0 = 0;

        }

        if(Flag == 2)
        {
            for(Close = 0; Close <10; Close++)
            {
                RD4 = 0;
                Delay_10ms(10);
                RD4 = 1;
                Delay_10ms(10);
            }

            Flag = 1;

            RD0 = 1;

        }
    }
}
回复

使用道具 举报

ID:123289 发表于 2022-12-7 15:39 | 显示全部楼层
不服,自己写一个看看。成了不就好了吗?
回复

使用道具 举报

ID:77589 发表于 2022-12-7 17:32 | 显示全部楼层
感觉你用的是PIC,如果是的话,必须写配置位。如果没有写配置位有可能系统时钟都没有,怎么可能有反应呢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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