sci._c

来自「微程序控制器采用ATMEL AVR MEGA162」· _C 代码 · 共 126 行

_C
126
字号
#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(STC);
	//WriteComm1(a);///////////////////////////
}


#pragma interrupt_handler UART1_RX_interrupt:21

void UART1_RX_interrupt( void )
{
	WriteComm0(UDR1);
}


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 + =
减小字号Ctrl + -
显示快捷键?