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

📄 uart程序.txt

📁 uart源代码
💻 TXT
字号:
带有可选回车换行符输出的MEGA162的双UART程序
发送采用查询方式,接收采用中断方式。晶振7.3728M,无分频。 

unsigned char uartrbuffer[100];                         //uart接受缓存100字节 
unsigned char uarttbuffer[50];                          //uart发送缓存50字节 
int stringlon=0; 

                                                        //UART0 initialisation 
                                                        //desired baud rate:115200 
                                                        //actual baud rate:115200 (0.0%) 
                                                        //char size: 8 bit 
                                                        //parity: Disabled 
void uart0_init(void) 
{ 
UCSR0B = 0x00;                                          //disable while setting baud rate 
UCSR0A = 0x00;                                          //disable while setting baud rate 
UBRR0L =0x03;                                           //set baud rate 
UBRR0H=0x00; 
UCSR0C =(1<<URSEL0)|0b00000110; 
UCSR0B=0b10011000;                                      //enable 
} 

#pragma interrupt_handler uart0_rx_isr:20 
void uart0_rx_isr(void) 
{ 
                                                        //uart has received a character in UDR 
uartrbuffer[stringlon]=UDR0; 
stringlon++; 
urflag=1; 
if(stringlon>=100) 
  stringlon=0; 
} 


                                                        //UART1 initialisation 
                                                        // desired baud rate: 4800 
                                                        // actual: baud rate:4800 (0.0%) 
                                                        // char size: 7 bit 
                                                        // parity: Even 
void uart1_init(void) 
{ 

UCSR1B = 0x00; //disable while setting baud rate 
UCSR1A = 0x00; //disable while setting baud rate 
UCSR1C = 0b10100100; 
UBRR1L =0x5F; //set baud rate 
UBRR1H =0x00; 
UCSR1B = 0b10011000; //enable 
} 

#pragma interrupt_handler uart1_rx_isr:21 
void uart1_rx_isr(void) 
{ 
//uart has received a character in UDR 
uartrbuffer[stringlon]=UDR1; 
stringlon++; 
urflag=1; 
if(stringlon>=100) 
  stringlon=0; 
} 

//*******************************************uart字符输出*************************** 
void putchar(int upart,unsigned char charx)       
                                                        //upart表示UART标号,0表示UART0,其他表示UART1;char0表示要发出的数据; 
{ 
if(upart==0) 
  { 
  while(!(UCSR0A&(1<<UDRE0))); 
   UDR0=charx; 
  } 
else 
  { 
  while(!(UCSR1A&(1<<UDRE1))); 
   UDR1=charx; 
  } 
} 

//******************************************uart字符输出函数结束*************** 


//*******************************带可选回车换行的字符串输出函数****** 
//upart表示发出数据使用的端口号0表示使用UART0,其他表示使用UART1; 
//*s表示要发出数据的指针 
//senter0表示结尾是否使用0x0d,0表示使用,其他表示不使用 
//senter1表示结尾是否使用0x0a,0表示使用,其他表示不使用 
//stringl表示所要输出的字符串长度,0表示无限制 
void puts(unsigned char *s,int upart,int senter0,int senter1,int stringl) 
{ 
stringlon=0; 
if(upart==0) 
  { 
  if(stringl==0) 
   { 
   while(*s) 
     { 
     outchar=*s;  
     putchar(0,outchar); 
     s++; 
     } 
   if(senter0==0) 
     putchar(0,0x0d); 
   if(senter1==0) 
     putchar(0,0x0a); 
   } 
  else 
   { 
   while(stringlon<=(stringl-1)) 
     { 
     outchar=*(s+stringlon); 
     putchar(0,outchar); 
     stringlon++; 
     } 
   if(senter0==0) 
     putchar(0,0x0d); 
   if(senter1==0) 
     putchar(0,0x0a);    
   } 
  } 
else 
  { 
  if(stringl==0) 
   { 
   while(*s) 
     { 
     outchar=*s; 
     putchar(1,outchar); 
     s++; 
     } 
   if(senter0==0) 
     putchar(1,0x0d); 
   if(senter1==0) 
     putchar(1,0x0a); 
   } 
  else 
   { 
   while(stringlon<=(stringl-1)) 
     { 
     outchar=*(s+stringlon); 
     putchar(1,outchar); 
     stringlon++; 
     } 
   if(senter0==0) 
     putchar(1,0x0d); 
   if(senter1==0) 
     putchar(1,0x0a);    
   } 
  } 


} 
//************************************函数结束************************************ 

字符串输出函数使用方法: 
比如要在UART0输出“OURAVR 我们的AVR!”,并且带有回车,换行符, 
请使用如下语句: 
puts("OURAVR 我们的AVR!",0,0,0,0); 
如果要输出确定长度的字符串,则请这样使用: 
比如要在UART1输出数组String[10]中的10个字符,不带有回车换行符。 
puts(String,1,1,1,10); 

⌨️ 快捷键说明

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