📄 main.c
字号:
#include <2_UART_SST.h>
#include <stdio.h>
extern xdata struct uart1_rx_strut
{
uchar no_data_count ; //接收缓冲区无数据的时间计数,接收到数据,将置为0,没有数据时,20ms加一(在定时中断内加一)
uchar rx_state ; //接收的状态
uchar rx_bitcont ; //接收的一个数据的位数(常用的为8位宽度)
uchar buff[MAX_SIZE_BUF] ; //接收缓冲区大小
uint count ; //已经接收的数据个数,也可根据接收的数目,来判断有无新数据,在取出数据后,将这个数目清零
}uart2_rx,uart1_rx ; //原来的BUFFER设为256,由于SST89E516的XRAM为300H,如果分配4个256的BUFFER,SST MCU内部的XRAM便不够,
//因此出现第2个UART不能接收或发送的现象.
//----------------------------------------
void main(void )
{
UART_SST_init( ) ; //调用扩展UART的初始化函数
UART1_rx_disable(); //这里无用,只是防止在编译时出现未调用的警告.
UART1_rx_enable( ); //允许UART1进行接收
UART2_rx_disable(); //这里无用,只是防止在编译时出现未调用的警告.
UART2_rx_enable( ); ////允许UART1进行接收
EA = 1 ; //开总中断
while(1)
{
if( uart2_rx.no_data_count > 250 ) //连续250循环中没有接收到数据,开始发送接收的数据
{ //if didn't receive data beyond 1 second, consider receive data finished
if( uart2_rx.count != 0 )
{ //if received data ,transfer it
UART2_send_out( uart2_rx.buff ,uart2_rx.count ); //就将接收缓冲区的数据全部发送出去
uart2_rx.count = 0 ; //发送完毕,就将接收的数目改为0,表示接收区的内容已全部取出
}
uart2_rx.no_data_count = 0 ; //置接收缓冲区内有数据标志,没有数据时,置为非0标志
}
if ( uart1_rx.no_data_count > 250 ) //连续250循环中没有接收到数据,开始发送接收的数据
{ //if didn't receive data beyond 1 second, consider receive data finished
if( uart1_rx.count != 0 )
{ //if received data ,transfer it
UART1_send_out( uart1_rx.buff ,uart1_rx.count ); //就将接收缓冲区的数据全部发送出去
uart1_rx.count = 0 ; //发送完毕,就将接收的数目改为0,表示接收区的内容已全部取出
}
uart1_rx.no_data_count = 0 ; //置接收缓冲区内有数据标志,没有数据时,置为非0标志
}
uart1_rx.no_data_count++; //一个循环,接收无数据的次数加一
uart2_rx.no_data_count++; //一个循环,接收无数据的次数加一
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -