You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.3 KiB
90 lines
2.3 KiB
|
|
#include "uart0.h"
|
|
#include "uartx.h"
|
|
|
|
#define Self_Define_ISP_Download_Command 0x3D //用户自定义下载(实现不停电下载)
|
|
|
|
|
|
void L0_uart0_init(void)
|
|
{
|
|
U16 val = D_BRT_COUNT(12, D_sys_MainFre, D_uart0_BRT);
|
|
SCON = 0x50; // 8位数据,可变波特率
|
|
AUXR &= 0xBF; //定时器时钟12T模式
|
|
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
|
|
TMOD &= 0x0F; //设置定时器模式
|
|
TL1 = val; //设置定时初始值
|
|
TH1 = val >> 8; //设置定时初始值
|
|
ET1 = 0; //禁止定时器中断
|
|
TR1 = 1; //定时器1开始计时
|
|
}
|
|
|
|
void L0_uart0_buf_init(void)
|
|
{
|
|
//定义发送缓冲区
|
|
ts_uart[uNum0].s.buf = ts_send_buf.s1;
|
|
ts_uart[uNum0].s.bufmax = D_send1_max;
|
|
ts_uart[uNum0].s.max = ts_uart[uNum0].s.now = 0;
|
|
ts_uart[uNum0].s.ok = D_ready;
|
|
|
|
//定义接收缓冲区
|
|
ts_uart[uNum0].r.buf = ts_recv_buf.r1;
|
|
ts_uart[uNum0].r.bufmax = D_recv1_max;
|
|
ts_uart[uNum0].r.head = 0;
|
|
ts_uart[uNum0].r.ok = 0;
|
|
ts_uart[uNum0].r.idle = 1;
|
|
ts_uart[uNum0].r.overtime_t = 0;
|
|
|
|
//定义接收处理协议
|
|
ts_uart[uNum0].tp_handler = NULL;
|
|
ts_uart[uNum0].uartx = uNum0;
|
|
|
|
//串口初始化
|
|
L0_uart0_init();
|
|
|
|
//打开串口中断
|
|
D_uart0_ES_INT(1);
|
|
|
|
//默认处于接收状态
|
|
// D_UART0_485_RX()
|
|
}
|
|
|
|
/*************************************************
|
|
UART 中断
|
|
*************************************************/
|
|
void INTERRUPT_UART(void) D_SERVE_UART
|
|
{
|
|
u16 a,b;
|
|
// NOP(); NOP(); NOP();
|
|
if (L0_uart0_IntRI()) //如果是U0接收中断
|
|
{
|
|
L0_uart0_IntRIClear(); //清除接收中断标志
|
|
ts_uart[uNum0].r.reg = SBUF; //获取当前数据
|
|
|
|
//用户自定义下载,实现不停电下载(第一次烧录程序仍需断电,后续不再需要,下载使用STC-ISP软件)
|
|
// if (SBUF == Self_Define_ISP_Download_Command)
|
|
// {
|
|
// for(a = 1000;a > 0;a--)
|
|
// for(b = 100;b > 0;b--);
|
|
// IAP_CONTR = 0x60;
|
|
// }
|
|
|
|
L0_uartN_s2b(uNum0); //接收数据至缓冲区
|
|
}
|
|
if (L0_uart0_IntTI()) //如果是U0发送中断
|
|
{
|
|
L0_uart0_IntTIClear(); //清除发送中断标志
|
|
if (ts_uart[uNum0].s.max > ts_uart[uNum0].s.now)
|
|
{
|
|
SBUF = ts_uart[uNum0].s.p[ts_uart[uNum0].s.now];
|
|
ts_uart[uNum0].s.now++;
|
|
}
|
|
else
|
|
{
|
|
ts_uart[uNum0].s.ok = D_ready;
|
|
ts_uart[uNum0].s.max = 0;
|
|
ts_uart[uNum0].s.now = 0; //可以发送下一个数据
|
|
// D_UART0_485_RX() //切换到接收状态
|
|
}
|
|
}
|
|
// NOP(); NOP(); NOP();
|
|
}
|
|
|