📄 gk_serial_uart0.c
字号:
#pragma CODE // include assembler listing in .lst file
#include ".\include\gk_serial_uart0.h"
#include ".\include\reg52.h"
#include ".\include\gk_extern_var.h"
#define BOAT_RATE_4800 0xF4
#define BOAT_RATE_9600 0xFA
#define BOAT_RATE_19200 0xFD
#define FRAME_START_VALUE 0x14
#define FRAME_SYNC_VALUE 0xCD
static void serial1_isr (void) interrupt 4 using 0
{
COMM_INT_FALG_1=1; //通讯中断
SERIAL_TIME_FACTOR_1=0; //计时器清零
if(RI)
{
RI=0;
IMAGE_SBUF_1=SBUF;
if(LENG_FLAG_1)
{
*SERIAL_RX_DP_1=IMAGE_SBUF_1;
SERIAL_RX_DP_1++;
SERIAL_LENGTH_1--;
if(SERIAL_LENGTH_1==0)
{
START_FLAG_1=0;
FUNC_FLAG_1=0;
SYNC_FLAG_1=0;
LENG_FLAG_1=0;
COMM_INT_FALG_1=0;
SERIAL_R_COMPLETE_1=1;
// system_param.tx_error_timer=0;
}
return;
}
if(FUNC_FLAG_1)
{
SERIAL_LENGTH_1=IMAGE_SBUF_1+2;
SERIAL_RX_DP_1=&RECEIVE_BUFFER_1+3;
*SERIAL_RX_DP_1=IMAGE_SBUF_1;
SERIAL_RX_DP_1++;
LENG_FLAG_1=1;
return;
}
if(SYNC_FLAG_1)
{
RECEIVE_BUFFER_1[2]=IMAGE_SBUF_1;
FUNC_FLAG_1=1;
return;
}
if(START_FLAG_1)
{
if(IMAGE_SBUF_1==FRAME_SYNC_VALUE)
{
RECEIVE_BUFFER_1[1]=IMAGE_SBUF_1;
SYNC_FLAG_1=1;
return;
}
START_FLAG_1=0;
}
if(IMAGE_SBUF_1==FRAME_START_VALUE)
{
RECEIVE_BUFFER_1[0]=IMAGE_SBUF_1;
START_FLAG_1=1;
return;
}
else
{
START_FLAG_1=0;
}
}
if(TI)
{
TI=0;
SERIAL_LENGTH_1--;
if(SERIAL_LENGTH_1!=0)
{
SBUF=*SERIAL_TX_DP_1; SERIAL_TX_DP_1++;
return;
}
// SERIAL_T_COMPLETE_1=1;
}
}
/*------------------------------------------------------------------------------
void serial1_initialize (void);
This function enables SERIAL 1. SERIAL 1 will generate a synchronous interrupt
once every 100Hz (10mS).
------------------------------------------------------------------------------*/
void serial1_initialize (void) // Enable TMR0 for 10mS interrupts
{
//串口1初始化
SCON=0x50; //01010000B ;#50H
//波特率
// TL1=0xD9; //36M 2400 0D9H
// TH1=0xD9;
TL1=BOAT_RATE_9600; //22.1184M 9600 0FAH
TH1=BOAT_RATE_9600; //22.1184M 19200 0FDH
//定时器0初始化
TCON|=0x40; //01000000B ;TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD|=0x20; //00100001B
PCON=0x00; //00000000B
IE|=0x10;
PS=1; //最高优先级
START_FLAG_1=0;
FUNC_FLAG_1=0;
SYNC_FLAG_1=0;
LENG_FLAG_1=0;
COMM_INT_FALG_1=0;
SERIAL_R_COMPLETE_1=0;
}
//0 false
//1 true
unsigned char serial_1_check_sum(void)
{
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -