⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmega8串口通信.c

📁 AVR例子程序和protues仿真
💻 C
字号:
 
 #include <avr/interrupt.h>
 #include <avr/io.h>
 #include <avr/signal.h>
 #define  uchar  unsigned char 
 #define  uint unsigned int
 /******************************************/
  void port_init();
  void delayms(uint k);
  void uart();
  unsigned char Getchar(void);
  void sendchar(uchar *s);
    volatile uchar Buf=0; 
  uchar RecvBuf[16]={0};
  uchar SendBuf[16]={119,121,123,125,127,129,131,189,199,212,222};

  uchar  aaa[64]={3,121,3,121,6,252,3,121,3,121,6,252,3,121,6,252,
              3,121,6,252,3,121,3,121,6,252,3,121,3,121,6,252,
              6,252,3,121,3,121,3,121,6,252,3,121,6,252};
 /******************************************/
 int main()
 {
  port_init();
  uart();
  sei();
  delayms(500);
  //sendchar("AVR-ARM RS232 TEST CODE");
  PORTC=0xfd;
  delayms(1000);
  sendchar(aaa);
   while(1)
  {
   if(Buf=='a')
   {
     Buf='0';
     sendchar("shaozhanyu");
	 sendchar(SendBuf);
     PORTC=0xfc;
     delayms(5000);
   }
   if(Buf=='b')
   {
    Buf='0';
    sendchar("shaozhanyu2");
     PORTC=0xfd;
     delayms(5000);
   }

  }
 }
 /******************************************/
 void port_init()
 {
  DDRC=0xFF;
  PORTC=0x7e;
 }

 /******************************************/
  void uart()   //特别注意写UCSRC时,要把最高位置1,否则写不进去
  {
    UCSRB  = 0x00;     //先不使能发送接收
    UCSRA  = 0x00;     //Bit1为1则倍速发送,这里不倍速
    UCSRC  = 0x86;   //8位数据格式,异步方式,URSEL=1时,写UCSRC寄存器
    UBRRL  = 51;     //波特率:9600 Bps 8MHZ时钟 51 1MHZ  6  2MHZ 12 4MHZ 25
    UBRRH  = 0x00;     //误差率:0.156%
    UCSRB  = 0x98;  //使能发送接收,使能接收中断
  }

    //-----------------------------------------------------------
	//串口接收字节子程序
	//-----------------------------------------------------------
	unsigned char Getchar(void)
	{
	   while(!(UCSRA& (1<<RXC)));
	   return UDR;
	}
  /******************************************/
  void sendchar(uchar *s)
  {
   while (*s)
   {
      while (!(UCSRA&(1<<UDRE)));
      UDR=*s;
      s++;
   }
   while (!(UCSRA&(1<<UDRE)));
      UDR=0x0a;   //回车换行
   while (!(UCSRA&(1<<UDRE)));
      UDR=0x0d;
  }


  SIGNAL(SIG_UART_RECV)
  {
     Buf=UDR; 
  }

    /******************************************/
 void delayms(uint k)
 {
  uint i,j;
   for(i=0;i<k;i++)
  {
    for(j=0;j<100;j++)
     {;}
   }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -