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

📄 485.c

📁 458通讯
💻 C
字号:
#include "485.h"
//========================================================
//    串口初始化
//========================================================
void comInit(void)                           
{
	//UCSRB=0x98;
	UCSRB = 
	(1<<RXEN)/*接收使能*/|(1<<TXEN)/*发送使能*/;
	UBRRL=25;//25;//25; // baud=9600 UBRR=CK/(baud*16) -1 for 脉冲
}
void USART_Transmit( unsigned char usrdata )
{  
	while (!( UCSRA & (1<<UDRE)) );
	UDR = usrdata;
}

//========================================================
//   发送一个字符串
//========================================================
void t_485(unsigned char *s)
{
	set_485_enable();
	while(*s!='\n')
	{
	    USART_Transmit(*s++);
	}
	//*****************//
	delay_us(1350);              //等末尾的停止位发送完
	//*****************//
	clr_485_disable();
}
//========================================================
//   485接收一个字符函数
//========================================================
uchar r_485(void)
{
//    clr_485_disable();
    uchar num;
	while(!(UCSRA & (1<<RXC)));
	delay_us(50);
	num = UDR;
	return num;
}
//========================================================
//  接收中断响应禁止
//========================================================
inline void CLOSE_USART1_ReINTERRUPT(void)
{
    UCSRB &= ~(1<<RXCIE);                    //
}

inline void OPEN_USART1_ReINTERRUPT(void)
{
    UCSRB |= (1<<RXCIE);                     
	//接收中断响应使能
}
//=========================================================

//=========================================================
inline void OPEN_WaitResponsionClk(void)
{
	TCNT0 = 0x00;                             
	//从00-ff
    TCCR0 = 0b00000100;                       
	//256分频
	TIMSK |= (1<<TOIE0);                     
	//使能T0中断   4M晶振,每隔0.01632s中断一次
}
//================================================================
inline void CLOSE_WaitResponsionClk(void)
{
    TIMSK &= ~(1<<TOIE0);
	TCCR0 &= 0b11111000;
}
//================================================================
inline void CLOSE_TIMER1(void)
{
    TIMSK &= ~(1<<TOIE1);                    
	//禁止T1溢出中断
    TCCR1B &= 0b11111000;                     
	//0 0 0 无时钟源 (T/C 停止)
}
//================================================================
inline void OPEN_TIMER1(void)
{
    TCCR1B = 0b00000001;     
	//无分频
    TCNT1 = 0xf70c;          
	//4M时0.5个字符-0.000573s产生一个中断
	TIMSK |= (1<<TOIE1);    
	//使能T1溢出中断  
}
//================================================================
//                      us级延时   
//================================================================
void delay_us(int time)
{
    do
	time--;
    while(time>1);
}
//================================================================
//                      ms级延时
//================================================================
void delay_ms(unsigned int time)
{
    while(time!=0)
	{
	    delay_us(1000);
		time--;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -