找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1832|回复: 7
收起左侧

程序错误,请教一下,这个是什么问题

[复制链接]
ID:97678 发表于 2020-1-9 13:49 | 显示全部楼层 |阅读模式
这个程序里是什么错误?


#include "func.h"
#include "main.h"
#include "io.h"
sbit Test=P2^2;
extern u8 IsDebug;
void WaitACZero(void)
{
    int i;    //while(Zero);while(!Zero);
    i=1;
}
void Delay1ms()        //@11.0592MHz
{
    unsigned char i, j;
    i = 11;
    j = 190;
    do
    {
        while (--j);
    } while (--i);
}
u32 allWorkTime=(s32)3600*(s32)65535;
void update_allWork(void){ReadBytes(0x100,4,&allWorkTime);if(allWorkTime==0xffffffff)allWorkTime=0;}
void save_allWork(void){    WriteBytes(0x100,4,&allWorkTime);}

void update_SetTemp(void){ReadBytes(0x200,1,&SetTemp);if(SetTemp==0xff)SetTemp=0;}
void save_SetTemp(void){WriteBytes(0x200,1,&SetTemp);}
u8 t123456[6];
void update_t123456(void)
{
    u8 i;
    ReadBytes(0x300,6,t123456);
    for(i=0;i<6;i++)
    {
        if(t123456[i]==0xff || t123456[i]==0)return;
    }
    t1=t123456[0];
    t2=t123456[1];
    t3=t123456[2];
    t4=t123456[3];
    t5=t123456[4];
    t6=t123456[5];
}
void save_t123456(void)
{
    t123456[0]=t1;
    t123456[1]=t2;
    t123456[2]=t3;
    t123456[3]=t4;
    t123456[4]=t5;
    t123456[5]=t6;
    WriteBytes(0x300,6,t123456);
}
void delay_ms(u32 t)
{
    u32 i;
    for(i=t;i>0;i--)
        Delay1ms();
}

STATUS status=Reset;
STATUS status_next=Reset;

void main_control()//call for every 10ms
{
    static u16 cWaitTemp=0;
    static u16 cStarting=0;
    static u16 cT12=0,cT6=0,cKey=0,c1S=0;
    static u32 cT34=0;
    switch(status)
    {
        case Reset:
            cWaitTemp=0;cT12=0;cT6=0;cKey=0;cT34=0,c1S=0;
            Motor1_OFF;Motor2_OFF;Motor3_OFF;Motor4_OFF;
            Pump1_OFF;Pump2_OFF;Pump3_OFF;
          if(cStarting++==10){
                if(!IsDebug){
                    Pump4=1;
                    update_allWork();
                    update_SetTemp();
                    update_t123456();
                }
            }else if(cStarting==15){
                Pump4=0;
                status_next=WaitForKey;
                cStarting=0;
            }
            break;
        case WaitForKey:
            if(Key)cKey=0;else cKey++;
            if(cKey>5){ cKey=0;status_next=WaitForTemp;    }
            break;
        case WaitForTemp:
            if(Temp > SetTemp)
            {
                status_next=Starting;cWaitTemp=0;Motor4_OFF;
                Pump1_ON;Pump2_ON;
                WaitACZero();
                Motor3_ON;Motor2_ON;
            }    else if(cWaitTemp++==10){WaitACZero();Motor4_ON;}
            
            if(Key)cKey=0;else cKey++;
            if(cKey>tKey*10){ cKey=0;status_next=Reset;    }
            
            break;
        case Starting:
            if(cStarting++==t5*10)
            {
                status_next=Started;cStarting=0;
                WaitACZero();
                Motor1_ON;
                Pump3_ON;
            };
            Test=~Test;
            break;
        case Started:
            /*阀门*/
            cT12++;
            if(cT12<t1){Pump1_ON;Pump2_OFF;}
            else if(cT12<(t1+t2)){Pump1_ON;Pump2_ON;}
            else if(cT12<(t1+t2+t1)){Pump1_OFF;Pump2_ON;}
            else if(cT12<(t1+t2+t1+t2)){Pump1_ON;Pump2_ON;}
            else cT12=0;
            /**/
            cT34++;
            if(cT34<t3*10)Pump3_ON;
            else if(cT34<(t3*10+t4*10*60*10))Pump3_OFF;
            else cT34=0;
            
            
            if(Key)cKey=0;else cKey++;
            if(cKey>tKey*10){ cKey=0;status_next=Stoping;    }

            if(Temp < SetTemp-5 && Motor4==1){WaitACZero();Motor4_ON;}
            else if(Temp > SetTemp && Motor4==0){Motor4_OFF;}
            /*work*/
            if(c1S++==10){allWorkTime++;c1S=0;}
            break;
        case Stoping:
            Motor1_OFF;
            Motor4_OFF;        //Pump1_OFF;Pump2_OFF;
          Pump3_OFF;        /*阀门*/
            cT12++;
            if(cT12<t1){Pump1_ON;Pump2_OFF;}
            else if(cT12<(t1+t2)){Pump1_ON;Pump2_ON;}
            else if(cT12<(t1+t2+t1)){Pump1_OFF;Pump2_ON;}
            else if(cT12<(t1+t2+t1+t2)){Pump1_ON;Pump2_ON;}
            else cT12=0;
            /**/
            Pump4=~Pump4;
            cT6++;
            if(cT6<t6*10);
            else {
                cT6=0;
                status_next=Reset;
                if(!IsDebug)save_allWork();
            }
            break;
        default:
            break;
    }
    status=status_next;
}
回复

使用道具 举报

ID:584814 发表于 2020-1-9 16:30 | 显示全部楼层
最大的错误是一句注释都没有
回复

使用道具 举报

ID:684474 发表于 2020-1-10 09:42 | 显示全部楼层
报的错误是什么?
回复

使用道具 举报

ID:158375 发表于 2020-1-10 09:52 | 显示全部楼层
次大的错误是一句都没有说程序是干嘛的
回复

使用道具 举报

ID:681455 发表于 2020-1-10 10:52 来自手机 | 显示全部楼层
生成hex的时候keil下面是怎么写的
回复

使用道具 举报

ID:282850 发表于 2020-1-10 15:32 | 显示全部楼层
没看见有错误,很好的程序和问题。
回复

使用道具 举报

ID:282850 发表于 2020-1-10 15:34 | 显示全部楼层
再次看,确定是内核坏了,换一个就好。
回复

使用道具 举报

ID:155507 发表于 2020-1-10 17:28 | 显示全部楼层
没有原理图、没有实物,谁能知道怎么来找问题
写程序要养成良好的备注习惯,不然别人怎么看的懂你的代码  
你这个程序不完整,没法给你看是哪里出问题了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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