原创 串口接收和发送

2010-5-17 09:36 2444 9 9 分类: MCU/ 嵌入式

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


程序实现功能:用串口调试助手向单片机发送一个16进制数,如00,01,02,。。。。。FF;那
么电路板上的LED灯会反应出发送的这个16进制数的状态。


与此同时,串口调试助手的接收区里会显示串口调试助手向单片机发送的那个16进制数


注:LED灯亮时表示为低电平,LED灯灭时表示为高电平。


注:一次只能发一个16进制数 波特率为4800



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



#include <iom16v.h>
#include <macros.h>



#define LED_DDR     DDRA
#define LED_PORT    PORTA


unsigned char received_data=0xff;//定义一个全局变量,令它初始值为高


unsigned char flag="0";
/***********************************************
             串口初始化子程序
***********************************************/
void INIT_USART(void)
  {
    UCSRB = 0x00; //disable while setting baud rate
    UCSRA = 0x00;
    UCSRC = BIT(URSEL) | 0x06;//设置帧格式: 8个数据位, 1个停止位,无奇偶校验位
    UBRRL = 0xcf; //波特率=4800
    UBRRH = 0x00; //波特率=4800
    UCSRB = 0x98; // /*接收、发送器使能、开接收和发送中断*/


  }
 
/***********************************************
                  初始化MCU
***********************************************/ 
void INIT_MCU(void)
  {
 MCUCR=0x00;
 LED_DDR=0xff;//定义LED端口方向为输出
 LED_PORT=0xff;//定义LED端口初始值为高
 
 _SEI();//开全局中断
  }
 
 
/***********************************************
             发送一个字符子程序
***********************************************/
void send_char(unsigned char input_char)
  {
    UDR="input"_char;
    while ((UCSRA&0x40)!=0x40);//没有发送完就等待
  }
 
/************************************************
                 主程序
/************************************************/
void main(void)
   { 
    
 
  INIT_MCU();//初始化单片机
 
  INIT_USART();//初始化串口
 
  while(1)
    {
      LED_PORT=received_data;//received_data的初始值为高,所以上电时LED不亮
   if(flag==1)//标志位为高时将接收到的数据再发送到串口调试助手那
     {
       send_char(received_data);
    flag="0";
     }
    }
 
   }
  
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
   received_data=UDR;//读取接收的数据
   flag="1";//接收完数据令标志位为高
}
  


  
  
  

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条