?? main.c
字號:
#include "reg52.h"
#include "string.h"
#include "communication.h"
bit Fstopwork=0; //Note:It must be 0. the sytem is working
bit Ftemprature=0;
bit FOutHeat=0;
bit FOutBenInversion=0;
bit FOutBenForward=0 ;
bit FOutMainInversion=0 ;
bit FOutMainForward=0 ;
bit FOutPingInversion=0 ;
bit FOutXi=0 ;
bit FOutJiao=0;
bit FOutPingForward=0 ;
bit FtestTemprature=0;
bit FBenForwardtime0=0;
bit FBenForwardtime1=0;
bit FBenpingtime1=0;
bit FXiDaoCloseOpen=0;
bit FStartWork=0;
bit FOutoHand=0;
bit FKeepTemprature=0;
unsigned char CountStop=0 ;
unsigned char RInStopWork,RInBenG,RInLeft,RInRight,RInPingG,RInPingX,RInBen,RInTemprature;
unsigned char SetTemprature,ReadTemprature ;
unsigned char RearOffset;
unsigned char idata uart1RingBuffer[RxBufSize];
unsigned char idata TempReceiveData[RxBufSize];
unsigned int ReadpingTime,ReadBenTime;
unsigned char SetpingTime,SetBenTime;
unsigned char SetJiaYaLi;
void main(void)
{
delay();//wait system stabilization
InitPort();
InitSerialPort();
InitTimer0();
EX1interrupt();
while(1)
{
CompearTemprature();
OutDoWork();
StopWork();
}
}
void delay(void) //35ms
{
unsigned long temp;
for(temp=0;temp<0x2fff;temp++);
}
void DoWithRxData(void)
{
unsigned char codeType;
if(TempReceiveData[0]==TempReceiveData[2]==TempReceiveData[4])
{
if(TempReceiveData[1]==TempReceiveData[3]==TempReceiveData[5])
{
codeType=TempReceiveData[0];
switch(codeType)
{
case ComndXiDao :
if(0x55==TempReceiveData[1])
FXiDaoCloseOpen=1;
else if(0xAA==TempReceiveData[1])
FXiDaoCloseOpen=0;
break ;
case ComndStartWork :
if(0x55==TempReceiveData[1])
FStartWork=1;
break ;
case ComndOutoHand :
if(0x55==TempReceiveData[1])
FOutoHand=0;
if(0xAA==TempReceiveData[1])
FOutoHand=1;
break ;
case ComndKeepTemp :
if(0x55==TempReceiveData[1])
FKeepTemprature=1;
if(0xAA==TempReceiveData[1])
FKeepTemprature=0;
break ;
case ComndSetTemp :
SetTemprature=TempReceiveData[1];
break ;
case ComndJiaTime :
break ;
case ComndJiaYaLi :
SetJiaYaLi=TempReceiveData[1];
break ;
case ComndWaitTime :
SetBenTime=TempReceiveData[1];
break ;
case ComndFengMianTime :
SetpingTime=TempReceiveData[1];
break ;
default :
;
}
}
}
}
void CompearTemprature(void)
{
if(ReadTemprature>SetTemprature)
{
FtestTemprature=1;
OutHeat=0;
}
else
{
OutHeat=1; //heat up
}
}
void OutDoWork(void)
{
if(FStartWork)
//啟動
{
if(!Fstopwork)
//檢測急停
{
if(Ftemprature)
//檢測溫度
{
if((!InBenG)&(!InLeft))
//檢測本臺光電與左限位是否滿足
{
FBenForwardtime0=1;
do {
OutBenInversion=MotorClose;
//打開置本臺正轉電機等待夾書完成否
OutBenForward=MotorOpen;
}while(!FBenForwardtime1);
OutBenForward=MotorClose;
FBenForwardtime1=0;
if(!InPingG)
//檢測平臺光電既是否放有封面
{
do {
OutMainInversion=MotorClose;
OutMainForward=MotorOpen; //主電機正轉
if(FXiDaoCloseOpen)
OutXi=MotorOpen; //銑刀開
}while(!InRight); //檢測右限位到否
OutMainForward=MotorClose; //停止主電機正轉
OutXi=MotorClose; //銑刀關
FBenpingtime1=1;
do {
OutPingForward=MotorOpen;
OutPingInversion=MotorClose;
}while(!FBenpingtime1); //等待封膠時間
FBenpingtime1=1;
do {
OutPingForward=MotorClose;
OutPingInversion=MotorOpen;
}while(!FBenpingtime1); //封膠完畢退回
OutPingInversion=MotorClose;
do {
OutMainInversion=MotorOpen;
OutMainForward=MotorClose; //主電機反轉
}while(!InLeft); //檢測左限位
OutMainInversion=MotorClose; //停止主電機反轉
}
}
}
}
else
{
OutBenInversion=MotorClose;
OutBenForward=MotorClose;
OutMainInversion=MotorClose;
OutMainForward=MotorClose;
OutPingInversion=MotorClose;
OutXi=MotorClose;
OutJiao=MotorClose;
OutPingForward=MotorClose;
FBenForwardtime0=0;
}
}
}
void StopWork(void)
//急停標志
{
if(!InStopWork)
{
if(++CountStop==3)
{
CountStop=0;
Fstopwork=1;
}
}
else
{
CountStop=0;
Fstopwork=0;
}
}
void PrintChar(unsigned char ch)
{
//串口 向顯示板 發送數據
ES=0;
SBUF=ch;
while(TI==0);
TI=0;
ES=1;
}
void SerialPort(void)interrupt 4
{
//接收顯示板的命令
//相同命令顯示板連續發送三次,所以接收三次
unsigned char *ptr,*Outptr;
if(RI){
RI=0;
*(uart1RingBuffer+RearOffset)=SBUF ;
RearOffset++;
if(RearOffset>6)
{
RearOffset=0 ;
Outptr=TempReceiveData;
for(ptr=uart1RingBuffer;ptr<uart1RingBuffer+RxBufSize;*ptr++)
{
*Outptr++=*ptr;
}
DoWithRxData();
}
}
if(TI){
TI=0;
}
}
void timer0(void)interrupt 1
{
unsigned int TTSetBenTime,TTSetpingTime;
TTSetBenTime=(int)SetBenTime*20;
TTSetpingTime=(int)SetpingTime*20;
TL0=TL0LOAD ;
TH0=TH0LOAD ;
//計算夾書時間與設定時間比較
if(FBenForwardtime0)
++ReadBenTime;
if(ReadBenTime==TTSetBenTime)
{
FBenForwardtime1=1;
FBenForwardtime0=0;
}
//計算封書時間
if(FBenpingtime1)
++ReadpingTime;
if(TTSetpingTime==ReadpingTime)
{
FBenpingtime1=0;
ReadpingTime=0;
}
}
void EX0INTER(void)interrupt 0
//讀取電位器及溫度值
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -