原创 串口通信一

2010-5-17 09:19 1535 8 17 分类: MCU/ 嵌入式

/*********************************************************
  程序实现功能:单片机向串口调试助手连续发送256个数,范围
0-255,串口调试助手以16进制的形式显示在接收区。


注:波特率要设定为4800,选择COM1,以16进制的形式显示
**********************************************************/
 
 
#include <iom16v.h>
#include <macros.h>


 
/**********************************************
                  延时函数
**********************************************/
void delay_us(unsigned int delay_counter)//延时1us
  {
    do
  {
   delay_counter--;
  }
 while(delay_counter>1);
  }
 
void delay_ms(unsigned int delay_counter)//延时1ms
  {
    while(delay_counter!=0)
   {
     delay_us(1000);
  delay_counter--;
   }
  }
/***********************************************
             串口初始化子程序
***********************************************/
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 = 0x18; // /*接收、发送器使能*/


  }
 
 
/***********************************************
             发送一个字符子程序
***********************************************/
void send_char(unsigned char input_char)
  {
    UDR="input"_char;
    while ((UCSRA&0x40)!=0x40);//没有发送完就等待
  }
/***********************************************
                  初始化MCU
***********************************************/ 
void INIT_MCU(void)
  {
 MCUCR=0x00;
  }
 
/************************************************
                 主程序
/************************************************/
void main(void)
   { 
     unsigned int i;
 
  INIT_MCU();//初始化单片机
 
  INIT_USART();//初始化串口
 
  for(i=0;i<=255;i++)
    {
     send_char(i);
  delay_ms(5);//延时一下,可以减少误码率
    }
  while(1);
   }

文章评论9条评论)

登录后参与讨论

用户1623314 2010-5-19 19:47

发送0XAA 0X11 0X34 0X26 接收到0XAA 0X11 0X34 0X26 在接收完将0X11和0X34进行异或后等于0X25 与0X26不等 则证明接收出错 丢弃掉

用户1623314 2010-5-19 19:41

9位数据位模式一般用于多机通信 第9位用来判断是地址还是数据 (深入浅出AVR里面讲得比较详细) 而且在用的时候一定要先读写第9位 再读写其它8位

用户1623314 2010-5-19 19:38

在串口模块功能下,RXD和TXD功能将接替PD0 PD1的通用端口功能,这两个端口在初始化的时候设置为输入或输出都可以...

用户1623314 2010-5-17 09:33

用调试助手记得勾上 十六进制显示和十六进制发送 不然接到的乱码

用户1623314 2010-5-17 09:32

用串口调试助手如果发的是12位的二进制数 那么只接收到高8位 4~12位被收到

用户1623314 2010-5-17 09:24

UDR既是读寄存器 也是写寄存器

用户1623314 2010-5-17 09:24

不知道为什么不用引用eeprom.h

用户1623314 2010-5-17 09:22

说明一下 上面的程序的晶振是16M的

用户1623314 2010-5-17 09:21

不用设置IO输出输入特性吗? 不是很懂
相关推荐阅读
用户1623314 2011-01-22 14:52
STM32入门系列教程之十五《如何使用SecureCRT串口终端软件》
attachment download...
用户1623314 2011-01-22 14:51
STM32入门系列教程之十四《STM32的USB下载调试》
attachment download...
用户1623314 2011-01-22 14:50
STM32入门系列教程之十三《点亮LCD液晶屏》
attachment download...
用户1623314 2011-01-22 14:49
STM32入门系列教程之十二《实时时钟RTC编程》
attachment download...
用户1623314 2011-01-22 14:48
STM32入门系列教程之十一《Systick编程》
attachment download...
用户1623314 2011-01-22 14:47
STM32入门系列教程之十《定时器与蜂鸣器》
attachment download...
我要评论
9
8
关闭 站长推荐上一条 /2 下一条