📄 subrs.c
字号:
/************ **********************************/
/* 僐儅儞僪庴怣張棟 */
/* 俼俽俀俁俀俠 *
/* 2003.04.20 */
/*************************************************/
#include "global.h"
#include "data.h"
#include "extern.h"
#include "H8S2144.h"
void rs_recv_job(); // 俼俽係俉俆庴怣張棟
void rs_send_job() ;
void rs_send_set(); // 憲怣僶僢僼傽偐傜俼俽係俉俆憲怣僶僢僼傽奿擺
void wait_rs_send()
{
unsigned short i,j;
for(i=0; i < 5000; i++) {j=i;}
}
/************************************************************************
* 奣梫 : RS-232C RS(RTS) ON / OFF *
* 婡擻 : 巜掕SCI僠儍儞僱儖偺RS(RTS)傪ON/OFF偡傞(懚嵼偟側偄CH偼柍帇) *
* 堷悢 : int ch SCI僠儍儞僱儖斣崋 *
* int on RS(RTS) ON(1)/OFF(0) *
* 栠抣 : void *
* 揈梫 : PTA MAIN BD愱梡 *
* 嶌惉 : 2001/03/30 Y.Sugawara *
************************************************************************/
void rs_send_enable(short flag)
{
if(flag == ON){
P9DR = P9DR | BIT1; // RS enable
}
else {
P9DR = P9DR & (~BIT1); // RS disenable
}
}
// 俼俽係俉俆庴怣張棟
void rs_recv_job ()
{
int stat;
unsigned short i,ch_no;
ch_no = 0; /* RS 憲庴怣僠儍儞僱儖斣崋0 丄俠倧倣丂侽巜掕 */
stat = rs_getch(ch_no);
if (stat != -1) { /* 僨乕僞庴怣 */
if (g_RsRecv_CT == 0) { /* START枹専弌 */
rs_rx_buf[0] = stat;
g_RsRecv_CT= 1; /* 庴怣僶僀僩悢峏怴 */
rs_rceving = 1; /* 庴怣拞僙僢僩 */
start_timer(IT_RECVRS , RSNEXTRECV); /* 憲庴怣敾掕僞僀儅僙僢僩 */
}
else {
rs_rx_buf[g_RsRecv_CT] = stat;
g_RsRecv_CT++; /* 庴怣僶僀僩悢峏怴 */
if ( stat == CR) { // 庴怣廔椆
g_RsRecv_CT--; /* 庴怣僶僀僩悢峏怴 */
stop_timer(IT_RECVRS ); // 僞僀儉傾僂僩儕僙僢僩
if (rs_sd_flg == 1) {
g_RsSend_CT = 0; // 俼俽憲怣暥帤悢
rs_sending = 0; // 俼俽憲怣梫媮丄憲怣拞僼儔僌
g_RsRecv_CT = 0; // RS 庴怣暥帤僇僂儞僞 俠俼俠傪娷傓/
rs_rceving = 0; // RS485庴怣廔椆僼儔僌
rs_sd_flg = 0; // RS 俤俶俙俛俴俤僼儔僌
rs_pointer_init(0);
}
else {
rs_cmdcheck_job();
}
// rs_cmdcheck_job();
}
}
}
else {
if (check_timer(IT_RECVRS ) == 1) { // 僞僀儉傾僂僩儕僙僢僩
g_RsRecv_CT= 0; /* 庴怣僶僀僩悢峏怴 */
rs_rceving = 0; /* 庴怣拞僙僢僩 */
for (i = 0; i < 64; i++)
{
g_RsRecv_Bf[i] = 0;
}
}
}
}
/************************************************************************/
/* */
/* */
/* 俼俽係俉俆丂岎怣娗棟 */
/* */
/* */
/************************************************************************/
// 俼俽係俉俆丂憲怣娗棟
void rs_send_job()
{
unsigned int ii,rs_ch,i;
short stat;
unsigned char ichr ;
if ((rs_sending == 0) && (rs_rceving == 2 )){
rs_send_set(); // 憲怣僶僢僼傽偐傜俼俽係俉俆憲怣僶僢僼傽奿擺
rs_sending = 1; // 憲怣拞僼儔僌僙僢僩
rs_sd_flg = 1;
rs_rceving = 0; // 庴怣拞僼儔僌僋儕傾
g_RsRecv_CT= 0;
wait_rs_send();
rs_send_enable(ON);
stat = rs_putn(0, &rs_tx_buf[0], g_RsSend_CT); // 憲怣巜掕
start_timer(IT_SENDRS , SENDRSEND); /* 憲怣敾掕僞僀儅僙僢僩 */
}
if (rs_sending != 0) { // 憲怣拞
rs_ch = 0;
ii = rs_txbufempty(rs_ch); // 枹憲怣僶僀僩悢僠僃僢僋
if (ii == 0){ // 憲怣廔椆
wait_rs_send();
rs_sending = 0;
// rs_pointer_init(0);
rs_send_enable(OFF);
stop_timer(IT_SENDRS); /* 憲怣敾掕僞僀儅僙僢僩 */
for (i = 0; i < 64; i++)
{
g_RsRecv_Bf[i] = 0;
}
}
else {
if (check_timer(IT_SENDRS) == 1) {
rs_sending = 0;
rs_pointer_init(0);
rs_send_enable(OFF);
stop_timer(IT_SENDRS); /* 憲怣敾掕僞僀儅僙僢僩 */
for (i = 0; i < 64; i++)
{
g_RsRecv_Bf[i] = 0;
}
}
}
}
}
// 俼俽係俉俆憲怣僶僢僼傽奿擺
void rs_send_set()
{
unsigned short i;
unsigned char *adr;
adr = &g_RsSend_Bf[0]; /* 憲怣僨乕僞搊榐僉儏乕傾僪儗僗 */
// 僶僢僼傽乕僋儕傾
for (i = 0; i < 64; i++)
{
rs_tx_buf[i] = 0;
}
for (i = 0; i < g_RsSend_CT; i++ )
{
rs_tx_buf[i] = *(adr + i); /* 憲怣僨乕僞僙僢僩 */
}
// rs_tx_buf[g_RsSend_CT] = (unsigned char)(CR); /* 俠俼 */
// g_RsSend_CT ++; /* RS 憲怣暥帤悢 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -