单片机

ADC0809A/D转换器基本应用技术

梦想与她 提交于 2020-02-20 19:29:48
ADC0809A/D转换器基本应用技术 来源:网络 作者:未知 ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。 (1).ADC0809的内部逻辑结构   由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。 (2).引脚结构 IN0-IN7:8条模拟量输入通道   ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条   ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。 数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间

清翔51单片机+PCA9685例程

陌路散爱 提交于 2020-02-20 14:07:06
使用PCA9685的0和1通道,用四个独立按键控制两个舵机正反转。 # include <reg52.h> # define uint unsigned int # define uchar unsigned char sbit sda = P2 ^ 0 ; sbit scl = P2 ^ 1 ; sbit s1 = P3 ^ 0 ; sbit s2 = P3 ^ 1 ; bit flag0_right = 0 , flag0_left = 0 , flag1_right = 0 , flag1_left = 0 ; void delay ( ) { ; ; } void delay1ms ( uint z ) { uint x , y ; for ( x = z ; x > 0 ; x -- ) for ( y = 114 ; y > 0 ; y -- ) ; } void i2c_init ( ) { sda = 1 ; delay ( ) ; scl = 1 ; delay ( ) ; } void i2c_start ( ) { sda = 1 ; delay ( ) ; scl = 1 ; delay ( ) ; sda = 0 ; delay ( ) ; } void i2c_stop ( ) { sda = 0 ; delay ( ) ; scl = 1 ;

为什么说嵌入式开发比单片机要难很多?谈谈单片机和嵌入式的经验

巧了我就是萌 提交于 2020-02-19 11:37:37
单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈本人对这两个概念的理解和感悟。 首先明确概念,什么是单片机,单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 比如最经典的51系列单片机,如下图所示,外观只是一块一个拇指大小的长方体芯片,共40个引脚,里面包含了逻辑运算单元。实际上也就是一个cpu。 在最开始接触单片机的时候,还曾经有过一个疑问,为什么单片机是黑色的而不可以是别的颜色,后来才知道是单片机材料的限制。 对单片机而言,其实一个芯片就是全部,其他的比如单片机最小系统都是为了单片机的正常运作而加入其他元件,比如晶振,5v电源,电感电阻等。当然最小系统只能保证单片机正常运行,几乎实现不了基于单片机的任何应用。 为了使单片机实现应用,必须要加入其他外设。比如按键,led灯,led屏,蜂鸣器,各种sensor。这也就是市面上很多公司都在做的单片机开发板。 总结

MSP430程序库<九>数码管显示

帅比萌擦擦* 提交于 2020-02-19 10:36:33
数码管也是单片机系统最常用的输出设备之一(还有液晶、发光二极管等)。七段(这里用的是8段,有小数点)数码管可以完成显示0-9数字和一部分的英文字符如:A、b。本文实现的程序完成显示数字和可显示的英文字符;同时完成数码管显示的printf函数的移植,以支持printf的格式化字符等好用的特点(我用的数码管8个排为一排,方便数字等的显示)。 硬件介绍: 这里所用到的硬件资源包括8个数码管、和msp430单片机的两个8位IO口(这里用的是P3和P5口,如有改变,可以通过宏定义更改)。 数码管是8个共阴的数码管,a-h 8段通过一个200Ω的电阻接到430单片机的P5口。共阴端是由单片机的P3口控制,单片机的一位IO通过一个三极管接到数码管的共阴端,以完成位选。 单片机的P3口时数码管的位选口,某位为高则选中;P5口时段选口;要数码管显示时,通过P3位选,选中某个数码管亮,P5段选选择8段(a-h)中的那些亮,从而控制某一位显示数字或字符。 要同时显示多个数码管,就要动态扫描;动态扫描时,本程序选用的是由看门狗的中断扫描显示:每1.9ms显示其中的一位,动态扫描显示每一位,从而让数码管看起来是同时亮的。 程序实现: 数码管显示首先要有一个数码管显示的断码表(完成数字和字符到数码管段值的表),程序中采用了《MSP430系列单片机系统工程设计与实践》这本书推荐的方式实现的这个数码表

