?? rs232.c
字號:
//#include<w77c32.h>
//#include<intrins.h>
#include "Math.h"
#include "global.h"
/*
void timer0 (void) interrupt 1 using 1
{
m_nTestTimer = m_nTestTimer + 5;
if(m_nTestTimer==1000){
m_nTestTimer=0;
P1_0=0;
}
mE_InputData.mDianTi[0].nJiaSuDu=m_nTestTimer;
}
*/
//void timer0 (void)interrupt 1 using 2 //5ms 定時器
void timer2 (void)interrupt 5 using 2 //5ms 定時器
{
uchar a;
TF2=0;
EA=0;
// TH0=-(0x28B0/256);
// TL0=-(0x28B0/256);
//串口通訊處理(串口在主程序及中斷中)
serial_comm();
//監視延遲
m_monitor_delay_count++;
if(m_monitor_delay_count>=SCC_MONITOR_DELAYCOUNT)
m_monitor_delay_count=SCC_MONITOR_DELAYCOUNT;
//---------------------------------04-5-17
can_send_count++;
if(can_send_count>5){
m_state_20ms=~m_state_20ms;
can_send_count=0;
}
if((m_state_20ms>0x7f)&&(can_send_count==3)){
e_out_call_flag=1; //發一組外呼數據
e_lamp_call_flag=0; //發一組外呼燈亮滅
}else if((m_state_20ms<0x7f)&&(can_send_count==3)){
e_lamp_call_flag=1; //發一組外呼燈亮滅
e_out_call_flag=0; //發一組外呼數據
}
//---------群控器連接計時處理04-5-10
//以下程序聯機1分鐘可為群控,脫機1分鐘必為單梯
for(a=0;a<=3;a++){
//can在線計時
if(e_online_time_count[a]<200){ //如1S未接收到群控器的數據,視群控器脫機
e_online_time_count[a]++;
e_1_second_flag[a]=0;
e_online_flag[a]=1; //群控器在線
e_group_comm_count[a]=0; //群控器計時=0
}else if((e_online_time_count[a]>=200)&&(e_1_second_flag[a]==0)){
e_online_flag[a]=0; //群控器不在線
e_1_second_flag[a]=1;
e_group_comm_count[a]=1; //群控器通訊計時
e_single_comm_count[a]=0;
}
if(e_group_comm_count[a]>0) //群控器脫機1分鐘,自動改為單梯控制
e_group_comm_count[a]++;
if(e_group_comm_count[a]>=1000){
e_online[a]=0; //單梯運行,初值即為單梯
mE_InputData.mDianTi[a].TongXun.bCanChuShiOK=0; //2004.06.16 added by LHM(改為1分鐘通訊)
e_group_comm_count[a]=1000;
}
if(e_online_flag[a]==1) //群控器在線
e_single_comm_count[a]++; //群控器脫機1分鐘,自動改為單梯控制
if(e_single_comm_count[a]>=1000){
e_online[a]=1; //群控運行
mE_InputData.mDianTi[a].TongXun.bCanChuShiOK=1; //2004.06.16 added by LHM(改為1分鐘通訊)
e_single_comm_count[a]=1000;
}
//關門不到位計時
if(mE_InputData.mDianTi[a].Men.bGuanMenDaoWei==0){ //關門不到位
m_Timer.lChaoShiTimer[a] =m_Timer.lChaoShiTimer[a]+5; //累加5ms
}else{
m_Timer.lChaoShiTimer[a]=0;
}
//2004.11.23
//淘汰標志計時
if(m_MenGuZhang_flg[a]==1)
if(mE_InputData.mDianTi[a].Men.bMenGuZhang==0)
if((m_MenGuZhang_count[a]--)==0){
mE_InputData.mDianTi[a].Men.bMenGuZhang=1;
m_MenGuZhang_count[a]=COUNT_10s;
}
if(m_ManZai_flg[a]==1)
if(mE_InputData.mDianTi[a].ChengZai.bManZai==0)
if((m_ManZai_count[a]--)==0){
mE_InputData.mDianTi[a].ChengZai.bManZai=1;
m_ManZai_count[a]=COUNT_3s;
}
if(m_ChaoZai_flg[a]==1)
if(mE_InputData.mDianTi[a].ChengZai.bChaoZai==0)
if((m_ChaoZai_count[a]--)==0){
mE_InputData.mDianTi[a].ChengZai.bChaoZai=1;
m_ChaoZai_count[a]=COUNT_3s;
}
if(m_JianXiu_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bJianXiu==0)
if((m_JianXiu_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bJianXiu=1;
m_JianXiu_count[a]=COUNT_1s;
}
if(m_SiJi_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bSiJi==0)
if((m_SiJi_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bSiJi=1;
m_SiJi_count[a]=COUNT_1s;
}
if(m_ZhiShi_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bZhiShi==0)
if((m_ZhiShi_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bZhiShi=1;
m_ZhiShi_count[a]=COUNT_1s;
}
if(m_BaoLiu_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bBaoLiu==0)
if((m_BaoLiu_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bBaoLiu=1;
m_BaoLiu_count[a]=COUNT_1s;
}
if(m_SuoTi_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bSuoTi==0)
if((m_SuoTi_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bSuoTi=1;
m_SuoTi_count[a]=COUNT_1s;
}
if(m_XiaoFang_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bXiaoFang==0)
if((m_XiaoFang_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bXiaoFang=1;
m_XiaoFang_count[a]=COUNT_1s;
}
if(m_JiTing_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bJiTing==0)
if((m_JiTing_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bJiTing=1;
m_JiTing_count[a]=COUNT_1s;
}
if(m_GuZhang_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bGuZhang==0)
if((m_GuZhang_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bGuZhang=1;
m_GuZhang_count[a]=COUNT_1s;
}
if(m_JingGao_flg[a]==1)
if(mE_InputData.mDianTi[a].TeBie.bJingGao==0)
if((m_JingGao_count[a]--)==0){
mE_InputData.mDianTi[a].TeBie.bJingGao=1;
m_JingGao_count[a]=COUNT_1s;
}
}
if(m_IsExistWaiInFlg==0)
m_pTimer->lJingTaiTimer = m_pTimer->lJingTaiTimer +5;
else
m_pTimer->lJingTaiTimer = 0;
if(m_read_time==0)
if((m_read_time_count--)==0){
m_read_time=1;
m_read_time_count=COUNT_5s;
}
if(m_can0_flg==1)
if(m_can0err_flg==0)
if((m_can0_count--)==0){
m_can0err_flg=1;
m_can0_count=COUNT_ERR;
}
if(m_can1_flg==1)
if(m_can1err_flg==0)
if((m_can1_count--)==0){
m_can1err_flg=1;
m_can1_count=COUNT_ERR;
}
if(m_can2_flg==1)
if(m_can2err_flg==0)
if((m_can2_count--)==0){
m_can2err_flg=1;
m_can2_count=COUNT_ERR;
}
if(m_can3_flg==1)
if(m_can3err_flg==0)
if((m_can3_count--)==0){
m_can3err_flg=1;
m_can3_count=COUNT_ERR;
}
//---------------------------------------------------------------------
EA=1;
}
// 串口通信處理
void serial_comm(void)
{
comm_check(); // 上位機通訊檢測程序
monitor_rec();
monitor_send();
}
// 串口命令解析
void serial_command_resolve(void)
{
if(m_comm_enable_flg==1){
if(m_resolve_flg==1)
command(m_scc.m_ReadBuf);
}
}
// 串口發送數據作成
void serial_make_senddata(void)
{
if(m_comm_enable_flg==1){
//作成發送緩沖區
if(m_scc.WriteFlg==0){ //完整命令起始
/* if(m_monitor_type[m_active_idx]!=0){ //有效的類型
make_send_buf(); //作成發送數據
}else{ //遇無效類型,嘗試監視下一參數
m_active_idx++;
if(m_active_idx>=MORN_PARAM_NUM){
m_active_idx=0;
return;
}
}*/
VALIDE_TYPE:if(m_monitor_type[m_active_idx]!=0){ //有效的類型
make_send_buf(); //作成發送數據
}else{ //遇無效類型,嘗試監視下一參數
m_active_idx++;
if(m_active_idx>=MORN_PARAM_NUM){
m_active_idx=0;
return;
}
goto VALIDE_TYPE;
}
}
}
}
//----------------------------------------------------------------------------------------------------------
void comm_check(void) // 上位機通訊檢測程序
{
if(RI==1){ // 如接收到數據,通訊標志置1
m_comm_60sover_flg=0;
m_comm_enable_flg=1;
m_comm_data_flg=1;
}else{
m_comm_data_flg=0;
if(m_comm_60sover_flg==1){ // 如計時1分鐘到,無接收數據,通訊程序不再執行,標志清零
m_comm_enable_flg=0;
message_quit(); // 串口通信退出(V命令)子程序
}
}
//無串口數據時,開始60s計時
if(m_comm_data_flg==0)
m_ST_60s_count++;
else
m_ST_60s_count=0;
//無串口數據時,60s計時到
if(m_ST_60s_count>=COUNT_60s){
m_ST_60s_count=COUNT_60s;
//60s無串口通信數據,60s計時結束標志置1
m_comm_60sover_flg=1;
}
}
//-------------------------------------------------------------------------------------------------------------------------------
void monitor_rec(void) //上位機通訊程序
{
if(m_comm_enable_flg==1){
if(RI==1){ //有數據輸入
sbuf_rec=SBUF;
RI=0;
if(m_host_flg==1){
m_get_senddata_flg=1;
}else{
}
}else{
sbuf_rec=INVALID_ASC2;
}
if((sbuf_rec==REC_COMMAND) || (sbuf_rec==SEND_COMMAND)){ //第1個命令元素ESC/FS,放入數組的第一個元素
if(sbuf_rec==REC_COMMAND){
m_host_flg=0;
m_scc.nReadCount=0;
m_scc.m_ReadBuf[m_scc.nReadCount]=sbuf_rec;
m_scc.nReadCount++;
SBUF=sbuf_rec; //返回接收的數據
//終止監視
message_quit();
}else if(sbuf_rec==SEND_COMMAND){
m_host_flg=1; //移至主動發送處
}
sbuf_rec=INVALID_ASC2;
}else if((m_scc.nReadCount==1) && ((sbuf_rec!=INVALID_ASC2))){ //第2個命令元素
if(m_host_flg==0){
m_scc.m_ReadBuf[m_scc.nReadCount]=sbuf_rec;
m_scc.nReadCount++;
SBUF=sbuf_rec; //返回接收的數據
}else{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -