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

📄 sci.c

📁 微程序控制器采用ATMEL AVR MEGA162
💻 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 + -