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

#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();
}