单片机启动文件

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-17 14:47:58
初始化堆栈指针SP 初始化PC指针 初始化中断向量表 配置系统时钟 调用C库函数_main,最终去到C的世界 启动代码通常都烧写在flash中,它是系统一上电就执行的一段程序,它运行在任何用户c代码之前。上电后,arm处理器处于arm态,运行于管理模式,同时系统所有中断被禁止,pc到地址0处取指令执行。一个可执行映像文件必须有个入口点,而能放在rom起始处的映像文件的入口地址也必须设置为0.在汇编语言中,我们已经说过怎样定义一个程序的入口点,当工程中有多个入口点时,需要在连接器中使用-entry指出程序的入口点。如果用户创建的程序中,包含了main函数,则与c库初始化代码对应的也会有个入口点。 总的来说,启动代码主要完成两方面的工作,一是初始化执行环境,例如中断向量表、堆栈、i/o等;二是初始化c库和用户应用程序。在第一阶段,启动代码的人物可以描述为: (1)建立中断向量表; (2)初始化存储器; (3)初始化堆栈寄存器; (4)初始化i/o以及其他必要的设备; (5)根据需要改变处理器的状态。 -->建立中断向量表 初始化代码必须建立好中断向量表,以备应用程序后续使用。如果系统的地址0处是rom,则中断向量表直接是一些跳转指令就可以了,他们转到相应的中断处理函数执行。如果系统的0地址处不是rom,则中断向量表是通过动态的方式创建的,这主要是通过存储器映射的方式来实现:即上电后

SAM4E单片机之旅——6、LED闪烁之按钮控制

荒凉一梦 提交于 2020-02-17 14:05:58
现在试试用按钮控制LED灯……让LED在一个按钮按下时亮起;弹起时灭掉。 主要目的是学习GPIO的输入及中断。 一、 电路 图中的J39-n是几个跳线插座,位置在开发板LCD附近,往下进行前要先确保跳线是接通的。 可以看到,当按钮按下时,引脚接地。即若引脚接个上拉电阻,则在按钮弹起状态下,引脚处于高电平状态;而在按钮按下时,则处于低电平状态。 这次使用的按钮是BP3,即PA20引脚;LED为蓝色LED,即PA0。 二、 最简单的办法 在开发版重置时,所有的引脚就默认接了上拉电阻。 所以,直接使用一根杜邦线将PA20和PA0短接,就可以用BP3控制蓝色LED了。 三、 稍微有技术含量的思路 假设,身边不存在杜邦线…… 那么很直接的思路就是根据按钮引脚的电平,来控制LED灯引脚的电平。可以选择通过不断查询来获取按钮引脚的电平状态,但我们现在使用更高级的武器: 中断。 我们让按钮引脚在电平变换时产生一个中断,然后在中断服务函数中控制LED引脚电平。 四、 LED 引脚的配置 这个配置已经做过多次了…… 五、 输入引脚的配置 1. 启用PIO控制器的时钟。启用中断、获取引脚电平需要开启相应PIO控制器的时钟。 PMC->PMC_PCER0 = (1 << ID_PIOA); 2. 引脚配置为仅做输入用途 #define BUTTON_PIO PIO_PA20 /* 使用PIO控制器控制引脚

SAM4E单片机之旅——1、LED闪烁之空循环

和自甴很熟 提交于 2020-02-17 13:22:57
最近因为导师要写一本关于SAME4单片机的书籍,而我也作为一个嵌入式的初学者看了这本书。现在也让我写写几个小的程序,做做示例。既然写了文档之类的,就发到博客上来吧。 目前关于这芯片能参考的书籍大概就只有英文手册了。用的板子是 SAM4E16E。 IDE用的是Atmel Studio。既然是学习单片机,就没有使用asf框架,而是直接采用访问寄存器的方法了。 第一个程序就是控制板子上一个LED灯的闪烁了。 一、电路 通过查看电路图,可以发现有一个蓝色的LED灯连接在PA0引脚上。我们可以通过改变PA0输出的电平实现LED灯的闪烁。 二、寄存器的访问和CMSIS 对单片机的操作需要通过对相关寄存器的访问来实现。比如,为调节PA0引脚上的电平,首先我们需要允许PIOA控制PA0引脚。通过查看寄存器说明可知,这只要向相应的PIO使能寄存器(PIO_PER)写入0x01就可以了。同时,也可以查到PIOA的PIO_PER被映射到地址0x400E0E00上了。所以通过如下代码就可以达到目的: /* 假设 unsigned int长度为32位 */ unsigned int* PIOA_PER_p = (unsigned int*)0x400E0E00u; (*PIOA_PER_p) = 0x01; 这样做非常繁琐,而且我们也不能保证unsigned int总是32位长。

