AVR 的IO口简介与寄存器的概念

一、何谓“寄存器”

寄存器就是RAM中的一些特殊单元,映射片上外设的特殊功能

二、何谓“IO口”

可以将"0"与1转换为电压信号的端口

单片机中最常用的TTL电平:0V代表“0”,+5V 代表“1”

Mega16有4个IO口,PA,PB,PC,PD

三、IO口的性能指标

灌电流能力:能够流入IO口的最大电流

拉电流能力:能够从IO口流出的最大电流

上拉电阻与下拉电阻

最大输入电压

IO口的两种状态

如上图(有个选择开关实际电路中不存在的为了好理解才给出的)输出就是 要么给个5V 要么给个地 0V 就是输出0 和 1

上图输入模型 理想的输入IO口相当于一个悬空的导线,就是输入这个对VCC 与对地的等效阻抗都必须为无穷大,实际单片机现在一般都做到10M欧姆以上。

IO口的输出性能指标

1/AVR 的IO口灌电流能力与拉电流能力均达30mA

2/51的拉电流能力<100uA,灌电流能力10mA

拉电流能力:

能够从IO口流出的最大电流

下图是只管的看出电流时从IO口流出,相当于内部开关达到VCC 随着外面阻值改变电流改变 最大电流30mA Imax

灌电流能力:

能够流入IO口的最大电流

下图同理 IO口的输入

IO口的输入性能指标

一、AVR的IO口输入状态时可配置上拉电阻,值为100K 数量级

二、最大输入电压范围:-0.5V~VCC+0.5V

AVR 输入IO是可以配置上拉电阻的是一个比较弱上拉 大概100K -- 200K 、为什么要配置一个上拉电阻呢?对于输入口,因为配置为输入的时候,它的等效一个悬空的一个点,如果在输入口上真的是一个悬空的话,这样一个悬空的导线的电平会是多少呢?单片机内部会认为是输入一个0 还是1呢/答案就是不确定的,可能受外部一些静电或一些比较强的电磁场一些影响或者0或者是1,但是如果我们将配置一个上拉电阻,当这个IO口悬空的时候,这个电平就不再是不确定的了,被确定为上拉为1.上拉电阻具体的作用将在下一讲,将这个按键程序设计时候大家会有更深的体会。承受最大输入电压看下图:输入做小低电压电压 -0.5 最大0.2VCC 输入高电压 做小0.7VCC 最大VCC+0.5V 就是说最小-0.5 最大 5.5V

除了ATmega16之外其他的AVR芯片跟m16也差不多

一、IO口语IO寄存器的映射(x代表A~D)

方向寄存器:DDRx

数据寄存器:PORTx

输入寄存器:Pinx

二、C语言变量与寄存器的映射

io.h这个文件中将所有寄存器映射为同名的变量,对这些变量的读写相当于对寄存器的读写

三、输出状态IO寄存器设置

DDRx某一位置1,相应位的IO口被设置为输出

PORTx某一位置1或0,对应IO口相应位的电平高低

下面是一些映射关系

第一个:C语言通过AVR Studio/WinAVR 等编译成目标代码,然后通过下载线编程器(现在个人一般不用了)、JATG口到硬件单片机

第二个:说的是寄存器到寄存器的映射 通过同名变量 、单片机一般多数为8位定时器当然也有16位计数器、然后映射到寄存器内的数据0 1 虽然在RAM存的是0或1 相当于内部高低电平的一种形式进行存储最后通过IO口 UART SPI IIC 转化为 +5v 0v 或LVTTL +3.3V 0V .

第三个、其他的变量 其实就是RAM中的数据也就是占用RAM中的存储单元当然这个RAM不能直接跟外界直接进行接触的。

第四个、函数表示的就是各个函数之间的一些运算还有就是互动的关系,表现到单片机内部就是各个寄存器还有RAM的互动关系,最后转化为硬件模块之间的关系。

C语言的流水灯验证

循环语句、

8位流水灯可用于指示8位二进制

对IO寄存器进行移位运算,即可实现流水灯效果

循环语句

1、while语句

2、for 语句

各种运算符的流水灯验证

赋值= 加+ 减- 乘* 除/ 括号() 求余%

与& 或| 取反 ~ 异或^ 左移 << 右移>>

逻辑与 && 逻辑或|| 逻辑非!

while(表达式)//表达式不为0 即为真 (1)死循环

{

}

如何设置断点

toggle breakpoint F9

断点就是全速运行时候当运行到断点位置就停下来如下图

Run F5

去除断点就是把光标定位到断点处再次点击小手或F9 断点就去除了。

再次按全速运行结果如下图灯全亮了

原因是因为运行循环速度太快应该加个延时AVR CPU 主频能跑到16MHZ 一个1到2微秒的时间。1百万没秒循环几十万次,然人眼分辨加延时。

for (赋值初始值只做一次;条件(真进入内容);执行完内容后执行此条语句){};来回判断 第2条与第3条语句

for 循环大括号没有是只执行 第二条与第三条 判断 加加动作。

位运算

将某一位置1、置0、取反 置1、

相应位与1 进行位或|运算

3.置0

相应位与0进行按位与&运算

4.取反

相应位与1进行按位异或^ 运算 相同为0 相异为1

5.移位运算符:左边为最高位,右边为最低位

左移

6.右移

右移n位相当于乘2^n运算,右侧n位丢弃,左侧补n个0

注意:在32位操作系统中 是补符号位我在嵌入式32位操作系统试过

如果自制的仿真器缺点如果滤波做不好会出现跑飞的现象。

