📄 exchange.c
字号:
#include "exchange.h"
#include "ddsapi.h"
#include "globalparams.h"
#define bTx_232_INT_MASK 0x20
#define RX_BUFFER_LEN 15
BOOL ready = FALSE;
BYTE rx_buffer[RX_BUFFER_LEN] = "";
static volatile BYTE rx_index = 0;
#define TX_BUFFER_LEN 35
BYTE tx_buffer[TX_BUFFER_LEN] = "";
static BYTE tx_index = 0;
void OpenExchange(void)
{
Rs_Timer_DisableInt();
Rs_Timer_WritePeriod(RS232_BAUDRATE_PERIOD);
Rs_Timer_Start();
rx_index = 0;
Rx_232_EnableInt();
Rx_232_Start(RX8_PARITY_NONE);
tx_index = 0xFF;
Tx_232_DisableInt();
Tx_232_Start(TX8_PARITY_NONE);
ready = FALSE;
}
void CloseExchange(void)
{
Rs_Timer_Stop();
}
#pragma interrupt_handler Rs232_Rx_handler;
void Rs232_Rx_handler(void)
{
static BYTE ch = 0;
ch = Rx_232_RX_BUFFER_REG;
if (!(Rx_232_CONTROL_REG & RX8_RX_NO_ERROR))
{
if ( (ch == '\n'))
{
if (rx_index > 1) ready = FALSE;
rx_buffer[rx_index] = 0;
rx_index = 0;
}
else
{
if (rx_index < (RX_BUFFER_LEN-1))
{
rx_buffer[rx_index++] = ch;
}
}
}
}
#pragma interrupt_handler Rs232_Tx_handler;
void Rs232_Tx_handler(void)
{
if (tx_buffer[tx_index])
{
Tx_232_TX_BUFFER_REG = tx_buffer[tx_index++];
}
else
{
M8C_DisableIntMask (INT_MSK1, bTx_232_INT_MASK);
tx_index = 0xFF;
}
}
void ExchangeSend(const BYTE *str)
{
BYTE *ptr = tx_buffer, tx_count = 0;
while(tx_index != 0xFF);
tx_index = tx_count= 0;
while (*str)
{
*ptr++ = *str++;
if (++tx_count > (TX_BUFFER_LEN-2)) break;
}
*ptr = 0;
Tx_232_EnableInt();
Tx_232_SendData(tx_buffer[tx_index++]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -