AVR单片机教程——串口接收】的更多相关文章

本文隶属于AVR单片机教程系列.   上一讲中,我们实现了单片机开发板向电脑传输数据.在这一讲中,我们将通过电脑向单片机发送指令,让单片机根据指令控制LED.这一次,两端的TX与RX需要交叉连接,单片机TX连接串口工具RX也是需要的,因为程序会根据指令反馈信息. 为了简单起见,我们的程序只需要控制4个板载LED.指令包含两个字节:第一个字节为r.y.g.b中的一个,分别表示红.黄.绿.蓝灯:第二个字节为0或1,表示灯不亮或亮. 然而,a2这样的指令是没有意义的,却是可能出现的.即使用户已经熟悉了…
本文隶属于AVR单片机教程系列.   到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字.至于输入一个指令.输出一条调试信息,甚至用scanf和printf来输入输出,在已经接触过的这些器件上是难以想象的.而本讲"串口发送"与下一讲"串口接收",将打开这一扇大门. 硬件 本讲的主题是UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器),俗称串口.实…
本文隶属于AVR单片机教程系列.   在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用.在这一篇教程中,我们将从硬件与软件等各方面更深入地了解UART. USART组件 一直在讲的UART其实是USART组件的一部分,USART比UART多了同步的一部分,但这一部分用得太少(我从来没用过),而且缺乏实例,所以就略过了.然而,单片机的设计者很机智地把这个鸡肋功能升华了一下,USART组件可以支持SPI模式.SPI是一种同步串行总线,…
做了这么多准备,我们终于可以开始用开发板做点事了. 单片机编程与计算机编程有一些不同点.程序都要有零个或多个输入.一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有. 单片机的英文是microcontroller,主要作控制用途,它对设备的控制就是它的输出,从设备读取的信息就是它的输入.计算机编程中,提供了scanf.printf等函数来做输入输出,单片机虽然也有这一些函数,但它们往往是在串口上收发数据,最终还是在电脑上显示的.单片机对它连接的设备的控制,主要通过…
ADC 计算机的世界是0和1的.单片机可以通过读取0和1来确定按键状态,也可以输出0和1来控制LED.即使是看起来不太0和1的PWM,好像可以输出0到5V之间的电压一样,达到0和1之间的效果,但本质上还是高低电平. 但是,世界上终究还是有0和1无法表示的.如果引脚上被施加0到5V之间的电压,寄存器PINx无法告诉我们具体情况,只能指示这个电压是1.5V以下还是3V以上(参考数据手册"Electrical characteristics").这种可以连续变化的信号称为模拟信号,与离散的.…
本文隶属于AVR单片机教程系列.   中断,是单片机的精华. 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断.触发中断的事件成为中断源,处理事件的函数称为中断服务程序(ISR). 中断在单片机开发中有着举足轻重的地位--没有中断,很多功能就无法实现.比如,在程序干别的事时接受UART总线上的输入,而uart_scan_char等函数只会接收调用该函数后的输入,先前的则会被忽略.利用中断,我们可以在每次接受到一个字节输入时把数据存放到缓冲区中,程序可以从缓…
本文隶属于AVR单片机教程系列.   开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称…
本文隶属于AVR单片机教程系列.   在用DAC做了一个稍大的项目之后,我们来拿ADC开开刀.在本讲中,我们将了解0.96寸OLED屏,移植著名的U8g2库到我们的开发板上,学习在屏幕上画直线的算法,编写一个示波器程序,使用EEPROM加入人性化功能,最后利用示波器观察555定时器.放大电路.波形变换电路的各种波形. OLED屏 我们使用的是0.96寸OLED屏,它由128*64个像素点构成,上16行为蓝色,下48行为黄色,两部分之间有大约两像素的空隙.虽然有两种颜色,但每个像素点都只能发出一种…
本文隶属于AVR单片机教程系列.   单片机的应用场景时常涉及到模拟信号.我们已经会使用ADC把模拟信号转换成数字信号,本讲中我们要学习使用DAC把数字信号转换成模拟信号.我们还将搭建一个简单的功率放大器电路,用DAC通过扬声器播放音乐. SPI总线 集成DAC的单片机不多,ATmega系列就不在此列.我们将要使用的10位ADC是通过SPI总线通信的,因此我们先来学习SPI总线. SPI是一种同步串行通信总线,支持全双工通信.所谓同步,就是有时钟信号,类似上一讲中的595和165,并且硬件实现上…
本文隶属于AVR单片机教程系列.   在系列教程的最后一篇中,我将向你推荐3个可以深造的方向:RTOS.C++.事件驱动.掌握这些技术可以帮助你更快.更好地开发更大的项目. 本文涉及到许多概念性的内容,如果你有不同意见,欢迎讨论. 关于高层 这一篇教程叫作"走向高层".什么是高层? 我认为,如果寥寥几行代码就能实现一个复杂功能,或者一行代码可以对应到几百句汇编,那么你就站在高层.高层与底层是相对的概念,没有绝对的界限. 站得高,看得远,这同样适用于编程,我们要走向高层.高层是对底层的封…