单片机

单片机实现独立按键操控灯

烂漫一生 提交于 2019-12-02 11:26:42
单片机实现独立按键操控灯 # include "reg52.h" sbit k1 = P3 ^ 1 ; sbit k2 = P3 ^ 0 ; sbit k3 = P3 ^ 2 ; sbit k4 = P3 ^ 3 ; sbit led1 = P2 ^ 0 ; sbit led2 = P2 ^ 1 ; sbit led3 = P2 ^ 2 ; sbit led4 = P2 ^ 3 ; void delay ( int i ) { while ( i -- ) ; } void keypro ( ) { // 处理按键k1 if ( k1 == 0 ) { delay ( 1000 ) ; //消除抖动 if ( k1 == 0 ) led1 = ~ led1 ; while ( ! k1 ) ; //如果key=0,执行死循环,如何松开,变成高电平key=1,跳出循环 } //处理按键k2 if ( k2 == 0 ) { delay ( 1000 ) ; //消除抖动 if ( k2 == 0 ) led2 = ~ led2 ; while ( ! k2 ) ; //如果key=0,执行死循环,如何松开,变成高电平key=1,跳出循环 } //处理按键k3 if ( k3 == 0 ) { delay ( 1000 ) ; //消除抖动 if ( k3 == 0 ) led3 =

【embedded】看门狗相关知识

ε祈祈猫儿з 提交于 2019-12-02 11:18:55
定义: 看门狗,又叫watchdog timer(WDT),是一个定时器电路,一般有一个输入,叫喂狗,一个输出到单片机的RST端,单片机正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零, 如果超过规定的时间不喂狗,WDT定时超过,就会给出一个复位信号到单片机,使单片机复位。 作用: 看门狗的作用就是防止程序发生死循环。 分类 1)硬件看门狗。 2)软件看门狗。利用闲置的定时器/计数器就可以设计一个软件看门狗。 优点:无需额外的硬件支持。 缺点:当系统存在严重的错误时(例如:中断服务出错),则有可能导致软件看门狗失效。 来源: https://blog.csdn.net/qq_43248127/article/details/102754563

WIFI网络(ESP8266)升级STM32: STM32使用http下载程序文件,乒乓升级方式,支持程序回滚 (WIFI模块AT,TCP透传方式)

不想你离开。 提交于 2019-12-02 10:13:28
实现功能概要 BootLoader程序:     如果没有更新标志位,则尝试加载用户程序.     如果有更新标志位,STM32控制WIFI模块以TCP方式连接Web服务器,然后发送Get 协议获取程序文件,写入Flash后,重启!     每次写入Flash 切换Flash的写入位置,加入更新状态检测,更新失败则运行上一版程序(程序回滚) APP用户程序:     每隔10S,控制WIFI以TCP方式连接Web服务器,获取当前程序版本,如果版本不一致,写入更新标志,重启单片机! Flash配置: 测试 来源: https://www.cnblogs.com/yangfengwu/p/11741692.html

DS1302时钟芯片时序

混江龙づ霸主 提交于 2019-12-02 05:07:32
CE 和 SSEL 的使能控制是反的,对于通信写数据, 都是在 SCK 的上升沿,从机进行采样,下降沿的时候,主机发送数据。 DS1302 的时序里, 单片机要预先写一个字节指令,指明要写入的寄存器的地址以及后续的操作是写操作,然后 再写入一个字节的数据。 读操作有两处需要特别注意的地方。第一, DS1302 的时序图上的箭头都是针对 DS1302 来说的,因此读操作的时候,先写第一个字节指令,上升沿的时候 DS1302 来锁存数据,下 降沿我们用单片机发送数据。到了第二个字数据,由于我们这个时序过程相当于 CPOL=0/CPHA=0,前沿发送数据,后沿读取数据,第二个字节是 DS1302 下降沿输出数据, 我们的单片机上升沿来读取,因此箭头从 DS1302 角度来说,出现在了下降沿。 第二个需要注意的地方就是,我们的单片机没有标准的 SPI 接口,和 I2C 一样需要用 IO 口来模拟通信过程。在读 DS1302 的时候,理论上 SPI 是上升沿读取,但是程序是用 IO 口模 拟的,所以数据的读取和时钟沿的变化不可能同时了,必然就有一个先后顺序。通过实验发 现,如果先读取 IO 线上的数据,再拉高 SCLK 产生上升沿,那么读到的数据一定是正确的, 而颠倒顺序后数据就有可能出错。这个问题产生的原因还是在于 DS1302 的通信协议与标准 SPI 协议存在的差异造成的,如果是标准

单片机stm32F103单片机晶振不起振的原因分析

佐手、 提交于 2019-12-02 04:51:00
  这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题。下面是我在遇到问题后的一些检查,排除问题的过程。本人小菜鸟一个,文章中如有错误和不足,还望各位大佬指正和补充。   事情是这样的,本人做了一款32单片机最小系统板(先叫它老大),在老大出来之前的前五个月,我用相同的PCB板焊了一款用在毕设上面,那个是能正常工作的。板上有个小负载,LED灯。想让这个灯闪烁。代码是没有问题的,因为下载到从网上买的单片机是正常工作的。用JLink下载到自己做的板子上也是能下载进去的,但是不工作。怀疑晶振没起振。用示波器测量晶振引脚对地为一个高电平,而控制那个灯亮的管脚一直是高电平。买回来的板子晶振引脚对地为一个正弦波,控制灯的引脚波形为方波。   找到问题出现在板子时钟没起振,到底是时钟电路哪个地方出问题了还未得知。首先想到的是换个晶振,8M的晶振换了(第一次换),换过后,程序烧写进去,复位按键按下,灯不亮。接着考虑晶振旁边的匹配电容的问题,将匹配电容由22pf换成了20pf,仍然是不工作。没想通是为什么。于是将剩余的器件和板子拿出来想焊另外一块对着排查,结果焊接的时候,没控制好力道,把引脚弄弯了,芯片引脚勾肩搭背了,开始谈恋爱了,狂撒一波狗粮。这样肯定不行啊,月老不能乱点鸳鸯谱啊,于是,用热风枪把整个芯片吹下来了,棒打鸳鸯,结果焊盘不愿意了

AVR_Interrupt

我是研究僧i 提交于 2019-12-02 03:01:36
https://blog.csdn.net/dandri/article/details/54799300 #AVR中断系统与基本应用(ATMega16)##一、中断的基本概念###1.1中断的基本概念 中断是指计算机自动响应的一个中断请求信号,暂时停止(中断)当前程序的执行,转而执行为外部设备服务 的型号(中断服务程序),并在执行完服务程序后自动返回原程序的过程。具有的优势实现实时处理实现分时操作,提高MCU的处理效率进行故障处理待机状态的唤醒###1.2中断的处理过程 由于MCU处理完中断之后需要返回原程序,因此,要在执行中断之前,要将主程序中断处的地址,即断点处(实际上是程序计数器PC的当前地址值——即即将执行的主程序的下一条指令,即图中的k + 1处)保护起来,称为保护断点除了保护断点,在程序执行之前,还要把有关的数据保护起来,称为中断现场保护,方便在返回主程序的时候继续执行,这一过程称为恢复现场和恢复断点简单说,在响应中断的时候,MCU的硬件系统会将断点地址压进系统的堆栈保护,而在执行中断返回指令时,硬件系统又会自动将断点地址弹出到程序计数器PC中。###1.3中断源、中断信号和中断向量中断源一般可分为内部中断和外部中断典型的中断有定时器溢出中断,ADC完成中断等系统中的外部设备也可以作为中断源,这些中断源位于单片机外部

STM32之串口DMA接收不定长数据

风流意气都作罢 提交于 2019-12-01 13:37:59
STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了? 同学B:串口可以配置成用DMA的方式接收数据,等接收完毕就可以去读取了! 这个同学是对的,我们可以使用DMA去接收数据,不过DMA需要定长才能产生接收中断,如何接收不定长的数据呢? DMA简介 题外话:其实,上面的问题是很有必要思考一下的,不断思考,才能进步。 什么是DMA DMA :全称Direct Memory Access,即直接存储器访问 DMA 传输将数据从一个地址空间复制到另外一个地址空间。CPU只需初始化DMA即可,传输动作本身是由 DMA 控制器来实现和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。这样的操作并没有让处理器参与处理,CPU可以干其他事情,当DMA传输完成的时候产生一个中断,告诉CPU我已经完成了,然后CPU知道了就可以去处理数据了,这样子提高了CPU的利用率,因为CPU是大脑,主要做数据运算的工作,而不是去搬运数据。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。 在STM32的DMA资源 STM32F1系列