[问答] USART test---ATMEGA128

本帖最后由 一只耳朵怪 于 2018-6-26 11:14 编辑

   #include<avr/io.h>
#define fosc 16000000UL //晶振16MHZ
#define baud 9600//波特率
#define com0


void uart0_init(void)
{
     UCSR0B = 0x00; //disable while setting baud rate
     UCSR0A = 0x00;
     UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
     UBRR0L=(fosc/16/(baud+1))%256;
     UBRR0H=(fosc/16/(baud+1))/256;
     UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
}


void uart1_init(void)
{
     UCSR1B = 0x00; //disable while setting baud rate
     UCSR1A = 0x00;
     UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//8bit+1bit stop
     UBRR1L=(fosc/16/(baud+1))%256;
     UBRR1H=(fosc/16/(baud+1))/256;
     UCSR1B =(1<<RXEN1)|(1<<TXEN1);//RXCEN TXCEN
}


void putchar0(unsigned char c)
{
    while (!(UCSR0A&(1<<UDRE0)));
    UDR0=c;   
}


void putchar1(unsigned char c)
{
    while (!(UCSR1A&(1<<UDRE1)));
    UDR1=c;   
}


unsigned char getchar0(void)
{
    while(!(UCSR0A& (1<<RXC0)));
    return UDR0;
}


unsigned char getchar1(void)
{
    while(!(UCSR1A& (1<<RXC1)));
    return UDR1;
}


void puts0(char *s)
{
    while (*s)
    {
        putchar0(*s);
        s++;
    }
    putchar0(0x0a);
    putchar0(0x0d);
}


void puts1(char *s)
{
    while (*s)
    {
        putchar1(*s);
        s++;
    }
    putchar1(0x0a);
    putchar1(0x0d);
}


int main(void)
{
    unsigned char i;
    #ifdef com0
    uart0_init();
    puts0("HELLO!");
    #else
    uart1_init();
    puts1("HELLO!");
    #endif
    while(1)
    {
    #ifdef com0
        if (getchar0()=='t')//按键盘t键开始测试
        {
            puts0("test ok!");
            for (i=0;i<10;i++)
           {
               putchar0(0x30+i);
           }
           putchar0(0x0a);
           putchar0(0x0d);   
        }
       #else
      if (getchar1()=='t')//按键盘t键开始测试
        {
         puts1("test ok!");
      for (i=0;i<10;i++)
       {
        putchar1(0x30+i);
       }
         putchar1(0x0a);
         putchar1(0x0d);   
        }  
  #endif      
}
}

//USART test for atmega128         
                                                                                                                                                         

0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /9 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 粤ICP备14022951号-2 )

GMT+8, 2018-7-18 20:42 , Processed in 0.105977 second(s), 25 queries , Memcache On.

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表