(引用百度说辞:程序跑飞

程序跑飞是指系统受到某种干扰后,程序计数器PC的值偏离了给定的唯一变化历程,导致程序运行偏离正常的运行路径.程序跑飞因素及后果往往是不可预计的.在很多情况下,程序跑飞后系统会进入死循环而导致死机

)

任何数与1 进行^ 异或就取反了。

PORTB = PORTB ^ 0b11111111;//利用异或可以实现闪烁灯

IO口设置为输出状态

蜂鸣器

一、有源蜂鸣器

加上电源电压即可发出鸣叫声,消耗电流20mA左右

传统的蜂鸣器驱动电路

三极管驱动(如下图)

AVR的蜂鸣器驱动电路

IO口直接驱动(如图)

编一段程序进行验证(buzzer 蜂鸣器)

可看到PORTA 变化 蜂鸣器叫了

好了总结下

第一步:IO设置为输出

DDRB = 0XFF;

DDRB |= 0b00100000//第五位输出高电平

第二步:对应位输出数据

输出1:PORTB |= 0b00100000;//第五位输出高电平

输出0:PORTB &= ~0b00100000;//第五位输出低电平

输出1:PORTB |= (1<<5);//第五位输出高电平

输出0:PORTB &= ~(1<<5);//第五位输出低电平

对应位取反:PORTB^ = (1<<5);//第五位输出高电平

avr单片机流水灯程序c语言,AVR单片机学习C语言的流水灯验证相关推荐

  1. 程序员之路──如何学习C语言并精通C语言

    程序员之路──如何学习C语言 学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通.如何以最小的代价学习并精通C语言是本文的主题.请注意,即使是"最小的代价",也绝不是什么 ...

  2. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...

    [摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...

  3. 漫谈C语言及如何学习C语言

    漫谈C语言及如何学习C语言 云风最近写了一篇博客<C语言的前世今生>.作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的 ...

  4. 用keil编写C语言流水灯程序,简述关于Keil、STM32 用C++编写流水灯程序

    通常来说,在单片机上编程,要么汇编,要么C语言,而用C++++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案是肯定可以的,下面讲讲基于Keil.STM32,用C++编写流水灯程序的一些内容 ...

  5. 【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯

    本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤.利用C语言编程和寄存器点亮流水灯以及stm32CubeMX+Keil使用HAL库点灯 目录 一.STM3 ...

  6. 单片机系列(2)流水灯程序是如何写入单片机的

    在上一篇中<单片机实现跑马灯>中我们完成了一个漂亮的流水灯,里面有一段代码我们来分析一下吧,看看单片机是怎么理解这段代码的. <单片机实现跑马灯>(点击图片跳转) #inclu ...

  7. bcs转10 c语言,小弟刚学习C语言,怎么把下段汇编代码转化为C语言程序,请高手指教!!!单片机89c52...

    已结贴√ 问题点数:20 回复次数:3 小弟刚学习C语言,怎么把下段汇编代码转化为C语言程序,请高手指教!!!单片机89c52 BIT_COUNT     DATA 07FH TIMER0       ...

  8. c语言函数指针学习心得,c语言 函数指针 学习C语言笔记

    c语言 函数指针 大一学的C语言,课,算是学了一遍,后来接触Java,C++,易语言,python,还有写单片机用的类似C语言,可以说后来根本没有好好学,C也忘个差不多了,但是这次我课选了OC,不喜欢 ...

  9. 2019年该学习哪门语言?建议学习C#语言

    世界上只有少数几种语言是多功能的,而没有一个像C#那样干净整洁. 作者 | Arctek 译者 | 谭开朗,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 最直接的答案是: ...

  10. 初识C语言:小白学习C语言的第一周记录

    目录 1.个人情况说明于学习期待 2.学习资源的分享 3.学习C语言的准备工作和本周学习的知识 个人情况说明和学习期待 我是一名大学生新人,因为高中时期有幸接触到了机器人比赛,从此深深地热爱上了计算机 ...

最新文章

  1. 清华大学 pip 源
  2. iOS中UITextField 使用全面解析
  3. BCH开发团队BU为什么选择让矿工投票?
  4. MYSQL二级表的管理_MySQL分区表的管理~2
  5. springboot工程添加404页面
  6. matlab的index函数,写论文第九天:MATLAB之rsindex函数
  7. oracle的db link
  8. 16.1117 NOIP 模拟赛
  9. 我有你没有游戏例子100_50米的决赛圈里面藏着100个人?光子:知道什么叫质量局了吧!...
  10. 力扣-525 连续数组
  11. 对话《哥德尔、埃舍尔、巴赫:集异璧之大成》作者:现在的AI还不够看
  12. 苹果sf字体_字体基础知识
  13. matlab做聚类分析(简单的直接用clusterdata)
  14. android jni javah,JAVAH找不到类(android ndk)
  15. jike review
  16. 面试中怎样谈自己的缺点?
  17. 源码推荐 VVebo剥离的TableView绘制
  18. Windows11 Android Srudio无法连接手机,报错Error initializing ADB: Unable to create Debug Bridge
  19. 人工智能专业主要学习哪些课程,目前的就业方向是什么?
  20. ESP8266—01模块的3种工作模式

热门文章

  1. 【名词解释】LTE终端的五模、七模、十频、十一频
  2. android 关机闹钟 实现,android 关机闹钟
  3. Google最热门60款开源项目
  4. 网络应用之JavaScript
  5. 智华计算机终端无法卸载,智华天成V1.0计算机终端保密检查系统软件 国密装备目录**...
  6. MATLAB参数估计 置信区间
  7. 磁盘阵列柜性能介绍(二)
  8. 服务器连接盘柜后盘符空间显示不对,服务器连接磁盘阵列柜
  9. c++中transform函数的应用
  10. 注意力机制在推荐模型中的应用——AFM、DIN、DIEN