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

📄 usart.c

📁 MEGA16 开发包3
💻 C
字号:
//Project : USART
//Writer :youhu
//ICC-AVR application builder : 2007-4-24 16:45:33
// Target : M16
// Crystal: 8.0000Mhz
// USART initialize
// desired baud rate: 115200
// actual: baud rate:111111 (3.7%)
// char size: 8 bit
// parity: Disabled

#include <iom16v.h>
#include <macros.h>
unsigned char mes;

void uart_init(void)
{
 UCSRB = 0x00;                 
 UCSRA = 0x03;                 //异步模式,禁止奇偶校验,8位数据帧
 UCSRC = BIT(URSEL) | 0x06;    
 UBRRL = 0x67;                 //波特率设置为9600
 UBRRH = 0x00;             
 UCSRB = 0xF8;                 //允许串口发送和接收,接收和发送中断使能
}

/*
void USART_Transmit( unsigned char data )
{
  while ( !( UCSRA & (1<<UDRE)) );          
  UDR = data;                                
}
*/
unsigned char USART_Receive( void )          //串口从主机接收数据
{

while ( !(UCSRA & (1<<RXC)) );                // 等待接收数据

return UDR;                                   // 从缓冲器中获取并返回数据
}

/*
#pragma interrupt_handler uart0_rx_isr:12     //接收中断函数
void uart0_rx_isr(void)
{
//wait a task; 
}
*/
#pragma interrupt_handler uart0_tx_isr:14     //发送中断函数
void uart0_tx_isr(void)
{
  mes = USART_Receive();
  while ( !( UCSRA & (1<<UDRE)) );            // 等待发送缓冲器为空 
  UDR = mes;                                  // 将数据放入缓冲器,发送数据
}

void init_devices(void)    //初始化各中断
{ 
 CLI(); 
 uart_init();
 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; 
 SEI(); 
}


void main(void)
{ 
 init_devices();
}

⌨️ 快捷键说明

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