📄 int.c
字号:
#include "..\h\INT.h"
void Finish() interrupt 2 //using 0
{
}
static byte MS10=0,uS100=0,SEC=0; //单位为10mS,100uS
word TASK_TIMER;
void timer0() interrupt 1 //T0
{
uS100++;
if(uS100==100) {uS100=0;MS10++;}
if(MS10==100) {MS10=0;SEC++;}
TASK_TIMER--;
}
void Delay100uS(word time)
{
TASK_TIMER=time;
//while(TASK_TIMER); //wait TASK_TIMER reduced to 0,may execute other task
//可能导致恰好错过,造成无响应。
while(TASK_TIMER<10); //设置1mS的缓冲时间。
}
word GetCurruntTime(void) //10mS为单位
{
return(SEC*100+MS10);
}
void in_int() interrupt 0
{
}
/*
void time1() interrupt 3
{}
*/
byte COMFRAME[8]={COMFLAGSTART,'0','0','0','0','0','0',COMFLAGEND}; //接收缓存
bit FRAMEEND=0; //接受完一帧数据置1
byte RECEIVE_BYTE=0; //接收到的字节数
byte transmite_num=0; //已经发送的字节数
byte FRAME_T[8]={COMFLAGSTART,'0','0','0','0','0','0',COMFLAGEND};
bit transmite_finish=1; //桢发送完毕置1,只有发送完一桢后才能发送下一桢
void com() interrupt 4
{
if(RI) //接收部分
{
if(RECEIVE_BYTE==0)
{
if(SBUF==COMFLAGSTART) {RECEIVE_BYTE=1;COMFRAME[0]=COMFLAGSTART;}
}
else if(RECEIVE_BYTE<7)
{
COMFRAME[RECEIVE_BYTE]=SBUF;
RECEIVE_BYTE++;
}
else if(RECEIVE_BYTE==7)
{
if(SBUF==COMFLAGEND) FRAMEEND=1;
RECEIVE_BYTE=0;
}
RI=0;
}
if(TI) //发送部分
{
TI=0;
if(transmite_num<7) //一桢尚未发送完
{
transmite_num++;
SBUF=FRAME_T[transmite_num];
}
else
{transmite_num=0; //一桢发送完成则重置状态
transmite_finish=1;}
}
}
void ecc(void) //发送数据的校验,从COMFLAGSTART一直加到ECC的结果为0
{
byte i,e=0;
byte *frame=&FRAME_T;
for(i=0;i<6;i++) e+=*(frame+i);
*(frame+6)=0x100-e;
}
void ComTransmite(void) //发送一桢数据,仅启动,其余工作由中断完成
{
extern bit transmite_finish;
while(!transmite_finish);
transmite_finish=0;
SBUF=COMFLAGSTART;
}
bit ComRecieve(void) //接收完一桢后后,置1,返回响应
{
byte *p=&COMFRAME;
byte *frame=&FRAME_T;
if(FRAMEEND)
{
FRAMEEND=0;
//*frame=COMFLAGSTART;
*(frame+1)=COMRECIEVE_OK;
*(frame+2)=*(p+1);
ecc();
ComTransmite(); //??
return(1);
}
else return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -