#include "STC8.H"
typedef unsigned int u16;
u16 tt; //80 点计算,为1个周期 20ms,,,, 0.25mS X 80 =20ms;即是每点 0.25MS
typedef unsigned char u8;
u8 dg,df;
u8 a;b;
void Timer0_Isr(void) interrupt 1
{
if(df<11) //软启信号对,df==11退出软启动。
{
dg=0-df;
if(tt==79)
df++;
if(dg<=1)
dg=0;
}
/////////////////////////////
if(tt==1||tt==3||tt==4||tt==35||tt==36||tt==38)
{ P33=0;
// P54=1;
P55=1;
}
a=6+dg;
b=33-dg;
if(tt>=a&&tt<=b)
{ P33=0;
// P54=1;
P55=1;
}
if(tt==41||tt==43||tt==44||tt==75||tt==76||tt==78)
{ P33=1;
// P54=1;
P55= 0;
}
a=46+dg;
b=73-dg;
if(tt>=a&&tt<=b)
{ P33=1;
// P54=1;
P55=0;
}
tt++;
if(tt==80) //一个周期完成
tt=0;
}
void Timer0_Init(void) //250微秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x0C; //设置定时初始值
TH0 = 0xFE; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
void main(void)
{ P3M0 |= 0x09; P3M1 &= ~0x09; //p3.3 p3.0 推挽输出
// P3M0 = 0x00; P3M1 = 0x00; // 准双向口
// P5M0 &= ~0x30; P5M1 &= ~0x30; //P54, P55, 准双向口
// p3.1 准双向口,用于过流 p3.3 p3.0
// P5M0 |= 0x30; P5M1 &= ~0x30; //P54, P55, 推挽输出
P5M0 = (P5M0 & ~0x10) | 0x20; P5M1 &= ~0x30; // P55推挽输出,P54准双向口
dg=0;
df=0;
P31=0;
P30=0;
P33=0;
P55=0;
tt=0;
Timer0_Init(); //1 毫秒秒@24.000MHz
EA = 1; //允许全局中断
while (1)
{ ;
if( P54==1) //过流关闭中断。
{ EA = 0; // 关定时。
ET0 = 0;
P33=0;
P55=0;
tt=0;
dg=0;
df=0;
P54=0;
Timer0_Init(); //1 毫秒秒@24.000MHz
EA = 1;
}
}
}
|