• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: AVR  串口例程  

资源简介

马潮老师 AVR串口例程代码 Atmega16

资源截图

代码片段和文件信息

/*****************************************************
File name           : demo_14_1.c
Chip type           : ATmega16L
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
#include 

#define UART_BEGIN_STX  0xBB
#define UART_END_STX    0xEE

#define FRAMING_ERROR (1<#define PARITY_ERROR (1<#define DATA_OVERRUN (1<#define DATA_REGISTER_EMPTY (1<#define RX_COMPLETE (1<
#define TX_BUFFER_SIZE 5
unsigned char tx_buffer[TX_BUFFER_SIZE];         // USART Transmitter buffer
unsigned char tx_wr_indextx_rd_indextx_counter;

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
    if (tx_counter)
    {
        --tx_counter;
        UDR=tx_buffer[tx_rd_index];
        if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
    }
}

void putchar(unsigned char c)
{
    while (tx_counter == TX_BUFFER_SIZE);
    #asm(“cli“)
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
    {
        tx_buffer[tx_wr_index]=c;
        if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
        ++tx_counter;
    }
    else
        UDR=c;
    #asm(“sei“)
}

#define RX_BUFFER_SIZE 5
unsigned char rx_buffer[RX_BUFFER_SIZE];     // USART Receiver buffer
unsigned char rx_counter;
bit Uart_RecvFlag;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
    unsigned char statusdata;
    status = UCSRA;
    data = UDR;
    if (!Uart_RecvFlag)     // 判断是否允许接收一个新的数据包
    {
        if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
        {
            rx_buffer[rx_counter] = data;
            rx_counter++;
            switch (rx_counter)
            {
                case 1:     // 检验起始字符
       

评论

共有 条评论