📄 uart1.c
字号:
//引脚定义说明: PD2(RXD1),PD3(TXD1),PD4(TRE1)
#include "uart1.h"
#define TRE1 4
#define SET_485_TX() PORTD &= ~(1<<TRE1)
#define SET_485_RX() PORTD |= (1<<TRE1)
#pragma interrupt_handler uart1_rx_isr:31
#pragma interrupt_handler uart1_udre_isr:32
#pragma interrupt_handler uart1_tx_isr:33
//-------------------------------------------------------
extern void can1_handle (void);
unsigned char rx1_buf[14];
unsigned char tx1_buf[14];
unsigned char rx_ok1=0;
unsigned char tx_en1=1;
unsigned char rx1_num=0;
unsigned char rx1_step=0;
unsigned char tx1_step=0;
unsigned char uart_reset_count1=0;
//unsigned char tx1_period_en;
/***************/
// 接收中断
/*******/
void uart1_rx_isr(void)
{
if(rx_ok1)return;
uart_reset_count1=2;
rx1_buf[rx1_step]=UDR1;
rx1_step++;
if(rx1_step>13)
{
rx_ok1=1;
rx1_step=0;
}
}
/**************************/
//寄存器空中断
/*************************/
void uart1_udre_isr(void)
{
UDR1=tx1_buf[tx1_step];
if(++tx1_step>13)
{
tx1_step=0;
UCSR1B&=~(1<<UDRIE1);
UCSR1B|=1<<TXCIE1;
};
}
/***************/
//发送完成中断
/****************/
void uart1_tx_isr(void)
{
SET_485_RX();
UCSR1B&=~(1<<TXCIE1);
UCSR1B|=(1<<RXEN1)|(1<<RXCIE1);//允许接收,接收结束中断
tx_en1=1;
}
//----------------------------------
void uart1_handle (void)
{
if(rx_ok1)
{
can1_handle();
rx_ok1=0;
};
if(!uart_reset_count1)rx1_step=0;//接收超时处理
}
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -