c语言不用goto用什么意思,请教C程序goto跳转的用法问题【不用goto了,结贴】

本帖最后由 bg4rff 于 2019-8-27 11:16 编辑

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define u_s 49996 //12T模式12MHz@50mS初值

//检查水位低和高做动作的间隔,检查低水位30分钟1次,检查高水位每1分钟1次,但仅在加水状态检查

#define  Tm_checkL_set  30

#define  Tm_checkH_set  1

/***********I/O口位功能定义*****************************/

//sbit CE=P1^4;  //595(引脚12)锁存控制(用于调试时演示参数)

//sbit CLK=P1^3;  //CLK

//sbit DAT=P1^2;  //DATA

sbit J_no=P1^5;

sbit J_off=P1^3;

unsigned int dda;

unsigned char hs=0;

unsigned char        t50ms=0;//50毫秒计数

unsigned char   t1s=0;//1秒计数

unsigned char   t_h_m=0,t_l_m=0;//1分计数

unsigned char   tns_Jon=0,tns_Joff=0;//用于释放继电器的延时

bit tm_h_ar=0,tm_l_ar=0;//时间到

bit waterring=0;//正在加水

static unsigned char needwater=0,notneedwater=0;//需要加水,不需要加水

void InitADC(void)

{

;

}

unsigned int AD_work(unsigned char ch)

{

return  195;

}

//====定时器T0初始化函数(函数由stc_isp软件自动生成)=========

//定时器T0的16位自动重装模式

void T0_Init(void)  //50毫秒@12.000MHz

{

AUXR &=0x7F; //定时器时钟12T模式

TMOD=0xF0;  //模式0@16位自动重装

TH0=(65536-u_s)/256;

TL0=(65536-u_s)%256;

TF0=0;  //清除T0中断标志

ET0=1;  //使能定时器T0中断

TR0=1;  //启动定时器T0

EA=1;

}

//====定时器T0中断函数=============================

void T0_time() interrupt 1 //using 1

{

if(++t50ms==20)

{t50ms=0;

//每秒检测一次水位

dda= AD_work(0);//检测储水箱水位

needwater<<=1;        //记录检测情况

notneedwater<<=1;

if(dda>200){notneedwater++;}

if(dda<190){needwater++;}

if(tns_Jon)

{

if(!(--tns_Jon))

{

//释放打开继电器

J_no=1;

}

}

if(tns_Joff)

{

if(!(--tns_Joff))

{

//释放关闭继电器

J_off=1;

}

}

if(++t1s==60)

{        t1s=0;

if(t_h_m)

{

if(!(--t_h_m))

{

//此处为延时n分单次执行

tm_h_ar=1;

}

}

if(++t_l_m==Tm_checkL_set)//检查低水位时间到

{t_l_m=0;

tm_l_ar=1;

}

}

}

}

//====主函数================

main()

{

T0_Init(); //T0设定初始化

//-----------------------------------------------------------

InitADC();//ADC初始化  //设置P1.0--ADC0通道;测量储水箱水位

J_no=1;  //初始化继电器J1驱动输出口

J_off=1;//初始化继电器J2驱动输出口

//----------------------------------------------------------

if(AD_work(0)<190) //初始检测到低水位

{

J_off=1;        //防止同时接通

J_no=0;          //接通“开通电动阀”继电器

tns_Jon=25;        //延时25秒释放

waterring=1;//正在加水

t_h_m=Tm_checkH_set;//延时检查水位是否高

tm_h_ar=0;

}

while(1)

{

if(tm_l_ar)//其实这些都很短,都可以放进定时服务程序,省下标记量

{

tm_l_ar=0;

if((needwater&0x07)==0x07) //连续3次检测到低水位

{

J_off=1;        //防止同时接通

J_no=0;          //接通开通电动阀继电器

tns_Jon=25;        //延时25秒释放

waterring=1;

t_h_m=Tm_checkH_set;//延时检查水位是否高

tm_h_ar=0;

}

}

if(waterring)

{

if(tm_h_ar)

{

tm_h_ar=0;

if((notneedwater&0x07)==0x07) //连续3次检测到高水位

{

J_no=1;                //防止同时接通

J_off=0;          //接通关闭电动阀继电器

tns_Joff=25;//延时25秒释放

waterring=0;

}

else{//继续延时检查

t_h_m=Tm_checkH_set;//延时检查水位是否高

tm_h_ar=0;

}

}

}

PCON |= 0x01;           //将IDL(PCON.0)置1,MCU将进入空闲模式

_nop_();                //此时CPU无时钟,不执行指令

_nop_();                //等待中断终止空闲模式

_nop_();

_nop_();

}

}

没编译,也许有错,欢迎交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值