📄 sci.c
字号:
#include "sci.h"
static void CommDrvDefaultProc (register BYTE value) { (void) value; };
static void (* EvtProcedure) (register BYTE value) = CommDrvDefaultProc;
// Byte pointers of the ring buffer (FIFO)
#pragma interrupt_handler UART0_RX_interrupt:20
void UART0_RX_interrupt( void )
{
//BYTE a=UDR0;
EvtProcedure(UDR0);
PORTD ^= BIT(STA);
//WriteComm1(a);///////////////////////////
}
#pragma interrupt_handler UART1_RX_interrupt:21
void UART1_RX_interrupt( void )
{
WriteComm0(UDR1);
PORTD ^= BIT(STC);
}
void OpenComm0 (void)
{
}
void WriteComm0 (BYTE c)
{
while( !(UCSR0A & (1<<UDRE0)) );
UDR0=c;
PORTD ^= BIT(STA);
//WriteComm1 (c);//////////////////////test
}
void WriteCommStr0 (char* str)
{
while(*str)
{
WriteComm0(*str);
str++;
}
}
BYTE ReadComm0 ()
{
while( !(UCSR0A & (1<<RXC0)) );
return UDR0;
}
BYTE ReadCommT0(BYTE time)
{
timerCounter = 0;
while(timerCounter<time)
{
if(UCSR0A & (1<<RXC0))
return UDR0;
}
return 0;
}
void OpenComm1 (void)
{
//设置波特率19200
//UBRRL = 0x0B; //set baud rate lo
//UBRRH = 0x00; //set baud rate hi
//设置帧格式: 8个数据位, 1个停止位
//UCSRC = (1<<URSEL)|(3<<UCSZ0);
//接收器与发送器使能
//UCSRB = (1<<RXEN)|(1<<TXEN|1<<RXCIE);
//UCSRB = (1<<RXEN)|(1<<TXEN);
}
void WriteComm1 (BYTE c)
{
while( !(UCSR1A & (1<<UDRE1)) );
UDR1=c;
}
void WriteCommStr1 (char* str)
{
while(*str)
{
WriteComm1(*str);
str++;
}
}
BYTE ReadComm1 ()
{
while( !(UCSR1A & (1<<RXC1)) );
return UDR1;
}
BYTE ReadCommT1(BYTE time)
{
timerCounter = 0;
while(timerCounter<time)
{
if(UCSR1A & (1<<RXC1))
return UDR1;
}
return 0;
}
void setCommEventProc (EventProc Proc)
{
// disable ();
EvtProcedure = Proc;
// enable ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -