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

📄 int_uart.c

📁 多通道电压表数模转换
💻 C
字号:
/****************************
***  RS232 中断模式的通信程序
****************************/

#include  <iom8v.h>
#include <macros.h>
#define   Fosc         4096000          //系统晶振频率 4.096MHz
#define  BAUD            57600            //通信波特率57600bps

unsigned char uartbuf[128],uart_data_start=0,uart_data_end=0; // 128字节uart缓冲区,数据头、尾

/*           UART初始化函数             */
void uart_init(void)
  {
    UCSRB = 0x00;                            //disable while setting baud rate
	UBRRL=8;
	UBRRH=0;
	//UBRRL=(Fosc/16/BAUD-1)%256;              // 设置波特率寄存器低位字节
	//UBRRH=(Fosc/16/BAUD-1)/256;              // 设置波特率寄存器高位字节
	//UBRRL=(Fosc/8/BAUD-1)%256;               // 设置传输速率倍速波特率寄存器低位字节
	//UBRRH=(Fosc/8/BAUD-1)/256;               // 设置传输速率倍速波特率寄存器高位字节
	UCSRA=(1<<U2X);                          // 传输速率倍速
	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // 8位数据+1位STOP位
	UCSRB=(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);    // 发送完成中断允许,允许发送和接受
  }

#pragma interrupt_handler uart0_tx_isr:14    
void uart0_tx_isr(void)                        // 发送完成中断
  {
    //WDR();
	if(uart_data_start != uart_data_end)                 // 如果发送缓冲区有数据
	 {
	  UDR = uartbuf[uart_data_start];
	  uart_data_start++;
	  if(uart_data_start == 128) uart_data_start = 0;
	 }
  }

  
  
/*           字符输出函数             */
void putchar(unsigned char c)
  {
    if((uart_data_end == uart_data_start) && (UCSRA&(1<<UDRE)))  // 缓冲区无数据和发送寄存器UDR空
	 {
	   UDR = c;                                        // 直接向发送寄存器UDR写入数据
	 }   
	 else 
	  {
	   uartbuf[uart_data_end]=c;                            // 向缓冲区写入数据
	   uart_data_end++;
	   if(uart_data_end == 128) uart_data_end = 0;
	  }
  } 
  
/*           字符输入函数             */
unsigned char getchar(void)
  {
    while(!(UCSRA&(1<<RXC)));
	return UDR;
  }
/*           字符串输出函数             */
void putstring(unsigned char *s)
  {
    while(*s)
	  {
	    putchar(*s);
		s++;
	  }
  } 
/*           回车换行字符输出函数             */
void putchar_ENTER(void)
  {
    putchar(0x0d);
	putchar(0x0a);
	
  }
/****************************
***  RS232 中断模式的通信程序
*************************end/

⌨️ 快捷键说明

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