/***********************************************************************************
程序实现功能:用串口调试助手向单片机发送一个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条评论)
登录后参与讨论