这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » AVR ATMEGA16 MCU DIY进程-串口显示

共2条 1/1 1 跳转至

AVR ATMEGA16 MCU DIY进程-串口显示

菜鸟
2011-12-22 10:00:41     打赏

       马上到年终了,事情比较多。年终总结了,项目报告了,压的很多事情都顾不过来,也没太多的时间在DIY上了,但是为了不辜负EEPW对MCUDIY的初衷,还是适当的更新些内容,以利于大家知识分享吧。

       时间紧,所以一切从简了,硬件功能我这里实现的不多,板子就焊了串口,按键,小液晶,led灯,蜂鸣器,晶振等常用的器件。这些都是以前板子上拆下的,都能用,没办法,工作中没工夫去购买器件啊。
      针对串口写了点简单程序,可以使用,就给大家分享下。


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

//-----------------------------------------------------------
//串口初始化子程序
//字符长度:8位
//奇偶校验:禁止
//通讯模式:异步
//-----------------------------------------------------------
void Uart_Init(void)
{
    UCSRB  =  0x00;     //disable while setting baud rate
    UCSRA  =  0x00;     //Bit1为1则倍速发送
    UCSRC  =  0x86; 
    UBRRL  =  0x33;     //波特率:9600 Bps
    UBRRH  =  0x00;     //误差率:0.156%
    UCSRB  =  0x18; 
}

//-----------------------------------------------------------
//串口接收字节子程序
//-----------------------------------------------------------
unsigned char Getchar(void)
{
   while(!(UCSRA& (1<<RXC)));
   return UDR;
}

//-----------------------------------------------------------
//串口发送字节子程序
//-----------------------------------------------------------
void Putchar(unsigned char c)
{
   while (!(UCSRA&(1<<UDRE)));
   UDR=c;
}

//-----------------------------------------------------------
//串口发送字符串子程序
//-----------------------------------------------------------
void Putstr(char *s)
{
   while (*s)
   {
      Putchar(*s);
      s++;
   }
}

//-----------------------------------------------------------
//串口发送字符串子程序(带有换行符)
//-----------------------------------------------------------
void Puts(char *s)
{
   while (*s)
   {
      Putchar(*s);
      s++;
   }
   Putchar(0x0a);   //回车换行
   Putchar(0x0d);
}



//-----------------------------------------------------------
//主函数
//-----------------------------------------------------------
void main(void)
{
   unsigned char i=0;

   Uart_Init();

   Puts("AVR-ARM RS232 TEST CODE");
   Puts("Http://www.EEPW.com");
   Puts("ATMega16 UART TEST");
   Putchar(0x0a);
   Putchar(0x0d);

   while(1)
   {
      i=Getchar();
      if (i!=0)    //发送0x0F开始测试
      {
        
         Puts("AVR-ARM RS232 TEST CODE");
         Puts("EEPW MCU DIY!");
         Puts("ATMega16 UART TEST");
         Putchar(0x0a);
         Putchar(0x0d);
      }
   }
}

以上UART接收发送均采用查询方式,也可以采用中断方式,自己学习了。




关键词: ATMEGA16     进程     串口     显示     -------    

菜鸟
2012-01-28 14:37:12     打赏
2楼

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]