Atmega16单片机串口通信_串口= udr-程序员宅基地

技术标签: 串口通信  C语言  寄存器  AVR单片机  ATmega16  单片机  

Atmega16单片机串口通信

本篇文章参考自叶大鹏老师于2008年4月5日完成的UART通信PPT制作而成。

串口通信需要使用到的内部寄存器

在进行程序编写前需要对16单片机中的寄存器的作用和使用方法有所了解,下面为16单片机串口通信使用到的几个寄存器:

  1. USART I/O 数据寄存器 - UDR (UDR寄存器用于数据在传输中的存储):
    UDR寄存器用于数据在通信中的存储
  2. USART控制和状态寄存器A - UCSRA
    UCSRA寄存器
    寄存器中位的定义
    寄存器中位的定义
void uart_sendB(uchar data)        /*发送函数*/
{
    while(!(UCSRA&(BIT(UDRE))));   //等待发送缓冲器为空
    UDR=data;                      //将数据存入UDR寄存器
}
  1. USART控制和状态寄存器B - UCSRB
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
void uart_rx(void)              /*串口接收函数*/
{
    UCSRB&=~BIT(RXCIE);         //校验数据是否传输完成,关闭接收中断
    rdata=UDR;                  //将接收到的数据存入rdata
    flag=1;                     //标志位至1
    UCSRB|=BIT(RXCIE);          //接收完毕,开启中断
}
  1. USART控制和状态寄存器C - UCSRC
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. USART波特率寄存器 - UBRRL和UBRRH
    在这里插入图片描述
    在这里插入图片描述
#define mclk 8000000

    baud=mclk/16/baud-1;    //程序片段
    UBRRL=baud;             //设置波特率,先写低位再写高位
    UBRRH=baud>>8;          //设置波特率,先写低位再写高位

程序代码

本段程序编译环境为ICCAVR7 for AVR。
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
#pragma interrupt_handler uart_rx:12
uchar rdata,flag=0;
void uart_init(uint baud)        //串口初始化
{
    UCSRB=0x00;
    UCSRA=0x00;
    UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
    
    baud=mclk/16/baud-1;
    UBRRL=baud;
    UBRRH=baud>>8;
    UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
    
    SREG=BIT(7);                    //开中断
    DDRD|=0x02;                     //设计发送口(TX)为输出,这很重要
}
void uart_rx(void)                  //串口接收函数
{
    UCSRB&=~BIT(RXCIE);         //校验数据是否传输完成,关闭接收中断
    rdata=UDR;                  //将接收到的数据存入rdata
    flag=1;                     //标志位至1
    UCSRB|=BIT(RXCIE);          //接收完毕,开启接收中断
}


void uart_sendB(uchar data)   //发送函数
{
    while(!(UCSRA&(BIT(UDRE)))); //等待发送缓冲器为空
    UDR=data;                    //将数据存入UDR
    while(!(UCSRA&(BIT(TXC))));
    UCSRA|=BIT(TXC);          
}

