在线客服:
yb官网 yb官网
全国服务热线:010-54208600
您的位置:首页 > 新闻中心 >

atmega16应用程序的串行通信(HC0 5)

浏览 78次 来源:【jake推荐】 作者:-=Jake=-    时间:2021-02-22 02:23:55
[摘要] 一般来说,我们自己完的单片机就一对一通信,功能不复杂,因此只需要配置和读取的是RXC、TXC还有异步通信模式下的U2XRXEN和TXEN是打开串口通信的接受和发送数据的功能,否则是无法发送或结束到数据的。

串行通信

串行通讯/ 3775296?fr = aladdin

因为我比较懒atmega16 串口接收中断,所以每个人都去看看串行通信的原理。

串行通讯的寄存器配置

如果您学习了微机原理的课程,您就会知道微控制器不能使用三种寄存器。状态寄存器用于读取状态,控制寄存器是配置参数控制功能,数据寄存器用于存储数据。是的,只要我们正确配置寄存器,就可以使用所需的功能

USART I / O数据寄存器-UDR

在这里插入图片描述

只要您知道最终数据和发送的数据都存储在UDR寄存器中,就足够了yabo娱乐 ,文本太多了,懒得阅读

USART控制和状态寄存器A-UCSRA

在这里插入图片描述

在这里插入图片描述

一般来说亚博yabo ,我们自己的微控制器具有一对一的通讯方式,功能并不复杂,因此只需要在异步通讯模式下配置和读取RXCatmega16 串口接收中断,TXC和U2X

2012年9月16日 济南军区_atmega16 串口接收中断_10月16日守望都市晚间版

USART控制和状态寄存器B-UCSRB

在这里插入图片描述

在这里插入图片描述

此寄存器使用很多东西。首先,RXCIE和TXCIE用于编写中断服务功能。接收和发送字符后,当需要执行某些操作时,必须将其设置为使用中断服务功能。 RXEN和TXEN将打开以串行通信方式接收和发送数据的功能,否则将无法发送或结束数据。一般来说,只需配置这几个

USART控制和状态寄存器C-UCSRC

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通常用于配置UMSEL(选择同步或异步),UPM1:0 :(奇偶校验),USBS(停止位),UCSZ1:0:字符长度,其他基本被忽略

USART波特率寄存器-UBRRL和UBRRH

在这里插入图片描述

在这里插入图片描述

您必须检查信息并计算比特率的计算公式,我很懒

使用HC05

如何使用HC05,其他人已经写得很好,所以我不会写。我使用HC05与手机通讯亚博买球 ,所以比特率是9600亚博lol ,并且使用手机串行调试软件

代码

//串口IO初始化函数
void Serial_PortInit(void)
{
    int BAUD;
    DDRD &= 0XFE;
    DDRD |= 0X02;
    UCSRA |= (1 << U2X);                        //倍速模式
    UCSRB |= ((1 << RXEN )|(1 << TXEN));        //发送接受使能
    UCSRB |= ( (1<< RXCIE)| (1<< TXCIE));       //发送接受结束中断使能
    UCSRB &= ~(1 << UCSZ2);
    UCSRC |= ((1 << UCSZ1)|(1 << UCSZ0));       //8位数据位
    UCSRC &= ~(1 << UMSEL);                     //异步
    UCSRC &= ~((1 << UPM1)|(1 << UPM0));        //无奇偶校验位
    UCSRC &= ~(1 << USBS);                      //1位停止位
    BAUD  = 12;                                 //波特率9600
    UBRRL = (unsigned char)BAUD;
    UBRRH = (unsigned char)(BAUD>>8);
    SREG|=BIT(7);			//开全局中断
}


//串口发送函数
void USART_Send(unsigned char Data)
{
        while(!(UCSRA&(BIT(UDRE))));        //数据寄存器UDR是否为空?
        UDR=Data;                            //UDR赋值
        while(!(UCSRA&(BIT(TXC))));            //数据是否已经发送完毕?
        UCSRA|=BIT(TXC);                    //清除发送完毕标志位
}

/*发送字符串*/
void UART_Send_String(unsigned char* str, unsigned char length)
{
      //unsigned char i=0;
     while(length--)
     {
            USART_Send(*str);
            *str++;
     }
}

//串口接收完毕中断函数
interrupt[USART_RXC] void USART_Received_Ir()
{
        UCSRB &= ~BIT(RXCIE);       //接收完毕中断不使能
        RX_buffer=UDR;              //读取UDR的数据
        if(Rx_Flag)                 //将命令存入数组
            RX_cmd[R_i++] = RX_buffer;
        if(RX_buffer == '#')
        {
            R_i = 0;
            Rx_Flag=1;
            
        }
        //if(RX_buffer == 'o')
        //lcd_puts("hello");
        //lcd_putchar(UDR);
        UCSRB |= BIT(RXCIE);        //接收完毕中断使能
}

在这里插入图片描述

如果你不明白,请问我

老王
本文标签:串口通信,数据寄存器,状态寄存器

推荐阅读

最新评论