基于atmega16的spi程序和片内ADC驱动下载

weixin_39820535 2019-07-06 01:00:20
基于atmega16的spi程序和片内ADC驱动,内附基于atmega16的SPI通信程序,和5310DAC驱动程序,以及片内ADC的驱动程序,proteus仿真程序 希望可以帮到初学的人,
相关下载链接://download.csdn.net/download/sbily1988/2857367?utm_source=bbsseo
...全文
7 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
马潮老师编写的avr教材。 书中以m16为例举了实际应用的例子。 很不错。 书中断 2.2 ATmega16机的组成 ATMEL公司的AVR单机是一种基于增强RISC结构的、低功耗、CMOS技术、8位微控制器(Enhanced RISC Microcontroller),目前有Tiny、Mega两个系列50多种型号。它们的功能和外部的引脚各有不同,小到8-12个引脚,多到100个引脚,但它们内核的基本结构是一样的,指令系统相容。本书将以性能适中的ATmega16为主线,介绍和讲述AVR单机的组成,以及如何应用在嵌入式系统中。在正式的产品开发与设计时,设计者可根据系统的实际需要选择合适型号的AVR单机。 2.2.1 AV R单机的内核结构 图 2-2 AVR单机的内核结构示意图 华东师范大学 电子科学技术系 马潮 2-4 基于 AVR 的单嵌入式系统原理与实践应用 尽管AVR单机系列有几十种的型号,但它们有着相同的内核结构,指令兼容。图2-2为典型的AVR单机的内核结构图。 为了提高MCU并行处理的运行效率,AVR单机采用了程序存储器和数据存储器使用不同的存储空间和存取总线的Harvard结构。算术逻辑单元(ALU)使用单级流水线操作方式对程序存储器进行访问,在执行当前一条指令的同时,也完成了从程序存储器中取出下一条将要执行指令的操作,因此执行一条指令仅需要一个时钟周期。 在AVR的内核中,由32个访问操作只需要一个时钟周期的8位通用工作寄存器组成了“快速访问寄存器组”。“快速访问”意味着在一个时钟周期内执行一个完整的ALU操作。这个ALU操作中包含三个过程:从寄存器组中取出两个操作数,操作数被执行,将执行结果写回目的寄存器中。这三个过程是在一个时钟周期内完成的,构成一个完整的ALU操作。 在32个通用工作寄存器中,有6个寄存器可以合并成为3个16位的,用于对数据存储器空间进行间接寻址的间接地址寄存器(存放地址指针),以实现高效的地址计算。这3个16位的间接地址寄存器称为:X寄存器,Y寄存器和Z寄存器。其中Z寄存器还能作为间接寻址程序存储器空间的地址寄存器,用于在Flash程序存储器空间进行查表等操作。 AVR的算术逻辑单元(ALU)支持寄存器之间,立即数与寄存器之间的算术与逻辑运算功能,以及单一寄存器操作。每一次运算操作的结果将影响和改变状态寄存器(SREG)的值。 使用条件转移、无条件转移和调用指令,可以直接访问全部Flash程序存储器空间以及控制程序的执行顺序。大部分AVR指令为单一16位格式,只有少数指令为32位格式。因此,AVR的程序存储器单元为16位,即每个程序地址(两字节地址)单元存放一条单一的16位指令字。而一条32位的指令字,则要占据2个程序存储器单元。 ATmega16机的Flash程序存储器空间可以分成两段:引导程序段(Boot program section)和应用程序段(Application program section)。两个段的读写保护可以分别通过设置对应的锁定位(Lock bits)来实现。在引导程序段内驻留的引导程序中,可以使用SPM指令,实现对应用程序段的写操作(实现在应用自编程IAP功能,使系统能够自己更新系统程序)。 在响应中断服务和子程序调用过程时,程序计数器PC中的返回地址将被存储于堆栈之中。堆栈空间将占用数据存储器(SRAM)中一段连续的地址。因此,堆栈空间的大小仅受到系统总的数据存储器(SRAM)的大小以及系统程序对SRAM的使用量的限制。用户程序应在系统上电复位后,对一个16位的堆栈指针寄存器SP进行初始化设置(或在子程序和中断程序被执行之前)。 在AVR中,所有的存储器空间都是线性的。数据存储器(SRAM)可以通过5种不同的寻址方式进行访问。 AVR的中断控制由I/O寄存器空间的中断控制寄存器和状态寄存器中的全局中断允许位组成。每个中断都分别对应一个中断向量(中断入口地址)。所有的中断向量构成了中断向量表,该中断向量表位于Flash程序存储器空间的最前面。中断的中断向量地址越小,其中断的优先级越高。 I/O空间为连续的64个I/O寄存器空间,它们分别对应MCU各个外围功能的控制和数据寄存器地址,如控制寄存器、定时器/计数器、A/D转换器及其他的I/O功能等。I/O寄存器空间可使用I/O寄存器访问指令直接访问,也可将其映射为通用工作寄存器组后的数据存储器空间,使用数据存储器访问指令进行操作。I/O寄存器空间在数据存储器空间的映射地址为 $020~$05F。 AVR单机的性能非常强大,所以它的内部结构相对8031结构的单机要复杂。对于刚开始接触和学习单机的人员,以及了解8051结构单机的人来讲,在这里尽管不会马上理解AVR内核的全部特点,但通过以后的逐步学习,应逐渐深入的体会和掌握它的原理, 华东师范大学 电子科学技术系 马潮 2-5 第 2 章 AVR 单机的基本结构 这对于熟练的应用AVR设计开发产品,以及将来学习使用更新的单机都会有很大的帮助。技术是在不断的发展的。 2.2.2 典型 AVR芯ATmega16特点 AVR系列单机中比较典型的芯ATmega16。这款芯具备了AVR系列单机的主要的特点和功能,不仅适合应用于产品设计,同时也方便初学入门。其主要特点有: (1)采用先进RISC结构的AVR内核 131条机器指令,且大多数指令的执行时间为单个系统时钟周期; 32个8位通用工作寄存器; 工作在16MHz时具有16MIPS的性能。 配备只需要2个时钟周期的硬件乘法器 (2)内含有较大容量的非易失性的程序和数据存储器 16K字节在线可编程(ISP)Flash程序存储器(擦除次数>1万次),采用Boot Load技术支持IAP功能; 1K字节的内SRAM数据存储器,可实现3级锁定的程序加密; 512个字节内在线可编程EEPROM数据存储器(寿命>10万次); (3)内含JTAG接口 支持符合JTAG标准的边界扫描功能用于芯检测; 支持扩展的内在线调试功能 可通过JTAG口对内的Flash、EEPROM、配置熔丝位和锁定加密位实施下载编程; (4)外围接口 2个带有分别独立、可设置预分频器的8位定时器/计数器; 1个带有可设置预分频器、具有比较、捕捉功能的16位定时器/计数器; 内含独立振荡器的实时时钟RTC; 4路PWM通道; 8路10位ADC 面向字节的两线接口TWI(兼容I2C硬件接口); 1个可编程的增强型全双工的,支持同步/异步通信的串行接口USART; 1个可工作于主机/从机模式的SPI串行接口(支持ISP程序下载); 内模拟比较器; 内含可编程的,具有独立内振荡器的看门狗定时器WDT; (5)其它的特点 内含上电复位电路以及可编程的掉电检测复位电路BOD; 内含有1M/2M/4M/8M,经过标定的、可校正的RC振荡器,可作为系统时钟使用; 多达21个各种类型的内外部中断源; 有6种休眠模式支持省电方式工作; (6)宽电压、高速度、低功耗 工作电压范围宽:ATmega16L 2.7—5.5v,ATmega16 4.5—5.5v; 运行速度:ATmega16L 0—8M,ATmega16 0—16M; 低功耗:ATmega16L工作在1MHz、3v、25度时的典型功耗为,正常工作模式 1.1mA,空闲工作模式 0.35mA,掉电工作模式 <1uA; (7)芯引脚和封装形式 ATmega16共有32个可编程的I/O口(脚),芯封装形式有40引脚的PDIP、44引脚的TQFP和44引脚的MLF封装。 华东师范大学 电子科学技术系 马潮 2-6 基于 AVR 的单嵌入式系统原理与实践应用 2.2.3 外部引 脚与封装 ATmega16机有三种形式的封装:40脚双列直插PDIP、44脚方形的TQFP和MLF形式(贴形式)。其外部引脚封装如图2-3所示。 图2-3 ATmage16 外部引脚与封装示意图 其中,各个引脚的功能如下: (1)电源、系统晶振、芯复位引脚 Vcc: 芯供电(内数字电路电源)输入引脚,使用时连接到电源正极。 AVcc:为端口A和ADC模拟电路电源输入引脚。不使用ADC时,直接连接到电源正极;使用ADC时,应通过一个低通电源滤波器与Vcc连接。 AREF:使用ADC时,可作为外部ADC参考源的输入引脚。 GND: 芯接地引脚,使用时接地。 XTAL2:内反相振荡放大器的输出端。 XTAL1:内反相振荡放大器和内部时钟操作电路的输入端。 RESET:RESET为芯复位输入引脚。在该引脚上施加(拉低)一个最小脉冲宽度为1.5us的低电平,将引起芯的硬件复位(外部复位)。 (2)32根 I/O引脚,分成PA、PB、PC和PD四个8位端口,他们全部是可编程控制的双(多)功能复用的I/O引脚(口)。 四个端口的第一功能是通用的双向数字输入/输出(I/O)口,其中每一位都可以由指令设置为独立的输入口,或输出口。当I/O设置为输入时,引脚内部还配置有上拉电阻,这个内部的上拉电阻可通过编程设置为上拉有效或上拉无效。 如果AVR的I/O口设置为输出方式工作,当其输出高电平时,能够输出20mA的电流,而当其输出低电平时,可以吸收40mA的电流。因此AVR的I/O口驱动能力非常强,能够直接驱动LED发光二极管、数码管等。而早期单机I/O口的驱动能力只有5mA,驱动LED时,还需要增加外部的驱动电路和器件。 芯Reset复位后,所有I/O口的缺省状态为输入方式,上拉电阻无效,即I/O为输入高阻的三态状态。 以上我们简单介绍了ATmega16机的主要特性以及引脚封装。可以看出,小小的一 华东师范大学 电子科学技术系 马潮 2-7 第 2 章 AVR 单机的基本结构 块芯,其内部的组成结构却是相当复杂的。也正式这种复杂,加上多样的程序,才使得单机在实际应用中变化无穷。 下面,我们从ATmega16的内部结构出发,逐步的介绍它的工作原理和使用方法。 2.3 ATmega16内部结构 图2-4 ATmage16 的结构框图 华东师范大学 电子科学技术系 马潮 2-8 基于 AVR 的单嵌入式系统原理与实践应用 图2-4是ATmage16 的结构框图。它是在AVR内核(图2-3)的基础上,具体化的一个实例。从图中可以看出,ATmega16内部的主要构成部分有:
设计思路: 1、系统用到AD、UART、PWM、SPI,考虑成品的体积,采用arduino nano 2、语音采样使用驻极体麦克风,经200倍前置放大,再进行8位AD采样,采样率8kHz,可达到电话音质,满足需求 3、门禁系统通信的特点是多对一,距离10~100m,通信速率要满足语音通信、控制信号传输,因此采用485通信,通信速率512Kbps 4、语音播放使用8位PWM,功放芯采用常见的LM386(LM386数据手册) 5、显示屏采用Nokia5110,SPI通信 6、键盘采用10位ADC键盘,16个按键 7、开锁电路使用继电器实现 硬件设计组成: 1.Arduino Nano,主控直接采用arduino nano,ATmega328(ATmega328数据手册)由于485通信和下载程序共用0、1脚,因此要通过拨码开关切换0、1脚功能 2、电源电路,整个系统使用外部12v电源供电,用于驱动继电器和LM386,12v电源通过LM2940(LM2940数据手册)得到5v电源,Nokia5110显示屏需要3.3v供电,直接采用nano上的3.3v电源 3、ADC键盘电路,由于arduino接口较少,直接采用ADC键盘,一次挂载20个按键没有问题,每个分压电阻使用1kΩ,线性度非常不错。 4、485通信电路,使用了两MAX485(MAX485数据手册)组成了全双工通信,实际测试,10m网线,2Mbps,完全不丢包,另外测试过2m,2Mbps的串口通信,也是完全不丢包 5、麦克风采样电路,语音采样,使用普通驻极体麦克风,经过LM358(LM358数据手册)的200倍放大后,送入ADC 6、功放电路,功放直接采用常见的LM386典型电路,PWM信号经过积分电路,再送入LM386,为了提高音量,使用12v供电,实测效果不错,5v供电时,噪音非常大,稍微一大声就失真 7、开锁电路,开锁功能可以通过电磁锁实现,这里只用了继电器并留出了接线口,继电器电流也不小,保险起见使用了一个9014扩流,并反向并联一个二极管吸收反向电流 附件内容包括: 门禁系统硬件电路设计原理图和PCB,用AD软件打开; 源代码; 相关电路设计说明; 相关参考设计资料;
0 1.txt 2012-06-11 21:42 554,081 13 套ROOTKITS源码—Windows内核的安全防护.rar 2012-06-11 21:41 1,322,993 1)华为研发(pdf版).pdf 2012-06-11 21:07 9,883 806419蚁群算法程序.rar 2012-06-11 21:40 60 access连接字符串.txt 2012-06-11 21:08 666 adc-test.c 2012-06-11 21:07 765,000 AS3游戏编程大学.pdf 2012-06-11 21:40 750,563 ATL开发指南源码.rar 2012-06-11 21:05 186,863 BIOS练习工具加BIOS完全手册.rar 2012-06-11 21:03 340,134 C++ Primer Plus.第五版.习题解答和例题代码.rar 2012-06-11 21:03 956,190 C++ Primer中文版(第4版)中的源代码.rar 2012-06-11 21:12 1,386,523 C++-打飞机的游戏.rar 2012-06-11 21:06 78,719 C++USB接口的鼠标驱动程序.rar 2012-06-11 21:07 50,067 C++VC编写的退火算法.rar 2012-06-11 21:06 67,891 C++一示所有点阵字库内容的工具源代码.rar 2012-06-11 21:11 60,547 C++工会管理系统源代码.rar 2012-06-11 21:22 2,618,588 COM技术内幕源码.rar 2012-06-11 21:16 97,280 C语言 内存管理详解.doc 2012-06-11 21:06 387,499 c语言写的一个多任务内核.rar 2012-06-11 21:15 6,669,174 C语言常用算法集(人手一份).pdf 2012-06-11 21:44 2,279 C语言编一个程序完成64位数据(无符号)的加法,减法运算.txt 2012-06-11 21:43 1,480,155 Direct3D加载3d文件.rar 2012-06-11 21:29 22,102 DSP编程一周通.rar 2012-06-11 21:04 837,926 fatfs-0.08b.zip 2012-06-11 21:11 48,640 FFT算法.doc 2012-06-11 21:28 10,891,658 GPS应用程序设计.程序源代码.rar 2012-06-11 21:20 610,619 gram_analysis.rar 2012-06-11 21:38 536,654 HTML、CSS、JavaScript标签参考.pdf 2012-06-11 21:00 29,184 inline-block深入理解.doc 2012-06-11 21:44 6,947,979 Linux内核完全注释V3.0书签版(带源码).rar 2012-06-11 21:31 11,599 MATLAB仿真程序OFDM程序.txt 2012-06-11 21:37 14,584,477 msdn for vb6.0简体中文版.zip 2012-06-11 21:02 12,288 OpenCV 测试代码.doc 2012-06-11 21:41 0 OpenGL编程基础 源码.zip 2012-06-11 21:26 55,505 PHP实现多服务器共享SESSION数据.docx 2012-06-11 21:40 49,392 Pointers on C.zip 2012-06-11 21:22 3,386,253 RTOS_MDK uCOS-II for STM32(LCD5110).rar 2012-06-11 21:19 26,179 Ruby批量编译C源程序.pdf 2012-06-11 21:02 383,822 SPI总线操作E2PROM(本例为25AA020A)实例——浅影.pdf 2012-06-11 21:31 5,665 SSL欺骗全面解析.txt 2012-06-11 21:03 596,394 TC打地鼠.rar 2012-06-11 21:24 10,293 tftp.rar 2012-06-11 21:07 172,570 uC-GUI-字体转换.rar 2012-06-11 21:11 2,872,837 vb酒店客房管理信息系统.rar 2012-06-11 21:05 161,792 vb黑客木马编程(精选大全)(免费).doc 2012-06-11 21:01 909,116 VC++动态链接库(DLL)编程.pdf 2012-06-11 21:25 138,752 VC++开发BHO插件——定制你的浏览器.doc 2012-06-11 21:33 800,368 VC绘图 游戏简易教程.pdf 2012-06-11 21:41 21,331 ViewTextFileInWinCE-EVC源代码工程.rar 2012-06-11 21:11 27,271,175 Visual C++.NET小游戏开发时尚编程百例.rar 2012-06-11 21:42 275,968 Window7系统如何安装Visual_C++_6.0.doc 2012-06-11 21:26 2,399,725 windows API 一日一练.pdf 2012-06-11 21:28 249,332 Windows核心编程源码.rar 2012-06-11 21:40 1,000,923 Windows程序设计(第5版)配套代码.rar 2012-06-11 21:31 5,504,736 《PC游戏编程(网络游戏篇)》光盘源代码.rar 2012-06-11 21:09 461,754 一个各种着名算法问题的c源程序包,推荐.rar 2012-06-11 21:37 125,952 三种网页跳转代码.doc 2012-06-11 21:42 4,478,005 中国象棋C++(1).rar 2012-06-11 21:42 4,478,005 中国象棋C++.rar 2012-06-11 21:10 18,808 为智能电子钟添加阴历计时功能.rar 2012-06-11 21:35 38,896 二叉树的遍历.zip 2012-06-11 21:13 224,515 人脸识别源程序(1).rar 2012-06-11 21:13 224,515 人脸识别源程序.rar 2012-06-11 21:13 47,584 仿真终端vt100.rar 2012-06-11 21:35 50,176 关于c语言和汇编语言相互嵌套调用的学习总结.doc 2012-06-11 21:11 190,993 典型算法包.rar 2012-06-11 21:16 264,555 内存管理和设备调试中文.pdf 2012-06-11 21:30 267,989 冈萨雷斯数字图像处理matlab版源码V1.1.3(1).rar 2012-06-11 21:30 267,989 冈萨雷斯数字图像处理matlab版源码V1.1.3.rar 2012-06-11 21:31 429,568 创建嵌入式操作系统.doc 2012-06-11 20:57 2,442 单向链表.txt 2012-06-11 21:10 10,962 单机控制的仓库粮食害虫检测报警系统.rar 2012-06-11 21:44 0 哈希表实例.zip 2012-06-11 21:13 1,001,214 坦克游戏源代码.zip 2012-06-11 21:17 183,973 基于ATmega8 的ucos-II应用.rar 2012-06-11 21:01 12,345,799 基于FGPA的PCM编译码模块设计.zip 2012-06-11 21:06 3,769,694 基于LABVIEW编程环境的SQLSERVER ACCESS MYSQL 数据库的测试源代码.rar 2012-06-11 21:12 81,505 基于神经网络的文字识别系统.rar 2012-06-11 21:07 39,498 基因遗传算法.zip 2012-06-11 21:07 1,061 基本的时钟中断程序.rar 2012-06-11 21:10 4,071,328 多用电热毯定时器.zip 2012-06-11 21:38 46,080 字符串的输入,删除练习.doc 2012-06-11 21:32 318,464 实验42:L298电机驱动程序(ATme.rar 2012-06-11 21:07 13,091 嵌入式拼音输入法C代码.rar 2012-06-11 21:12 64,623 巴特沃斯、切比雪夫I和椭圆滤波器设计的源程序.zip 2012-06-11 21:29 846,851 并行算法实践-mpi源程序.rar 2012-06-11 21:01 58,368 张军GPS高程总结.doc 2012-06-11 21:18 155,836 微博质量监控程序.rar 2012-06-11 21:35 535,650 微视图像采集卡驱动程序LV8.2.rar 2012-06-11 21:27 5,252 打印源代码.rar 2012-06-11 21:26 57,623 打开计算机的全新世界:云计算.txt 2012-06-11 21:13 98,245 扫雷游戏的源程序(1).zip 2012-06-11 21:13 98,245 扫雷游戏的源程序.zip 2012-06-11 21:40 346 插入排序.txt 2012-06-11 21:41 241,873 操作系统实验三-进程调度.rar 2012-06-11 21:10 16,944 数字闹钟源码.rar 2012-06-11 21:34 2,000,560 数据库登入界面.7z 2012-06-11 21:09 1,553,768 数据结构算法Visual.C.6.0程序集_源码.rar 2012-06-11 21:42 87,040 时域卷积定理的证明.ppt 2012-06-11 21:10 4,371 更改网关IP.rar 2012-06-11 20:57 1,419 栈的实现.txt 2012-06-11 21:18 57,078 汇编数显大型交通灯控制.rar 2012-06-11 21:35 1,055,980 流量计算.rar 2012-06-11 21:11 8,198,339 王凡的latex笔记源码v3.rar 2012-06-11 21:34 803 用MATLAB实现图像锐化的程序代码.m 2012-06-11 21:13 31,839 用Visual C++实现排序算法大全.rar 2012-06-11 21:09 27,688 用单机制作的高精度数显计数器.rar 2012-06-11 21:10 9,654 用单机实现公历到农历换算的新方法.zip 2012-06-11 21:08 2,318 用英文单词模拟数学计算代码.txt 2012-06-11 21:06 13,654 男生不应该误解女生的15个地方.docx 2012-06-11 21:34 16,410 病毒代码.txt 2012-06-11 21:36 142,693 直方图均衡化的c语言实现.rar 2012-06-11 20:58 58,895 矩形排样-源码.rar 2012-06-11 21:28 44,781 端口转发Consoletransport.rar 2012-06-11 21:02 1,503,848 第1章[1].ASP.NET_3.5与开发工具.pdf 2012-06-11 21:29 8,300 简单文字识别VC代码.txt 2012-06-11 21:32 9,279 粒子群算法的源代码.rar 2012-06-11 21:43 96,320 红黑树源程序.pdf 2012-06-11 21:08 302 给一批WORD加内容的宏.txt 2012-06-11 21:08 554,651 网上书店源码.rar 2012-06-11 21:17 2,668,543 网络爬虫之Java版.rar 2012-06-11 21:00 970,262 网马解密参考手册.pdf 2012-06-11 21:47 151,626,427 若干源程序资料12.rar 2012-06-11 21:43 2,086 获取磁盘剩余空间.ZIP 2012-06-11 21:11 4,731 蓝牙实例.rar 2012-06-11 21:05 11,460 蜂群算法C注释.doc 2012-06-11 21:15 2,194 计算器.rar 2012-06-11 21:39 2,815 课设1——图的创建与遍历.txt 2012-06-11 21:41 975,894 谁动了我的奶酪.pdf 2012-06-11 21:12 27,376 象棋游戏源代码.rar 2012-06-11 21:37 6,814 软件安装之--RPM命令大全!.txt 2012-06-11 21:04 740,663 连连看VB.rar 2012-06-11 21:40 66,980 速度很快解码.rar 2012-06-11 20:57 1,515 链表队列实现.txt 2012-06-11 20:57 9,070 队列的双向链表.txt 2012-06-11 21:39 7,887,246 静态页面开发全集.pdf 2012-06-11 21:13 370,209 飞鸽传书的源代码.rar 2012-06-11 21:33 774,071 高级Linux程序设计.pdf 2012-06-11 21:24 583,680 鸡蛋破损自动检测系统.doc

12,798

社区成员

发帖
与我相关
我的任务
社区描述
CSDN 下载资源悬赏专区
其他 技术论坛(原bbs)
社区管理员
  • 下载资源悬赏专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