void main(void)
{
    uchar i=4;
    uart_init(19200);
    while(1)
    {
        if(flag)
        {
            uart_sendB(i);
            flag=0;
        }
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41889059/article/details/90602619

智能推荐

mybatis-mybatis连接sqlserver数据库,maven-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏5次。mybatis使用sqlserver驱动_mybatis连接sqlserver

java计算机毕业设计重庆美食网站源程序+mysql+系统+lw文档+远程调试_重庆美食推荐系统毕业设计-程序员宅基地

文章浏览阅读91次。ava计算机毕业设计重庆美食网站源程序+mysql+系统+lw文档+远程调试。前端技术:Layui、HTML、CSS、JS、JQuery等技术。springboot基于springboot的球队管理系统。springboot晨曦文学社在线投稿系统的设计与实现。springboot校园周边美食探索及分享平台。springboot校园招聘论坛设计。springboot精准扶贫管理系统。_重庆美食推荐系统毕业设计

django(11)_/works/count?is_template=false (6 ms) 403-程序员宅基地

文章浏览阅读443次。1、django的简介浏览器与服务器之间遵循的一个协议: HTTP协议服务器与应用程序框架之间:wsgi1.1 Django的简介Django是一个重量型框架主要目的:简便快捷开发Django基于MVC模式,但是它是MVT模式的核心:解耦(高内聚,低耦合)MVC设计的框架(1)重量级框架(2)MVT模式MVC :定义:MVC全名是Model View Con..._/works/count?is_template=false (6 ms) 403

Ubuntu安装VMtools实现与主机之间复制粘贴_ubuntu虚拟机与主机复制粘贴-程序员宅基地

文章浏览阅读9.6k次,点赞65次,收藏120次。VMtools应该已成功安装并配置,应该能够在主机和Ubuntu虚拟机之间实现文本的复制和粘贴操作。右键点击你创建的系统,然后出现菜单下滑找到安装 VMware Tools(T) 这个点击安装;这些命令假设你的Ubuntu系统已连接到互联网并且已配置为使用apt软件包管理器;Ubuntu上安装和配置VMtools以实现与主机之间的文本复制粘贴功能;然后弹出虚拟机设置-->点击选项-->客户机隔离-->启用复制粘贴;如果你的网络环境有限,你可能需要提前配置好网络或更换软件源;_ubuntu虚拟机与主机复制粘贴

在线八字排盘软件 源代码_所有设计师都应该知道的15种在线排版工具-程序员宅基地

文章浏览阅读1.9k次。排版是任何设计的基础 ,因为阅读是我们在网络上所做的最基本的事情之一。 您选择的排版会影响网站的多个方面,包括可读性,心情和整体用户体验 。 对于设计师和开发人员来说, 了解字体的基本原理以创建可读的令人愉悦的设计至关重要。 之前我们一直在讨论字体配对工具 ,而今天我们将与您分享打字工具,这些工具可以使您在构建和/或设计的网站上获得更好的阅读体验。 这些是插件,在线工具和脚本,可帮助您..._八字排盘app编写

永磁同步电机矢量控制(PMSM-FOC)仿真教程_永磁同步电机电流滞环矢量控制系统仿真csdn-程序员宅基地

文章浏览阅读6.6k次,点赞22次,收藏68次。先放下我做的完整永磁同步电机矢量控制系列仿真框图我在做仿真前是每个小的仿真分开做的,在各个仿真完成后我把所有的集中在了一个仿真模型里面,公用一个PMSM,不再需要复杂的切换和调参了。在模型里我把各个仿真的原理图和结果都仿真里面可以方便对照。ps.个人有点在意模型搭建的简洁性和美观性,在外观上简洁美观的,在性能上也会更好。less is more - .-目录总体仿真框图1.矢量运算器的PMSM-FOC2.PMSM-FOC采用电流滞环3.PMSM-FOC 采用..._永磁同步电机电流滞环矢量控制系统仿真csdn

随便推点

强大的 Apipost 要取代 Postman 了吗?_apipost 免安装-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏9次。Apipost 是国人开发的,基于协作,更懂中国程序员,不止于 API 文档,调试,Mock。Apipost = Postman + Swagger + Mock。它支持后端,前端,测试同时在线编辑,内容实时同步,非常适合团队协作开发。_apipost 免安装

Linux下 安装RabbitMQ 腾讯云下安装RabbitMQ_腾讯云 rabbitmq 安装 端口失败-程序员宅基地

文章浏览阅读1.2k次。安装环境:Linux: CentOS7.2rabbitMq:3.6.8Erlang: R16B03-1(安装rabbitMq之前要先安装Erlang库)1.安装Erlang(已安装请略过)使用yum安装Erlangyum install erlang使用如下命令检测Erlang是否安装成功erl如果安装成功会出现如下版本号使用:q(). 命令退出..._腾讯云 rabbitmq 安装 端口失败

NodeJS连接MySQL数据库并进行操作_node连接mysql数据库后如何执行代码-程序员宅基地

文章浏览阅读361次。NodeJS连接MySQL数据库并进行操作_node连接mysql数据库后如何执行代码

电子英汉词典附带背单词功能C语言程序设计,附录完整代码_c语言背单词程序代码-程序员宅基地

文章浏览阅读9k次,点赞33次,收藏173次。系统需求分析本程模拟面对英语单词有背诵和查询需求的用户。用户在实际学习过程中可能会遇到学习单词时实体单词书体积大不方便的情况,这时就可以使用便携PC设备来运行此程序方便学习。在本程序中,设计设计了自动背单词的部分。每次给用户输出10个单词,用户自己进行背诵并且立即进行测试,在测试中本程序会记录用户对单词的掌握程度,并且形成熟练度等级。在用户遇到新的单词时可以根据跟程序内部提供的词库实现查单..._c语言背单词程序代码

监控的几个维度_监控维度-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏8次。Promentheus、Grafana,监控维度讨论。_监控维度

K8S中service的分类以及各种使用场景详解_容器service的类型-程序员宅基地

文章浏览阅读7.5k次,点赞7次,收藏43次。前言前面两个章节讲解了K8S的总体入门准备以及全局配置管理的相关内容,正常来说接下来应该将将存储或者组件,但是由于那两部分内容过多且相对偏重细节,所以这一篇先把K8S中的Service先讲解下,帮助大家先理清K8S的整体架构,后续再讲解细节内容的时候可以快速上手,便于理解。正文Service是什么?在说明Service是什么之前先了解下Service的使用场景: 当客户端想要访问K8S集群中的pod时,需要知道pod的ip以及端口,那K8S中如何在不知道pod的地址信息的情况下进行po_容器service的类型

推荐文章

热门文章

相关标签