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

📄 init.h

📁 一个AVR单片机常用的子程序库
💻 H
📖 第 1 页 / 共 2 页
字号:
函数:void LED_Wait(void)
返回值:无
备注:



******************************************************************************/

void LED_Wait(void)
{
   LED2;LED00;
//   LED_Run();  

}

/******************************************************************************
功能:LED灯闪动
函数:void LED_Wait_ISP(void)
     void LED_Texting_ISP(void)
返回值:无
备注:



******************************************************************************/

void LED_Wait_ISP(void)
{
         Red_LedON;    delay_nms(200);   Red_LedOFF;   delay_nms(200); 
	 Green_LedON;  delay_nms(200);   Green_LedOFF; delay_nms(200); 
	 Red_LedON;    delay_nms(200);   Red_LedOFF;   delay_nms(200); 
	 Green_LedON;  delay_nms(200);   Green_LedOFF; delay_nms(200); 
	 Red_LedON;    delay_nms(200);   Red_LedOFF;   delay_nms(200); 
	 Green_LedON;  delay_nms(200);   Red_LedOFF;   delay_nms(200); 
//   LED_Run();  
}
void LED_Texting_ISP(void)
{
         Green_LedON;//delay_nms(100);  Green_LedOFF;
	 Red_LedON;    delay_nms(200);  Red_LedOFF;   delay_nms(200); 
	 Red_LedON;    delay_nms(200);  Red_LedOFF;   delay_nms(200); 
	 Red_LedON;    delay_nms(200);  Red_LedOFF;   delay_nms(200); 
}

/******************************************************************************
功能:LED灯跑马观花
函数:void LED_Run(void)
返回值:无
备注:



******************************************************************************/
void LED_Run(void)
{
  uint i;
   for (i=5;i>0;i--){LED1;LED12;LED23;LED34;LED41;}
   for (i=5;i>0;i--){LED1;LED14;LED43;LED32;LED21;}
   for (i=4;i>0;i--){LED1;LED14;LED2;LED23;LED3;LED32;LED4;LED41;}
   for (i=4;i>0;i--){LED1;LED13;LED2;LED24;LED3;LED31;LED4;LED42;}
   for (i=3;i>0;i--){LED1;LED12;LED2;LED21;LED2;LED23;LED3;LED32;LED3;LED34;LED4;LED43;LED4;LED41;LED1;LED14}
   for (i=3;i>0;i--){LED1;LED14;LED4;LED41;LED4;LED43;LED3;LED34;LED3;LED32;LED2;LED23;LED2;LED21;LED1;LED12}
}


/******************************************************************************
功能:设置波特以及串口中断相关函数
函数:void USART_InitM1681( unsigned int baud )
     void USART_InitM1682( unsigned int baud )
	 #pragma interrupt_handler uart0_rx_isr_m16:12
	 #pragma interrupt_handler uart0_tx_isr_m16:14
返回值:无
备注:Fosc   晶振  如:4000000  4MHz
     baud   传输速度  19200
     1681意思是8位 1停止位
     1682意思是8位 2停止位
#define F_CPU     3686400
#define F_CPU     4000000
//其他根据需要填写必须要定义的                       
******************************************************************************/
#define F_CPU     3686400
void USART_InitM1681( unsigned int baud )
{
unsigned int tmp;
//设置波特率
    tmp= F_CPU/baud/16-1;
	//tmp= F_CPU3864/baud/16-1;
    UBRRH = (unsigned char)(tmp>>8);
    UBRRL = (unsigned char)tmp;
//接收器与发送器使能//
  //  UCSRB = (1<<RXEN)|(1<<TXEN);
//接收器与发送器使能及接收中断使能
	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//接收器与发送器使能及收发中断使能
//	UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
// 设置帧格式: 8 个数据位, 1 个停止位//
    UCSRC = (1<<URSEL)|(3<<UCSZ0);
}

void USART_InitM1682( unsigned int baud )
{
unsigned int tmp;
// 设置波特率//
    tmp= F_CPU/baud/16-1;
    UBRRH = (unsigned char)(tmp>>8);
    UBRRL = (unsigned char)tmp;
//接收器与发送器使能//
 //   UCSRB = (1<<RXEN)|(1<<TXEN);
 //接收器与发送器使能及接收中断使能
	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//接收器与发送器使能及收发中断使能
//	UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
//设置帧格式: 8 个数据位, 2 个停止位//
UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
}

