📄 485.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 + -