手把手在面包板上搭单片机最小系统(引用 极简单片机最小系统制作完全图解[zz])

◇◆丶佛笑我妖孽 提交于 2020-02-16 20:54:44
可以不用买下载器,可以不用画pcb,可以不用制版,就能自己动手玩电路了。 原文地址: http://hi.baidu.com/yy35025077/blog/item/ed08b81badf8e0058618bf84.html --------------------------------------------------------------------------------------------- 杜 洋个人空间 卓越依旧,致力于单片机技术的入门教学,带您体验单片机最小系统的极致设计。完全图解说明,呈现智慧演绎! 本制作为单片机和ISP下载电路的最小系统,适合初学者快速入门。元器件少、制作成功率高,修改和扩展性强。单片机采用STC12C2052,内置 复位、时钟振荡电路,无需外围电路即可独立工作。串口ISP下载功能,20脚DIP封装,可替换传统的AT89C2051。本制作将会在本人即将出版的新 书《单片机入门白皮书(暂定名)》中用到,并包含更细致的介绍及后继开发应用。敬请关注! ________________________________________________________________________________ 采用面包板作为单片机最小系统板基础 面包板内容电气结构 本制作所需要的所有元器件 电池盒:采用3节7号电池来给单片机系统提供4

51单片机 串口通信

ε祈祈猫儿з 提交于 2020-02-15 11:13:54
说明 平台:windows 10教育版64位 开发工具:普中科技 HC6800-ES V2.0 、keil uVision2 原理 哔哩哔哩视频教程: 串口通信原理 文档: 普中科技51单片机教程 步骤 1、确定定时器T1的工作方式(TMOD) 这里我们用的是T1定时器的工作方式2,自动重装初值 2、计算T1的初值(TH1,TH2) 计算公式: SMOD = 0波特率正常。SMOD = 1波特率增倍。T1溢出率就是T1定时器溢出一次的时间T的倒数,T1溢出率 = 1/T; 设X为初值,因为8位数据,所以,一次溢出时间 = 【256-X】*12/晶振频率,得出T1的溢出率再运用之前的公式,就可以算出定时器 初值。 这里给出一个常用的表格: 需要注意的是,普中这块开发板用的晶振是12Mhz的,所以选择值的时候要注意,另外因为用的是12Mhz的晶振,不是11.0592Mhz,计算出来的T1定时的初值将不是一个整数,这样进行通信时会产生累计误差。在实践过程中,笔者发现,在4800及以下波特率通信时,因为误差较小,所以产生的影响很小,在通信时没有发生过异常现象,但是高于4800时,则会产生明显误差,通信时传输的数据会严重失真,建议采用4800以下的波特率。 3、启动定时器T1 4、确定串行口工作方式(SCON) 之类可以有两种代码: 一是按位设置,而是整块设置,但其实本质都是按位设置。

蓝桥杯(单片机组)学习笔记(六)--------DS1302

家住魔仙堡 提交于 2020-02-15 01:58:44
1.DS1302 DS1302是低功耗实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。 1.引脚分析 原理图 DS1302是BCD码作为编码方式的,而且是压缩BCD码,8位表示0-99整数(Year = 99),7位表示0-79整数(Sec、Min = 60),6位表示0-49整数(Hour = 24、Date = 31),5位表示0-19整数(Month = 12),4位表示0-9整数(WeekDay = 7)。DS1302是变种SPI,通过SCLK和I/O相互配合,发送和接收信息。SCLK在上升沿前,主机通过I/O口发送数据,DS1302在上升沿是接收;SCLK在下降沿后,DS1302通过I/O口发送数据,主机接收。 使用同步串行通讯简化了DS1302 与微处理器的接口。与时钟/RAM 通讯只需要三根线: CE(也是原理图上的RST,SDA)(读写时必须保持高电平),I/O (数据线), and SCLK (串行时钟)。 2.寄存器结构 如上图,命令字启动每一次数据传输. MSB (位 7)必须是逻辑1. 如果是 0,则禁止对DS1302写入. 位 6 在逻辑0时规定为时钟/日历数据,逻辑1时为RAM数据.位 1 至 位 5 表示了输入输出的指定寄存器