/*以下为接收及发送相关中断函数,使用时调用即可
//中断向量号很重要不能搞错


uint tmp;
#pragma interrupt_handler uart0_rx_isr_m16:12
void uart0_rx_isr_m16(void)
{
  tmp=USART_Receive8();
  USART_Transmit8(tmp);
  //有数据接收时的提示红灯闪动
  if(tmp=='a')
	{
	USART_Transmit8('O');
	USART_Transmit8('K');
	USART_Transmit_2();
	} 
   Green_LedOFF;
	for(tmp=0;tmp<3;tmp++){
    Red_LedOFF;
    delay_nms(300);
	Red_LedON;
	delay_nms(300);} 		  
}

#pragma interrupt_handler uart0_tx_isr_m16:14
void uart0_tx_isr_m16(void)
{    //有数据发出时的提示绿灯闪动
    Red_LedOFF;
	for(tmp=0;tmp<3;tmp++){
    Green_LedON;
    delay_nms(300);
	Green_LedOFF;
	delay_nms(300);}
  //  USART_Transmit8('O');///如果再次发送数据则会进入死循环。不建议
	//USART_Transmit8('K');
	//USART_Transmit8('?');	  
}


*/
/******************************************************************************
功能:外中断定义
函数:#pragma interrupt_handler INT0_isr_m16:2
     #pragma interrupt_handler INT1_isr_m16:3
返回值:无
备注:
包括初始化程序:void INT0_init(void)//外中断0使能
               void INT1_init(void)//外中断1使能
			   void INT01_init(void)//外中断0和1使能
			   
特别要注意的是:PORTD = 0xff;如果低电平触发则初始化时要高电平。

******************************************************************************/
void INT0_init(void)//外中断0使能
{ 
  CLI();
  MCUCR = 0x00;//外中断01低电平触发
  GIFR=(1<<INTF1)|(1<<INTF0);//GIFR=0x00;通用中断标志寄存器
  GICR=(1<<INT0);
  SEI();
}
void INT1_init(void)//外中断1使能
{ 
  CLI();
  MCUCR = 0x00;//外中断01低电平触发
  GIFR=(1<<INTF1)|(1<<INTF0);//GIFR=0x00;通用中断标志寄存器
  GICR=(1<<INT1);
  SEI();
}
void INT01_init(void)//外中断0和1使能
{ 
  CLI();
  MCUCR = 0x00;//外中断01低电平触发
  GIFR=(1<<INTF1)|(1<<INTF0);//GIFR=0x00;通用中断标志寄存器
  GICR=(1<<INT1)|(1<<INT0);
  SEI();
}
/*
#pragma interrupt_handler INT0_isr_m16:2
void INT0_isr_m16(void)
{
   //中断程序
}
#pragma interrupt_handler INT1_isr_m16:3
void INT1_isr_m16(void)
{
   //中断程序
}
*/



/******************************************************************************
功能:串口发送
函数:void USART_Transmit8( unsigned char data )
     void USART_Transmit9( unsigned char data )
     void USART_Transmit_2( void ) 发送Hello
返回值:无
备注:



******************************************************************************/
void USART_Transmit8( unsigned char data )
{ 
/*检空发送标志*/
while ( !( UCSRA & (1<<UDRE)) ); 
/*发送数据*/
UDR = data;
}

void USART_Transmit9( unsigned int data )
{ 
/*检空发送标志 */
while ( !( UCSRA & (1<<UDRE)));
/* 将第9位复制到TXB8 */
UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8); 
/*发送数据 */
UDR = data;
}
void USART_Transmit_2( void )
{
    while ( !( UCSRA & (1<<UDRE)) );
    UDR = 'H';
    while ( !( UCSRA & (1<<UDRE)) );
    UDR = 'e';
    while ( !( UCSRA & (1<<UDRE)) );
    UDR = 'l';
    while ( !( UCSRA & (1<<UDRE)) );
    UDR = 'l';
    while ( !( UCSRA & (1<<UDRE)) );
    UDR = 'o';
} 

/******************************************************************************
功能:串口接收
函数:unsigned int USART_Receive8( void )
     unsigned int USART_Receive9( void )
返回值:无
备注:



******************************************************************************/
unsigned int USART_Receive8( void )
{
     /*等待 数据*/
     while ( !(UCSRA & (1<<RXC)) );
     return UDR;
}

unsigned int USART_Receive9( void )
{
     unsigned char status, resh, resl;
     /*等待 数据*/
     while ( !(UCSRA & (1<<RXC)) );
/*收到数据、状态及第9位*/
/* from buffer */
     status = UCSRA;
     resh = UCSRB;
     resl = UDR;
/*如果出错返回1 */
     if ( status & (1<<FE)|(1<<DOR)|(1<<PE) ){return -1;}
/*过滤第9位然后返回*/
     resh = (resh >> 1) & 0x01;
     return ((resh << 8) | resl);
}

/******************************************************************************
功能:串口接收防止缓冲器FIFO被刷新
函数:void USART_Flush( void )
返回值:无
备注:



******************************************************************************/

void USART_Flush( void )
{
unsigned char dummy;
while ( UCSRA & (1<<RXC) ) dummy = UDR;
}

⌨️ 快捷键说明

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