欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年嵌入式ADS实验指导书 .pdf

    • 资源ID:27189465       资源大小:2.37MB        全文页数:37页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年嵌入式ADS实验指导书 .pdf

    实验一嵌入式微处理器系统的开发环境一、 实验环境PC机一台软件: ADS 1.2集成开发环境一套二、实验目的1. 了解嵌入式系统及其特点;2. 熟悉嵌入式系统的开发环境和基本配置并能编写简单的汇编程序三、实验内容1. 嵌入式系统的开发环境、基本配置2. 使用汇编指令完成简单的加法实验四、实验步骤(1)在新建一个目录,目录名为experiment 。(2)点击 WINDOWS 操作系统的“开始| 程序 |ARM Developer Suite v1.2 |Code Warrior for ARM Developer Suite”启动 Metrowerks Code Warrior,或双击“ ADS 1.2”快捷方式启动。启动 ADS 1.2 如图 1-1 所示:图 1-1 启动 ADS1.2 (3) 在CodeWarrior 中新建一个工程的方法有两种,可以在工具栏中单击“New ”按钮,也可以在“ File ”菜单中选择“ New,”菜单。这样就会打开一个如图1-2 所示的对话框。选择【File 】-【New , 】,使用 ARM Executable Image 工程模板建立一个工程,名称为 ADS ,目录为 D:experiment。图 1-2 新建文件在这个对话框中为用户提供了7 种可选择的工程类型:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 37 页 - - - - - - - - - 1)ARM Executabl Image:用于由 ARM 指令的代码生成一个ELF 格式的可执行映像文件;2)ARM Object Library:用于由 ARM 指令的代码生成一个armar 格式的目标文件库;3)Empty Project:用于创建一个不包含任何库或源文件的工程;4) Makefile Importer Wizard : 用 于 将 Visual C 的 nmake 或 GNU make 文 件 转 入 到CodeWarrior IDE 工程文件;5)Thumb ARM Executable Image:用于由 ARM 指令和 Thumb 指令的混和代码生成一个可执行的 ELF 格式的映像文件;6)Thumb Executable image:用于由 Thumb 指令创建一个可执行的ELF 格式的映像文件;7)Thumb Object Library:用于由 Thumb 指令的代码生成一个armar 格式的目标文件库。(4)选择【 File 】- 【New , 】建立一个新的文件TEST1.S,设置直接添加到项目中。输入如程序代码,并保存,此时在工程窗口中可以看到TEST1.S文件。图 1-3 新建 test1.s (5) 选择【 Edit 】 - 【Perferences, 】 ,在Font 选项设置字体是Fixedsys ,Script是CHINESE_GB2312。图 1-4 设置字体(6) 选择【 Edit 】 - 【DebugRel Settings, 】,在DebugRel Settings对话框的左边选择ARM Linker 项,设置链接地址。点击“DebugRel Settings,”图标按钮,即可进行工程的地址设置、输出文件设置、编名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 37 页 - - - - - - - - - 译选项等,如图 1-5 所示。在“ ARM Linker ”对话框设置连接地址,在“Language Settings”中设置各编译器的编译选项。对于简单的软件调试,可以不进行连接地址的设置,直接点击工程窗口的“Make ”图标按钮,即可完成编译连接。若编译出错,会有相应的出错提示,双击出错提示行信息,编辑窗即会使用光标指出当前出错的源代码行,编译连接输出窗口如图1-6 所示。同样,您可以在【 Project】菜单中找到相应的命令。图 1-5 连接器选项设置图 1-6 output选项卡OUTPUT 选项卡: 该选项卡用来控制连接器进行连接操作的类型。其中Linktype 选项组中的单选按钮确定使用的连接方式。这里选择 Simple ,连接器将根据连接器选项中指定的地址映射方式,生成简单的ELF 格式的映像文件,所生成的映像文件中的地址映射关系比较简单.当选择 Simple 连接类型时,需要设置下列的连接器选项,如图1-5 所示。 RO Base 文本框中填入 0 x40000000。地址 0 x40000000 是开发板上 SDRAM 的真实地址, 是由系统的硬件决定的;RW Base 文本框中填入 0 x40003000 指的是系统可读写内存的地址。也就是说, 在0 x400000000 x40003000 之间是只读区域,存放程序的代码段,从0 x40003000 开始是程序的数据段。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 37 页 - - - - - - - - - Layout 选项卡: 该选项卡在连接方式位Simple 时有效,它用来安排一些输入段在映像文件中的位置。 Place at beginning of image 选项组用于指定将某个输入段放置在它所在的运行时域的开头。 包含复位异常中断处理程序的输入段通常放置在运行时域的开头。这里, 在Object/Symbol 文本框中指定目标文件的名称init.o, 在Section 文本框中指定输入段的名称init,从而确定了 init.s 源文件中的 init 输入段位指定的输入段。如图1-7所示。图 1-7 Layout 选项卡中连接器选项(6) 选择【 Project】- 【 Make 】 ,或者按下快捷键F7,将编译链接整个工程。如图 1-8 所示为工程窗口中的图标按钮, 通过这些图标按钮,可以快速的进行工程设置,编译连接 ,启动调试等等 . 它们从左到右分别为图 1-8 工程窗口中的图标按钮A)DebugRel Settings, 工程设置;B)Synchronize Modification Dates 同步修改日期;C)Make 编译连接;D)Debug 启动 ADX 进行调试;E)Run 启动 ADX 调试 , 并直接运行;F)Project Inspector 工程检查 , 查看和配置工程中源文件的信息;对于简单的软件调试, 直接点击工程窗口的” Make ”图标按钮, 即可完成编译. 编译连接输出窗口如图 1-9 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 37 页 - - - - - - - - - 图 1-9 编译连接输出窗口(7) 选择【 Project】- 【 Debug 】 ,或者按下快捷键F5。IDE 环境就会启动AXD调试软件,接着可以执行单步、全速运行调试。图 1-10 AXD 调试窗口注意:本实验使用软件仿真,所以要在AXD中选择【 Options 】-【Configure Target, 】菜单,然后在 Choose Target窗口中选用ARMUL 软件仿真。图 1-11 目标环境选择五 思考题1. 工程模板有何作用?2. 如何强行重新编译工程的所有文件?( 提示:选择【 Project】- 【Remove Object Code, 】删除工程中的*.obj文件 ) 六 参考程序AREA Example1,CODE,READONLY ; 声明代码段Example1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 37 页 - - - - - - - - - ENTRY ; 标识程序入口CODE32 ; 声明 32 位 ARM 指令START MOV R0,#15 ; 设置参数MOV R1,#8 ADDS R0,R0,R1 ; R0 = R0 + R1 B START END 实验预作关键过程及结果图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 37 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 37 页 - - - - - - - - - 实验二汇编指令实验一、实验环境 PC机一台 ADS 1.2集成开发环境一套二、实验目的1. 了解 ADS 1.2 集成开发环境及ARMulator 软件仿真方法;2. 掌握 ARM7TDMI 汇编指令的用法,并能编写简单的汇编程序;3. 掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。三、实验内容1. 使用 LDR/STR指令完成存储器的访问。2. 使用数据处理指令实现数据传送和算术和逻辑运算。3. 使用 ADS 1.2 软件仿真,单步、 全速运行程序, 设置断点,打开寄存器窗口(Processor Registers)监视寄存器的值,打开存储器观察窗口(Memory) 监视存储器的值。根据以上要求完成该操作:使用 LDR指令读取0 x40003100 上的数据, 将数据加 1,若结果小于10 则使用 STR指令把结果写回原地址,若结果大于等于10,则把 0 写回原地址, 周而复此循环;使用ADS 1.2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口 (Processor Registers)监视 R0 、R1的值,打开存储器观察窗口(Memory) 监视 0 x40003100 上的值。四、实验步骤(1) 启动 ADS 1.2 ,使用 ARM Executable Image 工程模板建立一个工程Instruction1。(2) 建立汇编源文件TEST2.S,编写实验程序,然后添加到工程中。(3) 设置工程链接地址RO Base 为 0 x40000000,RW Base为 0 x40003000。设置调试入口地址 Image entry point为 0 x40000000。(4) 编译链接工程,选择【Project】 - 【Debug】 ,启动 AXD进行软件仿真调试。(5) 打开寄存器窗口(Processor Registers),选择 Current 项监视 R0 ,R1 的值。打开存储器观察窗口 (Memory ) , 设置观察地址为0 x40003100, 显示方式 Size 为32Bit ,监视 0 x40003100 地址上的值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 37 页 - - - - - - - - - 图 2-1 Memory 窗口显示格式设置寄存器显示格式与之类似。使用鼠标左键选择某一个寄存器,然后点击鼠标右键, Format 项中选择显示格式Hex,Decimal 等等。如图 2-2 所示。图 2-2 设置寄存器显示格式(6)单步运行程序,可以设置/ 取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和0 x40003100 地址上的值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 37 页 - - - - - - - - - 图 2-3 调试程序窗口六、思考题1.LDR 伪指令与LDR加载指令的功能和应用有何区别,举例说明?2.LDR/STR 指令的前索引偏移指令如何编写?指令是怎样操作的?3. 在 AXD调试时如何复位程序?( 提示:选择【 File 】 -【Reload Current Image】重新加载映象文件) 七、参考程序COUNT EQU 0 x40003100 ; 定义一个变量,地址为0 x40003100 AREA Example2,CODE,READONLY ; 声明代码段Example2 ENTRY ; 标识程序入口CODE32 ; 声明 32 位 ARM 指令START LDR R1,=COUNT ; R1 = COUNT MOV R0,#0 ; R0 = 0 STR R0,R1 ; R1 = R0,即设置 COUNT 为 0 LOOP LDR R1,=COUNT LDR R0,R1 ; R0 = R1 ADD R0,R0,#1 ; R0 = R0 + 1 CMP R0,#10 ; R0 与 10 比较,影响条件码标志MOVHS R0,#0 ; 若 R0大于等于10,则此指令执行,R0 = 0 STR R0,R1 ; R1 0) 。四、实验预习要求(1)仔细阅读 ARM 嵌入式系统基础教程中第4 章 ARM 指令系统的内容。(2)仔细阅读产品配套光盘附带文档ADS 集成开发环境及仿真器应用或其他相关资料,了解 ADS 工程编辑和AXD 调试的内容。 (本实验使用软件仿真) 五、实验步骤(1)启动 ADS 1.2 ,使用 ARM Executable Image工程模板建立一个工程ProgramC。(2)建立源文件Startup.S和 Test.c ,编写实验程序,然后添加到工程中。(3)设置工程链接地址RO Base为 0 x40000000,RW Base为 0 x40003000。设置调试入口地址 Image entry point为 Ox40000000。(4)设置位于开始位置的起始代码段,如图3-1,3-2所示。图 3-1 设置位于开始位置的起始代码段(1)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 37 页 - - - - - - - - - 图 3-2 设置位于开始位置的起始代码段(2) (5)编译链接工程,选择ProjectDebug,启动 AXD 进行软件仿真调试。(6)在 Startups 的“ B Main ”处设置断点,然后全速动行程序。(7)程序在断点处停止。单步运行程序,判断程序是否跳转到C 程序中运行。(8)诜择Processor vlewsvariables 打开变量观察窗口,观察全局变量的值,然后单步全速运行程序,判断程序的运算结果是否正确。如图3-3 所示。图 3-3 ARM 实验 3 的运行观察结果六、思考题名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 37 页 - - - - - - - - - (1)在实验参考程序中,Startup.s 文件的作用是什么?如果没有Startup.s文件, C 程序运行会出错吗 ? (2)实验程序中的Main() 函数名是否可以更改为其他名字?(提示: Main 只是一个标号。 ) 七、参考程序;startup file IMPORT |Image$RO$Limit| IMPORT |Image$RW$Base| IMPORT |Image$ZI$Base| IMPORT |Image$ZI$Limit| IMPORT MAIN ;declare the main() in the C Prog AREA start,CODE,READONLY ENTRY CODE32 Reset LDR SP,=0 x40003f00 ;initial the C case LDR R0,=|Image$RO$Limit| LDR R1,=|Image$RW$Base| LDR R3,=|Image$ZI$Base| CMP R0,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,R0,#4 STRCC R2,R1,#4 BCC LOOP0 LOOP1 LDR R1,=|Image$ZI$Limit| MOV R2,#0 LOOP2 CMP R3,R1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 37 页 - - - - - - - - - STRCC R2,R3,#4 BCC LOOP2 B MAIN END / main file #define uint8 unsigned char #define uint32 unsigned int #define N 100 uint32 sum; void MAIN(void) uint32 i; sum = 0; for(i = 0;i 【Debug】 ,启动 AXD 进行 JTAG 仿真调试 (需要正确设置仿真器,注意:使用DebugInExram 生成目标时,使用片外RAM 进行仿真调试,JP6 跳线要设置为 Bank0-RAM 、Bank1-Flash,在 AXD 中设置仿真器参考如图5-2 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 37 页 - - - - - - - - - 图 5-2 片外 RAM 调试的仿真器设置8、若 JTAG 连接出错, 或 AXD 主窗口没有显示Startup.S 源程序, 按本书第2.5 节介绍的方法进行处理。9、全速运行程序, 程序将会在beepcon.c的主函数中停止(因为 main 函数起始处默认设置有断点 )。10、单击 Context Variable 图标按钮 (或者选择【 Processor Views】-【 Variables】)打开变量观察窗口, 通过此窗口可以观察局部变量和全局变量。选择【System Views】 - 【Debugger Internals】即可打开LPC2000 系列 ARM7 微控制器的片内外设寄存器窗口。11、可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。12、当仿真调试通过后关闭AXD ,在 ADS 1.2 集成开发环境中选用RelOutChip 生成目标,然后编译连接工程。13、将 EasyARM2200 开发板上的JP9 跳线短接, JP1、JP4 跳线断开, JP6 跳线设置为Bank0-Flash、Bank1-RAM ,JP7 跳线设置为OUTSIDE 。14、选择【 Project】-【Debug】 ,启动 AXD 进行 JTAG 仿真调试。此时EasyJTAG 仿真器将会把程序下载到片外FLASH 上(需要正确设置仿真器,参考第2.5 节)。注意:使用 RelOutChip 生成目标时, 使用片外 FLASH 进行仿真调试(或固化程序 ),JP6跳线要设置为Bank0-Flash、Bank1-RAM ,在 AXD 中设置仿真器参考如图5-3 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 37 页 - - - - - - - - - 图 5-3片外 FLASH 调试的仿真器设置15、按 EasyARM2200 开发板上的RST 复位键,观察程序是否能脱机运行。16、实验结束后,在AXD 中设置仿真器为片外RAM 调试方式的设置,以便于后面实验的正确操作。七、思考题为什么这个实验的工程不需要设置连接地址?( 提示: LPC2200 专用工程模板已集成了起动代码、编译选项和连接地址设置等等) 在实验参考程序中,如何控制蜂鸣器报警的速度?在 LPC2000 系列 ARM7微控制器中,有哪两个管脚作GPIO输出时需要外接上拉电阻?八、参考程序GPIO 输出控制实验1 的参考程序见程序清单。GPIO 输出控制实验1 参考程序/* *文件名: BEEPCON.C *功能:蜂鸣器控制。对蜂鸣器B1 进行控制,采用软件延时方法。*使用 I/O 口直接控制,采用灌电流方式。*说明:将跳线器JP9短接, JP4断开。*/ #includeconfig.h #define BEEPCON 0 x00000080/*P0.7引脚控制 B1,低电平蜂鸣*/ /* *名称: DelayNS() *功能:长软件延时。*入口参数: dly 延时参数,值越大,延时越久*出口参数:无*/ void DelayNS(uint32 dly) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 37 页 - - - - - - - - - uint32 i; for(;dly0;dly-) for(i=0;i【Debug】 ,启动 AXD 进行 JTAG 仿真调试。(6) 单步运行程序, 先短接 JP1, 观察 IO0PIN 寄存器的值, 然后断开JP1, 观察 IO0PIN寄存器的值。全速运行程序,短接/断开 JP1,控制蜂鸣器的蜂鸣。说明:可以通过Watch 窗口观察寄存器的值。选择【Processor Views】-【 Watch】打开 Watch 窗口,在Watch 窗口内点击鼠标右键,选择Add Watch, 项添加变量,如图6-2 所示。图 6-2 Watch 窗口在 Add Watch 窗口中的 Expression 项输入 *(unsigned long*)0 xE0028000) ,然后回车, 如图 6-3 所示,然后选择Add To View 按钮,即可在Watch 窗口观察IO0PIN 寄存器 (IO0PIN 寄存器的地址0 xE0028000) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 37 页 - - - - - - - - - 图 6-3 Add Watch 对话框在 Watch 窗口中选择一个观察变量,按Del 键即可删除此观察变量。注意:有些寄存器不能读出显示或读操作会影响到其它寄存器的值。七、思考题如果将 P0.30 设置为 GPIO输入模式,且管脚悬空,那么读取P0.30 得到的值是0 还是1?或者是不确定?如果需要读取当前P0.7 的输出值 ( 不是管脚上的电平) ,如何实现?八、参考程序GPIO 输入控制实验的参考程序见程序清单。GPIO 输入控制实验参考程序/* *文件名: READPIN.C *功能:读取I/O 引脚值,并输出控制蜂鸣器。*使用 I/O 口输入方式对P0.14 口进行扫描。*说明:将跳线器JP9短接, JP4断开,然后短接/断开 JP1(使 P0.14 为低 /高电平 )。*/ #includeconfig.h #define BEEPCON 0 x00000080/*P0.7引脚控制 B1,低电平蜂鸣*/ #define PIN_P014 0 x00004000/* 定义 P0.14 屏蔽字 */ /* *名称: main() *功能:读取P0.14 口的值,并输出控制蜂鸣器B1。*/ int main(void) uint32 i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 37 页 - - - - - - - - - PINSEL0=0 x00000000;/ 设置管脚连接GPIO IO0DIR=BEEPCON;/ 设置 B1 控制口为输出,其它I/O 为输入while(1) if(IO0PIN&PIN_P014)!=0)IO0SET=BEEPCON; else IO0CLR=BEEPCON; for(i=0;i【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。(6)选择【 Project】-【Debug】 ,启动 AXD 进行 JTAG 仿真调试。(7)全速运行程序, PC 机上的 EasyARM 软件会不断的显示“Hello World! ” 。如图 7-1所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 37 页 - - - - - - - - - 图 7-1 UART 实验运行结果七、思考题U0RBR 寄存器和 U0THR寄存器的地址是完全一样的,是不是说明接收寄存器和发送寄存器是同一物理寄存器呢?如果将实验参考程序中等待数据发送完毕的代码改为“while(U0LSR&0 x20)=0);” ,程序运行能得到正确结果吗?八、参考程序UART 实验的参考程序见程序清单。UART 实验参考程序/* *文件名: SENDSTR.C *功能:向串口发送数据。*说明:使用外部11.0592MHz 晶振,根据CONFIG.H 文件配置, Fpclk=11.0592MHz ;*通讯波特率115200,8 位数据位, 1 位停止位,无奇偶校验。*/ #includeconfig.h /* *名称: DelayNS() *功能:长软件延时*入口参数: dly 延时参数,值越大,延时越久*出口参数:无*/ void DelayNS(uint32 dly) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 37 页 - - - - - - - - - uint32 i; for(;dly0;dly-) for(i=0;i【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口(不要选择“十六进制方式显示” )。(6)选择【 Project】-【Debug】 ,启动 AXD 进行 JTAG 仿真调试。 /故障解决办法(7)全速运行程序,PC 机上的 EasyARM 软件会不断的显示RTC 的时间值。六、思考题若程序中已初始化YEAR 、MONTH 、DOM 寄存器,则DOY 寄存器是否还需要初始化?如果想定时每天的12:00:00报警,需要如何设置RTC的相关寄存器?七、参考程序RTC 实验的参考程序见程序清单。RTC 实验参考程序/* *文件名: SENDRTC.C *功能:运行RTC 进行计时,将所时间值不断的通过串口向上位机发送,并把秒的值输出LED1-LED8 *显示。*说明:将跳线器JP8短接。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 33 页,共 37 页 - - - - - - - - - *通讯波特率115200,8 位数据位, 1 位停止位,无奇偶校验。*/ #includeconfig.h #define SPI_CS 0 x00000100/*P0.8*/ #define SPI_DATA 0 x00000040/*P0.6*/ #define SPI_CLK 0 x00000010/*P0.4*/ #define SPI_IOCON 0 x00000150/* 定义 SPI 接口的 I/O 设置字 */ /*定义串口模式设置数据结构*/ typedef struct UartMode uint8 datab;/ 字长度, 5/6/7/8 uint8 stopb;/ 停止位, 1/2 uint8 parity;/ 奇偶校验位, 0 为无校验, 1 奇数校验, 2 为偶数校验UARTMODE; uint8 send_buf16;/UART0数据接收缓冲区/* *名称: UART0_Ini() *功能:初始化串口0。设置其工作模式及波特率。*入口参数: baud 波特率*set 模式设置 (UARTMODE数据结构 ) *出口参数:返回值为1 时表示初化成功,为0 表除参数出错*/ uint8 UART0_Ini(uint32 baud,UARTMODE set) uint32 bak; /*参数过滤 */ if(0=baud)|(baud115200)return(0); if(set.datab8)return(0); if(0=set.stopb)|(set.stopb2)return(0); if(set.parity4)return(0); /*设置串口波特率*/ U0LCR=0 x80;/DLAB位置 1 bak=(Fpclk4)/baud; U0DLM=bak8; U0DLL=bak&0 xff; /*设置串口模式 */ bak=set.datab-5;/设置字长度if(2=set.stopb)bak|=0 x04;/ 判断是否为2 位停止位if(0!=set.parity)set.parity=set.parity-1;bak|=0 x08; bak|=set.parity4;/ 设置奇偶校验U0LCR=bak; return(1); /* *名称: SendByte() *功能:向串口UART0 发送字节数据,并等待发送完毕。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 34 页,共 37 页 - - - - - - - - - *入口参数: data要发送的数据*出口参数:无*/ void SendByte(uint8 data) U0THR=data;/ 发送数据while(U0LSR&0 x20)=0);/等待数据发送 /* *名称: ISendBuf() *功能:将缓冲区的数据发送回主机。*入口参数: buf 数据缓冲区*no 发送数据的个数*出口参数:无*/ void ISendBuf(uint8 const*buf,uint8 no) uint8 i; for(i=0;ino;i+)SendByte(bufi); /* *名称: HC595_SendDat() *功能:向74HC595 发送一字节数据*入口参数: dat 要发送的数据*出口参数:无*说明:发送数据时,高位先发送。*/ void HC595_SendDat(uint8 dat) uint8 i; IO0CLR=SPI_CS;/SPI_CS=0 for(i=0;i8;i+)/发送 8 位数据IO0CLR=SPI_CLK;/SPI_CLK=0 /*设置 SPI_DATA 输出值 */ if(dat&0 x80)!=0)IO0SET=SPI_DATA; else IO0CLR=SPI_DATA; dat16)&0 x1F;/ 取得时的值send_buf0=bak/10+0; send_buf1=bak%10+0; send_buf2=:; bak=(times8)&0 x3F;/ 取得分的值send_buf3=bak/10+0; send_buf4=bak%10+0; send_buf5=:; bak=times&0 x3F;/ 取得秒的值send_buf6=bak/10+0; send_buf7=bak%10+0; send_buf8=n; ISendBuf(MESSAGE,14);/ 发送数据ISendBuf(send_buf,9); * 名称: RTCIni() 功能:初始化实时时钟。入口参数: buf 数据缓冲区no 发送数据的个数出口参数:无*/ id RTCIni(void) PREINT=Fpclk/32768-1;/ 设置基准时钟分频器PREFRAC=Fpclk-(Fpclk/32768)*32768; YEAR=2004;/ 初化年MONTH=2;/ 初化月DOM=19;/ 初化日HOUR=8; MIN=30; SEC=0; CIIR=0 x01;/ 设置秒值的增量产生一次中断CCR=0 x01;/ 启动 RTC * 名称: main() 功能:读取实时时钟的值,并从串口发送出去,并把秒的值输出LED1-LED8 显示。*/ int main(void) UARTMODE uart0_set; PINSEL0=0 x00000005;/ 设置 I/O 连接到 UART0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 36 页,共 37 页 - - - - - - - - - PINSEL1=0 x00000000; IO0DIR=SPI_IOCON;/设置 LED1 控制口为输出,其它IO 为输入uart0_set.datab=8;/8 位数据位uart0_set.stopb=1;/1 位停止位uart0_set.parity=0;/ 无奇偶校验UART0_Ini(115200,uart0_set);/ 初始化串口模式U0FCR=0 x01;/ 使能 FIFO RTCIni();/ 初始化 RTC while(1) while(0=(ILR&0 x01);/等待 RTC 增量中断标志ILR=0 x01;/ 清除中断标志SendTimeRtc();/ 读取时钟值 ,并向 UART0 发送HC595_SendDat(SEC); return(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 37 页,共 37 页 - - - - - - - - -

    注意事项

    本文(2022年嵌入式ADS实验指导书 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开