原创 串口通信二

2010-5-17 09:27 1468 10 10 分类: MCU/ 嵌入式

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


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


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


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



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


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



#define LED_DDR     DDRA
#define LED_PORT    PORTA


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



/***********************************************
             串口初始化子程序
***********************************************/
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 main(void)
   { 
    
 
  INIT_MCU();//初始化单片机
 
  INIT_USART();//初始化串口
 
  while(1)
    {
      LED_PORT=received_data;//received_data的初始值为高,所以上电时LED不亮
    }
 
   }
  
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
   received_data=UDR;//读取接收的数据
}  

文章评论0条评论)

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