#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;
}
}
}
|