⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart1.c

📁 充电车的控制板程序
💻 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 + -