avr单片机流水灯程序c语言,AVR单片机学习(四)C语言的流水灯验证
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章
AVR单片机学习(四)C语言的流水灯验证
作者:zww 1988 来源:本站原创 点击数:… 更新时间:2014年04月18日 【字体:大 中 小】
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.移位运算符:左边为最高位,右边为最低位
左移<<:>
左移n位相当于乘2^n运算,左侧n丢弃,右侧n个0
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语言的流水灯验证相关推荐
- 8255A红绿灯c语言程序,51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序).doc...
51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序) 51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序)2010-04-21 22:0 ...
- 单片机系列(2)流水灯程序是如何写入单片机的
在上一篇中<单片机实现跑马灯>中我们完成了一个漂亮的流水灯,里面有一段代码我们来分析一下吧,看看单片机是怎么理解这段代码的. <单片机实现跑马灯>(点击图片跳转) #inclu ...
- c语言函数指针学习心得,c语言 函数指针 学习C语言笔记
c语言 函数指针 大一学的C语言,课,算是学了一遍,后来接触Java,C++,易语言,python,还有写单片机用的类似C语言,可以说后来根本没有好好学,C也忘个差不多了,但是这次我课选了OC,不喜欢 ...
- java 脚本语言交互_Java学习笔记--脚本语言支持API
Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...
- C语言/C++编程学习:C语言环境设置
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- r语言 fourth entry_第四篇 语言学习的自然顺序
1.语言学习的自然顺序: I" m3 b3 b, ]1 P4 @: r( B: [; {0 ?. @& f( T人们习得语言规则有一个可以预测的共同顺序,有的先习得,有的后习得.就某 ...
- 幼儿园 c语言,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 编写程序,登录幼儿园200个小朋友的数据:姓名.性别.年龄.身高.体重.出生日期,分别按年龄排序后输出. 要求: (1)登录数据用函数input() (2 ...
- 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法
今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象.原因及解决方法. 一.数组越界(数组溢出 ...
- 幼儿园管理系统c语言,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 编写程序,登录幼儿园200个小朋友的数据:姓名.性别.年龄.身高.体重.出生日期,分别按年龄排序后输出. 要求: (1)登录数据用函数input() (2 ...
- java易语言_java程序员,0基础学习开发易语言。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 使用模块:精易模块 , 还有一些别的不过可以使用精易进行替代 首先是登陆模块: 需要登陆的是拼多多,查看了拼多多的页面,发现没有任何处理,密码也是明文提交 ...
最新文章
- C++中基本的输入输出
- 伯明翰大学计算机科学网络安全硕士,2020年伯明翰大学网络安全硕士专业硕士申请条件-学费-世界排名...
- apache http server 停止工作_配置nginx,Apache支持pathinfo模式-什么是phpinfo模式
- kmdjs api reference
- Hadoop之OutputFormat数据输出详解
- mybatis错误之配置文件属性配置问题
- java某个类避免findbug检查_Findbug插件静态java代码扫描工具使用
- 艾伟_转载:使用LINQ to SQL更新数据库(中):几种解决方案
- 大疆等无人机在倾斜摄影作业时 如何进行仿地飞行
- 【毕业设计】stm32智能语音识别系统 - 单片机 嵌入式 物联网
- ios 融云 重写对话列表_iOS消息体系架构详解-融云即时通讯云
- 计算与推断思维 十一、估计
- CentOS禁止Ping方法
- 机器学习之路(四)之感知机算法PLA
- 关于仙童八叛徒(转)
- 陕师大计算机期末考试题,陕师大物理化学(上)历年期末考试题
- Capl编程xml标签语法(4) —— CAN报文周期检测/错误帧检测/信号改变检测。。。
- mysql 实现查询用户连续登录的最大天数
- 一小时刷完英语口语常用3000词汇(绿色护眼版)day10-词汇901-1000
- undefined reference to ‘cv::imread问题调查
热门文章
- 宏碁暗影骑士2022 i7-12700h+intel ax1650网卡+ubuntu1804+linux5.19 安装网卡驱动
- Yandex支持插件的手机浏览器
- Mac安装 Navicat
- 保研面试复习之数据结构篇
- 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第4章 形式化说明技术
- github 安装浏览器导航插件Octotree
- VISIO使用FPGA时序图、状态机等所需的模具
- php中strtotime函数,PHP中strtotime函数用法举例
- aboutface4 1-3 读书笔记 幕布 思维导图
- 线性规划问题及单纯形法-目标函数值极小大M法