本帖最后由 gyh974 于 2011-5-20 17:58 编辑
#include "HT46R064.h"
/************************************************
;*SUB. NAME:
;*INPUT :
;*OUTPUT :
;*USED RAM :
;*FUNCTION :
;***********************************************/
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define LED1 _pb1
#define LED2 _pb2
#define RL1 _pa1
#define RL2 _pa2
#define RL3 _pa3
#define k1 _pb3
#define k2 _pb4
uchar close;
uchar cnt01s,cnt05s,cnt1s,cnt4s;
uchar key1,key2;
bit t2ms_fg,t01s_fg,t05s_fg,t1s_fg,t4s_fg;
#pragma vector time0_isr @ 0x8
/**************************************************
; name of function:
**************************************************/
void init_system(void)
{
_status=0x00;
_tmr0=0x83;
_tmr0c=0b10010110;
_intc0=0b00000101;
_acsr=0b00000001;
_pa =0B00000000;
_pac=0b00000000;
_pa =0b00000000;
_pb =0B00000110;
_pbc=0b00011000;
_pb =0b00000110;
_pbpu=0b00011000;
_pcc=0b00000000;
_pc =0b00000000;
for(_mp0=0x40; _mp0<0xff; _mp0++)
_iar0=0;
LED1=1;
LED2=0;
RL1=0;
RL2=0;
RL3=1;
}
/**************************************************
; name of function:
**************************************************/
void time0_isr(void)
{
_clrwdt();
t2ms_fg=1;
cnt01s++;
if(cnt01s>=50)
{
t01s_fg=1;
cnt01s=0;
cnt05s++;
if(cnt05s>=5)
{
t05s_fg=1;
cnt05s=0;
}
cnt1s++;
if(cnt1s>=10)
{
t1s_fg=1;
cnt1s=0;
}
cnt4s++;
if(cnt4s>=40)
{
t4s_fg=1;
cnt4s=0;
}
}
}
/***********************************************/
void Delay2ms(uchar i)
{
for(;i!=0;i--)
{
t2ms_fg=0;
while(!t2ms_fg) { _nop(); }
}
}
/************************************************/
void Delay1s(uchar i)
{
for(;i!=0;i--)
{
cnt1s=0;
t1s_fg=0;
while(!t1s_fg) { _nop(); }
}
}
/*************************************************/
void main(void)
{
init_system();
while(1)
{
if(k1==0)
{
/有按键,继电器无输出
Delay2ms(10);
if(k1==0)
{
cnt4s=0;
cnt1s=0;
t1s_fg=0;
t4s_fg=0;
close=1;
RL1=0;
RL2=0;
RL3=0;
}
}
else if (RL1==0&&RL2==0&&RL3==0)
{ /继电器延时1秒输出
if(t1s_fg==1)
{
t1s_fg=0;
if(close==0)
{ /有按键,继电器3动作,指示灯1亮
LED1=1;
LED2=0;
RL1=0;
RL2=0;
RL3=1;
}
else
{ /否则,继电继器1和2动作,指示灯2亮
LED1=0;
LED2=1;
RL1=1;
RL2=1;
RL3=0;
}
}
}
else if (close==1) /如果是按键过,延时4秒恢复初始动作
{
if(t4s_fg==1)
{
close=0;
t1s_fg=0;
cnt1s=0;
RL1=0;
RL2=0;
RL3=0;
}
}
}
} |
|