




已阅读5页,还剩105页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 附录A一个单片机的应用项目 自动打铃机的设计 A 1项目任务A 2硬件设计A 3软件设计A 4项目实验A 5项目仿真 END 2 A 1项目任务 A 1 0设计要求A 1 1基本要求A 1 2强化要求 3 A 1 0设计要求 项目的任务是利用单片机作为核心控制电路 设计一个自动打铃机 基本要求如下 1 要求所设计的单片机自动打铃机具有准确的计时功能 能够像电子钟一样按时 分 秒格式显示实时时间 2 能根据用户要求的时间点自动按时打铃 该项目以 大学的自动打铃控制为例 除要求自动打铃外 还要求能自动播放音乐和早操 课间操节目 具体控制时间如作息时间表所示 见表A 1 3 设置两个时间调校 校时和校分 按键 分别用来调校时和分 以保证自动打铃机的时间与标准时间相符 4 表A 1 大学作息时间表 5 A 1 1基本要求 如果读者只是把这个项目作为单片机课程的综合实训的话 只要求能在单片机开发装置 或单片机实验箱 上按设计要求成功完成实验则可 对于没有单片机开发设备的读者 只要求能利用仿真软件 Proteus 成功完成仿真即可 6 A 1 2强化要求 如果读者有兴趣把这个项目做成一个实际样机的话 则要求读者在能成功完成实训或仿真调试的基础上 再增加电源电路 实际的驱动电路 机壳等 设计出印刷电路板PCB 并完成PBC的制作和元器件安装 用带有FPROM且与MCS 51系列兼容的单片机 如AT89C52 代替实验用的单片机 并用编程器将源程序写入单片机的FPROM中 与其他元件一起安装到电路板上 配上机壳 构成独立的自动打铃机 达到可以投入实际应用的目的 7 A 2硬件设计 A 2 1总体设计A 2 2实时时钟电路设计A 2 3显示电路设计A 2 4控制电路设计 8 A 2 1总体设计 首先需要利用单片机设计一个实时时钟 然后根据控制时间 即作息时间 建立一个数据区作为控制字码表 存放在ROM中 在此基础上 设计控制程序 在时钟每计时1秒钟时查看一遍数据区 检查数据区中所设置的时间是否与需要控制打铃或广播的时间点相同 若相同 则通过单片机的I O端口输出控制信号 9 A 2 2实时时钟电路设计 选择通过MCS 51内部定时器T0产生中断来实现计时 设定定时器T0工作在定时工作方式1 每100ms 0 1s 产生一次中断 每产生一次T0中断 就利用软件将基准0 1s时间计数单元进行累加计数一次 当定时器T0产生10次中断时 就获得了1s信号 这时秒计数单元加1 同理 由软件对分计数单元和时计数单元进行时间计数 从而得到秒 分 时的时间值 并通过LED数码管显示电路显示出来 10 定时器初值的确定 选择单片机的晶振频率为fosc 6MHz 则时钟周期为1 6 s 机器周期为2 s 所以定时器T0工作在方式1下产生0 1s的定时 所需的定时器初值为3CB0H 为了确保T0能准确定时0 1s 在T0中断服务程序中重装定时器初值时 修正为3CBDH 在运行中可根据误差情况进一步调整 11 A 2 3显示电路设计 为了按时 分 秒的格式显示实时时间 需要使用6只LED数码显示管 本项目采用共阴极LED数码管 为了减少硬件开销 提高系统可靠性和降低成本 选择LED数码管的显示方式为动态扫描显示 由于驱动LED数码管需要一个字形口和一个字位口 为此 采用并行I O接口芯片8155对单片机进行I O口扩展 12 选择8155的B口作为字形口 将B口经74LS07和所有LED的a b c d e f g h引线相连 8155的A口作为字位口 其中的6个引脚经74LS07分别和6个LED的控制端G相连 单片机工作时通过8155的B口输出字形码 再通过A口输出字位码以控制被选中的一个LED点亮 当与时 分 秒对应的字形码轮流输出时 相应的字位码从左到右轮流选中LED 打铃机的实时时间就可以逐次在LED上动态显示 13 A 2 4控制电路设计 1 时间调校电路2 输出控制电路3 自动打铃机硬件接线图4 自动打铃机硬件接线图说明5 图A 1中8155的端口地址分析 14 1 时间调校电路 选择采用外部中断请求来进行时间调校 将 校时 按键和 校分 按键分别接到单片机的 P3 3 和 P3 2 引脚 每当用户按下一次时间调校按键 便会产生一次外部中断请求 单片机响应中断后 在中断服务程序中对相应的计时单元进行加1 若加至超过计时基制 通过程序控制计时单元清0 这样只用加1控制就可以进行校时 15 2 输出控制电路 选取单片机的P1 0引脚用于连接电铃驱动电路 P1 4引脚用于连接广播设备驱动电路 在项目实验调试阶段 电铃和广播设备用发光二极管代替 将发光二极管的负端与输出引脚连接 使用低电平驱动 连接P1 0的发光二极管 绿色 亮表示打铃 灭则表示不打铃 连接P1 4的发光二极管 红色 亮表示打开广播设备 灭则表示停止广播 16 3 自动打铃机硬件接线图 图A 1自动打铃机硬件接线图 17 4 自动打铃机硬件接线图说明 在图A 1中 所用的单片机型号为8031 因为采用单片机开发实验装置进行试验时 所加载的源程序是存放在实验装置的RAM存储器中的 无需用到单片机的片内ROM 所以在项目设计实验阶段只要使用无ROM型的8031单片机即可 实验成功后 需要做成实用的打铃机时 若仍采用8031 则需要给8031扩展片外ROM 现在由于具有片内ROM EPROM E2PROM或FPEROM 的单片机价格不高 因此 实际应用时 通常直接选用与MCS 51兼容的具有片内FPROM的单片机 如AT89C51 AT89C52等 18 5 图A 1中8155的端口地址分析 当IO 1时 单片机选择8155作为I O口 8155的端口地址为 8000H命令 状态口8001HA口 字位口 8002HB口 字形口 8003HC口 未使用 8004H定时器 计数器低字节 未使用 8005H定时器 计数器高字节 未使用 8008H FFFDH8155重叠I O地址 19 5 图A 1中8155的端口地址分析 当IO 0时 单片机选择8155中的RAM存储器工作 RAM的地址为 0000H 00FFH8155基本RAM地址0100H 7FFFH8155重叠RAM地址 在该应用项目中 只用到8155其中的命令 状态口 A口和B口 未使用8155中的RAM存储器 20 A 3软件设计 A 3 1程序的总体设计A 3 2程序流程图设计A 3 3源程序设计 21 A 3 1程序的总体设计 程序的总体设计主要是根据通过硬件设计所确定的硬件电路以及编程需要 进行单片机的资源分配 引脚定义以及设计出控制字 控制码等 包括如下内容 1 设计时间控制字2 ROM资源分配3 RAM资源分配 22 1 设计时间控制字 为了能在控制程序中识别出应在何时进行何种控制 时间控制字可采用如图A 2所示的格式 图A 2时间控制字的格式 每个控制字的字长为4个字节 以每两个控制字为一组 每组需要占用8个ROM存储单元 控制字中的时 分 秒为需要做出控制 启动或关闭装置 的时间点 控制码则用于指示该做何种控制 23 由于在硬件设计时 选取单片机的P1 0用作电铃的开启和关闭 P1 4用作广播的开启和关闭 电铃和广播用发光二极管代替 而且使用低电平驱动 所以只要从P1 0引脚输出低电平0 就可以开启电铃 输出高电平1 就可以关闭电铃 于是启动电铃和关闭电铃的控制码可以分别设计为FEH 11111110B 和FFH 11111111B 同理 启动广播设备和关闭广播设备的控制码可以分别设计为EFH 11101111B 和FFH 11111111B 如表A 2所示 控制码的设计 24 表A 2控制码的定义及其功能 25 根据作息时间表 见表A 1 的具体控制时间 按图A 2的格式和表A 2的定义 编出所有的控制字 并依照控制时间的先后为顺序依次存入ROM的数据区中 构成由控制字组成的控制字码表 控制码为00H时 表示数据区的结束 时间控制字的设计 例如 6 20起床 启动电铃持续响铃15秒 的时间控制字为 FE062000FF062015 26 2 ROM资源分配 由于单片机初始或复位时 程序计数器PC的内容为0000H 所以ROM的0000H应作为主程序的入口地址 又由于项目中需用到外部中断0 外部中断1和T0中断 因此 需要将ROM的0003H 0013H和000BH留作相应的中断入口 为此 主程序安排跳转到ROM的0050H以后的单元 数据区的入口地址 可以在整个程序编写完成 并进行汇编后 再视已经占用多少ROM单元而定 对于本应用项目 估计不含数据区的程序空间小于1000H 因此 将数据区的起始地址设定为1010H 如若不然 再根据实际情况加以调整 27 2 ROM资源分配 对于本应用项目 估计不含数据区的程序空间小于1000H 因此 将数据区的起始地址设定为1010H 如若不然 再根据实际情况加以调整 按照表A 1及表A 2编写出的数据表以及数据区在ROM中所分配的地址如表A 3所示 28 表A 3时间控制字数据区 29 表A 3时间控制字数据区 续 30 3 RAM资源分配 程序中所用到的单片机片内RAM数据存储单元分配如下 26H 0 1s计数单元27H 秒计数单元28H 分计数单元29H 时计数单元2AH 计时单元指针初值2BH 存放秒计数基制2CH 存放分计数基制2DH 存放时计数基制2EH 数据区地址暂存单元3AH 控制码存储单元3BH 3CH 数据暂存单元4AH 4FH 显示缓冲区5AH 堆栈栈底 31 A 3 2程序流程图设计 1 主程序流程图2 中断服务程序流程图3 显示子程序流程图4 T0中断服务程序流程图5 控制子程序流程图 32 1 主程序流程图 图A 3主程序流程图 33 主程序中主要完成的初始化工作 1 8155初始化 主要是向8155写入命令字 将8155的A口 B口的工作方式设置为基本I O口 并将它们均设置为输出 因此 需要写入8155的命令字为03H 2 设置堆栈指针 单片机堆栈指针的初始值为07H 如果不作改变 堆栈将占用第1组工作寄存器的区域 为了方便编程时使用该组工作寄存器 并且避免与位寻址区和已经分配了的RAM单元冲突 决定将堆栈指针初始值设为5AH 34 3 设置定时器工作方式 在实时时钟设计时 已选定定时器T0为工作方式1 所以应写入定时器工作方式寄存器TMOD的控制字为01H 4 设置定时器初值及启动定时器 根据前面的分析 定时器初值为3CB0H 在主程序中只要将3CH送入TH0 B0H送入TL0则可 送完定时初值后 只要令定时器控制寄存器TCON中的TR0位为1 便可以启动T0工作 主程序中主要完成的初始化工作 35 5 设置中断允许方式 在本项目中用到T0中断和 这两个外部中断 为了开放它们 应向中断允许控制寄存器写入的控制字为87H 用于通过 校时 按键和 校分 按键进行时间调校 因此 中断方式应选择为电平触发方式 由于位于中断标志寄存器TCON中的中断触发方式控制位的缺省值为0 即已选择为电平触发方式 所以无需改变TCON的内容 主程序中主要完成的初始化工作 36 图A 4 中断服务程序流程图 2 中断服务程序流程图 37 设计中断服务程序的注意事项 1 由于 的中断入口地址分别为0003H和0013H 它们之间的空间无法放下相应的中断服务程序 所以编程时需要在上述地址安排长转移指令跳转到各自的中断服务程序实际存放地址 38 2 进入中断服务程序后 首先需要关中断 目的是保证用户每按一次时间调校按键 相应计时单元的计时值只递增一次而不是多次 这是因为 这两个外部中断的中断方式选择为电平触发方式 在此方式下 CPU响应中断后 如果外部中断源不能及时撤除它在或上的低电平 就会使相应中断标志位IE0或IE1保持为1 从而导致CPU错误地重复响应中断 因此 进入中断服务程序时 需要先暂时关闭中断 设计中断服务程序的注意事项 39 3 消除按键抖动的目的是为了准确识别用户的按键动作 确认用户按下并释放按键后 才算是一次按键动作 如果用户按住按键不放 就一直等待 由于 校时 和 校分 按键是与单片机的P3 3和P3 2引脚连接的 所以编程时 可使用如下指令实现等待按键释放 JNBP3 3 或JNBP3 2 设计中断服务程序的注意事项 40 4 程序在完成对相应计时单元进行加1或加至超过计时基制对相应的计时单元清0的工作后 及时调用显示子程序的目的是使用户能即时看到校时的结果 5 程序在中断返回前开中断是为了把进入中断服务程序时 关中断了的或中断重新打开 为响应用户下一次的时间调校做准备 设计中断服务程序的注意事项 41 3 显示子程序流程图 图A 5显示子程序流程图 42 设计显示子程序需要考虑的问题 1 需要显示的实时时间数值 存放在29H 时计数单元 28H 分计数单元 和27H 秒计数单元 3个计时单元中 每个计时单元为两个BCD数 为了便于显示时读取这些数据 显示子程序首先需要将3个计时单元中的BCD数逐一分开 并按时 分 秒的顺序分别存入4AH 4FH共6个单元中的显示缓冲区中 43 2 本项目使用共阴极LED数码管 为了将待显示的时间值转换为相应的字形码 需要事先在ROM中建立好一个共阴LED字形码表 从显示缓冲区读出的待显示数据通过查表指令转换成字形码 设计显示子程序需要考虑的问题 44 3 采用动态显示方式 显示一遍时 分 秒的过程是 按4AH 4FH的顺序逐一读出显示缓冲区中的数据 转换成字形码后 逐个从8155的字形口 B口 送至LED的字形码输入脚 每送出一个字形码便从8155的字位口 A口 送出相应的字位码 于是被字位码选中的LED就会显示出相应的字形 字位码设计成从左到右轮流选中LED数码管 这样便可以将时 分 秒从左到右显示在6个LED数码管上 每个的显示控制过程相同 因此 在程序中采用循环结构来编程 设计显示子程序需要考虑的问题 45 4 由于各个LED数码管是逐位轮流点亮的 如果轮流点亮的过程太快 人眼无法看清 所以每点亮一个LED数码管 都需要适当延时一小段时间才行 程序中选择的延时时间为1ms 设计显示子程序需要考虑的问题 46 5 考虑到6个LED的字形码输入脚是一一对应并接在一起的 所以当第1个LED显示完后 在送第二个字形码但尚未送出第二个字位码时 会导致该字形码在第1个LED上显示 为了避免发生这种现象 保证显示的准确性 在每个LED显示之前都进行 关显示 操作 设计显示子程序需要考虑的问题 47 4 T0中断服务程序流程图 图A 6T0中断服务程序流程图 48 设计T0中断服务程序注意事项 1 进入T0中断服务程序时必须首先进行现场保护 对主程序中的累加器和有关的工作寄存器的内容加以保护 在中断返回时 再予以恢复 2 由于T0中断服务程序是因为T0产生计数溢出才执行的 因此 为了保证T0能不断产生0 1S基准时间信号 每次进入T0中断服务程序时 都要重装T0的定时初值 而且这时重装的应是修正过的初值 如前所述 在本项目中 此值为3CBDH 3 每当计时1s 就要调用一次控制子程序 以实现每隔1s就通过控制子程序查看一遍由时间控制字组成的数据区 使打铃控制误差不会超过1s 49 5 控制子程序流程图 图A 7控制子程序流程图 控制子程序的主要功能是每调用一次 就查看一遍存放时间控制字的数据区 检查每个控制字所设置的时间是否与现行时间相同 若相同 则通过P1口输出控制信号 50 A 3 3源程序设计 起始程序 主程序 中断服务程序 中断服务程序 显示子程序 T0中断服务程序 控制子程序 字形码表 控制字码码表 51 起始程序 起始程序 编号指令注释1ORG0000H2LJMPMAIN 转主程序3ORG0003H4LJMPBREAK0 转中断5ORG000BH6LJMPCLOCK 转定时器T0中断7ORG0013H8LJMPBREAK1 转中断 注 其中的编号是为了便于书中引用说明而加 编译源程序时应把它们去掉 52 主程序 主程序 9ORG0050H10MAIN MOVA 03H 8155初始化命令字11MOVDPTR 8000H 8155命令口地址12MOVX DPTR A 向8155写入命令字13MOVSP 5AH 栈底移至5AH14MOV2BH 60H 秒计数基制15MOV2CH 60H 分计数基制16MOV2DH 24H 时计数基制17MOVTMOD 01H 定时器工作方式118MOVTH0 3CH 置T0初值19MOVTL0 0B0H20MOVIE 87H 允许中断21SETBTR0 启动定时器T022LOOP LCALLDISP 调用显示子程序23LJMPLOOP 循环 53 中断服务程序 中断服务程序 24BREAK0 CLREX0 关闭中断25JNBP3 2 消除按键抖动 等待按键释放26INC28H 分单元加127MOVA 28H 十进制调整28ADDA 00H29DAA30MOV28H A31SUBBA 60H 不等于计数基制转NEXT132JCNEXT133MOV28H 00H 相等 分单元清034NEXT1 LCALLDISP 调用显示子程序35SETBEX0 开放中断36RETI 中断返回 54 中断服务程序 中断服务程序 37BREAKl CLREXl 关闭中断38JNBP3 3 消除按键抖动 等待按键释放39INC29H 时单元加140MOVA 29H 十进制调整41ADDA 00H42DAA43MOV29H A44SUBBA 24H 不等于计数基制转NEXT245JCNEXT246MOV29H 00H 相等 时单元清047NEXT2 LCALLDISP 调用显示子程序48SETBEXl 开放中断49RETI 中断返回 55 显示子程序 显示子程序 50DISP MOVR0 4FH 准备向缓冲区放数51MOVA 27H 取秒值52ACALLPUTT 放秒值53MOVA 28H 取分值54ACALLPUTT 放分值55MOVA 29H 取小时值56ACALLPUTT 放小时值57MOVR0 4AH 指向显示缓冲区首地址58MOVR2 0DFH 从左边第一位开始显示59DISP1 MOVDPTR 8002H 字形口地址60MOVA 00H 熄灭码61MOVX DPTR A 关显示 56 显示子程序 60MOVA 00H 熄灭码61MOVX DPTR A 关显示62MOVA R0 取显示缓冲区中的数63MOVDPTR SEGTAB 指向字形码表首64MOVCA A DPTR 查表 找字形码65MOVDPTR 8002H 字形口地址66MOVX DPTR A 送出字形码67MOVA R2 取字位码68MOVDPTR 8001H 字位口地址69MOVX DPTR A 显示一位数字70MOVR3 00H 计数延时初值71DISP2 DJNZR3 DISP2 延时一段时间 1ms 57 显示子程序 71DISP2 DJNZR3 DISP2 延时一段时间 1ms 72INCR0 修改显示缓冲区指针73RRA 为显示下一位做准备74MOVR2 A 存字位码75JBACC 7 DISPl 不到最后一位 则继续76RET 显示完6位 返回77PUTT MOVRl A 暂存78ACALLPUTTl 低4位先放入缓冲区79MOVA R1 取出原数80SWAPA 高4位放入低4位中81PUTT1 ANLA 0FH 屏蔽高4位82MOV R0 A 放进显示缓冲区83DECR0 缓冲区地址指针减184RET 58 T0中断服务程序 T0中断服务程序 85CLOCK PUSHPSW 保护现场86PUSHACC87SETBRS0 选择工作寄存器组188MOVTH0 3CH 重装定时器T0初值89MOVTL0 0BDH90INC26H 0 1s单元加191MOVA 26H 取0 1s单元内容92CJNEA 0AH DONE1 不等于10 转DONE193MOV26H 00H 等于10 则清094MOVR0 27H 指向秒计数单元95MOVR1 2BH 指向秒计数基制单元96MOVR3 03H 循环3次 秒 分 时 97CLOCK1 MOVA R0 取计时单元的值 59 T0中断服务程序 97CLOCK1 MOVA R0 取计时单元的值98ADDA 01H 计时单元加199DAA 十进制调整100MOV R0 A 送回计时单元101MOV3BH Rl 取计时基制102CJNEA 3BH NEXT3 不等于计时基制 转出103MOV R0 00H 相等 则计时单元清0104INCR0 计时单元指针加1105INCR1 时间基制单元指针加1106DJNZR3 CLOCK1 秒 分 时共3次循环107NEXT3 ACALLCTRL 调用控制子程序108DONE1 POPACC 恢复现场109POPPSW110RETI 中断返回 60 控制子程序 控制子程序111CTRL MOVDPTR 100CH 指向控制字码表首址前4单元112MOV2EH DPL 暂存指针低8位地址113CTRL1 MOVDPL 2EH 取出指针低8位地址114MOVR3 04H 控制字码表指针加1次数115CTRL2 INCDPTR 控制字码表指针加1116DJNZR3 CTRL2 指针指向下一个控制字117MOV2EH DPL 暂存指针低8位118MOVR3 03H 核对时 分 秒共3次119CLRA120MOVCA A DPTR 取控制码121JZDONE2 若A 0 则数据区结束122MOV3AH A 保护控制码123MOVR1 2AH 设置计时单元指针124CTRL3 INCDPTR 修改控制字码表指针 61 控制子程序 124CTRL3 INCDPTR 修改控制字码表指针125DECR1 修改计时单元指针126CLRA 准备查表127MOVCA A DPTR 读取控制字时间值128MOV3CH A 暂存129MOVA R1 读取计时单元时间值130CJNEA 3CH CTRL1 比较时间值是否相等131DJNZR3 CTRL3 3次循环132MOVA 3AH 3次比较相等 恢复控制码133MOVP1 A 由Pl口输出 执行控制134DONE2 RET 子程序返回 62 字形码表 字形码表 SEGTAB DB3FH 06H 5BH 4FH 66H 6DH 7DH136DB07H 7FH 6FH 63 控制字码码表 控制字码表 137ORG1010H138DB0FEH 06H 20H 00H 0FFH 06H 20H 15H139DB0EFH 06H 25H 00H 0FFH 06H 40H 00H140DB0FEH 07H 20H 00H 0FFH 07H 20H 10H141DB0FEH 07H 40H 00H 0FFH 07H 40H 15H142DB0FEH 07H 50H 00H 0FFH 07H 50H 10H143DB0FEH 08H 35H 00H 0FFH 08H 35H 10H144DB0FEH 08H 45H 00H 0FFH 08H 45H 10H145DB0FEH 09H 30H 00H 0FFH 09H 30H 10H146DB0EFH 09H 35H 00H 0FFH 09H 40H 00H 64 控制字码码表 146DB0EFH 09H 35H 00H 0FFH 09H 40H 00H147DB0FEH 09H 45H 00H 0FFH 09H 45H 15H148DB0FEH 09H 50H 00H 0FFH 09H 50H 10H149DB0FEH 10H 35H 00H 0FFH 10H 35H 10H150DB0FEH 10H 45H 00H 0FFH 10H 45H 10H151DB0FEH 11H 30H 00H 0FFH 11H 30H 10H152DB0FEH 14H 15H 00H 0FFH 14H 15H 15H153DB0EFH 14H 16H 00H 0FFH 14H 20H 00H154DB0FEH 14H 25H 00H 0FFH 14H 25H 15H155DB0FEH 14H 30H 00H 0FFH 14H 30H 10H156DB0FEH 15H 15H 00H 0FFH 15H 15H 10H 65 控制字码码表 156DB0FEH 15H 15H 00H 0FFH 15H 15H 10H157DB0FEH 15H 25H 00H 0FFH 15H 25H 10H158DB0FEH 16H 10H 00H 0FFH 16H 10H 10H159DB0FEH 16H 20H 00H 0FFH 16H 20H 10H160DB0FEH 17H 05H 00H 0FFH 17H 05H 10H161DB0EFH 17H 15H 00H 0FFH 17H 15H 10H162DB0FEH 18H 00H 00H 0FFH 18H 00H 10H163DB0FEH 19H 20H 00H 0FFH 19H 20H 15H164DB0FEH 19H 30H 00H 0FFH 19H 30H 10H165DB0FEH 21H 30H 00H 0FFH 21H 30H 10H166DB0FEH 23H 00H 00H 0FFH 23H 00H 15H167DB00H168END 66 A 4项目实验 A 4 1实验器材A 4 2实验步骤 67 A 4 1实验器材 进行项目实验所需要的实验器材包括 单片机开发装置一台 配套计算机1台 连接导线若干 若进行按强化要求实现项目的实验 则需另外增加强化要求所用到的全部元器件以及制板 焊接 固化程序等的设备和工具 68 A 4 2实验步骤 项目实验的步骤因采用不同的单片机开发装置而有所不同 但归纳起来 这个阶段所要完成的工作主要包括硬件调试和软件调试两个方面 具体的实验步骤如下 1 在单片机开发装置上搭建已设计好的应用项目实验电路 见图A 1 2 将实验系统与PC微机相连 开启实验系统和PC机 运行实验系统提供的软件 进入系统实验平台 69 实验步骤 3 选择 编辑 功能 进入文本编辑界面 输入已设计好的应用项目源程序 编辑好后 以 ASM 为扩展名存盘 文件名 由用户自己命名 4 退出文本编辑界面 进入调试界面 5 选择 汇编 功能 按提示输入已存盘的文件名 实验平台的汇编程序自动对源程序进行汇编 生成浮动目标文件 错误信息文件以及列表文件 70 实验步骤 6 汇编完成后 选择 链接 功能 汇编程序自动对汇编生成的浮动目标文件进行链接 生成相应的 HEX文件及链接信息报告文件 7 选择 装载 功能 按提示输入已生成于磁盘中的 HEX文件名 PC机将由应用项目源程序生成的可执行文件从磁盘装入实验系统内存 71 实验步骤 8 装载结束后 利用 反汇编 命令 进行反汇编 目的是检验装入实验系统内存的可执行文件是否正确 如果装载正确 则可以使用 无断点连续运行 命令 在已搭建好的硬件电路上运行装载的程序 如果达到预期效果 则完成了项目实验 否则 可利用 单步运行 命令 进行单步调试 或利用 断点设置 命令设置合适的断点 再利用 带断点连续运行 命令进行调试 并仔细检查软件和硬件 排除故障 反复实验 直至成功 72 反汇编程序清单 为了便于读者在实验时进行核对 书中给出了该项目的反汇编程序清单 详见P 229 234 73 A 5项目仿真 A 5 1仿真软件A 5 2仿真步骤 74 A 5 1仿真软件 用于项目仿真的软件 可采用目前日趋流行的单片机软硬件可视化仿真开发工具软件Proteus 该软件集成了高级原理图布图 混合模式电路仿真 PCB设计以及自动布线功能 构成了一个完整的电子设计系统 通过它的虚拟仿真技术 VSM 用户可以对基于微处理器的系统连同所有的外围接口电子器件一起进行仿真 配合系统提供的虚拟仪器 如电压表 电流表 示波器等 可以测量仿真的波形及记录仿真数据 75 仿真软件 对于那些暂不具备单片机实验条件的学校或没有单片机开发装置但已有PC机的读者 只要利用Proteus软件便可以实现应用项目的仿真调试 Proteus软件主要由ISIS和ARES两个软件构成 其中 ISIS为电子系统仿真软件 ARES为布线编辑软件 本应用项目的仿真主要应用ISIS进行 对于需要按强化要求实现项目的读者 可以使用ARES来设计PCB印刷电路板 76 A 5 2仿真步骤 由于本教材的篇幅有限 这里只给出使用Proteus软件对应用项目进行仿真的步骤以及简要说明 对于没有用过该仿真软件的读者 应先参考介绍Proteus软件的有关书籍 首先熟悉Proteus软件的使用 再按如下步骤进行项目仿真 77 1 运行ISIS 在安装有Proteus软件的PC机上运行ISIS软件 进入ISIS界面 图A 8ISIS界面 78 2 挑选元件 单击挑选元件按钮P 进入元件挑选界面 如图A 9所示 图A 9元件挑选界面 79 2 挑选元件 在图A 9的关键字框 Keywords 中输入应用项目所需元件的名称 再在搜索结果框 Results 中选中需要的元件 然后单击OK按钮确定 重复这一过程 把应用项目所需用到的元件全部挑选到元件列表窗口中 如图A 10所示 图A 10元件列表窗口 80 3 放置元件 把构成应用项目硬件电路所需的元器件放置到原理图绘制窗口中的适当位置 具体的步骤如下 1 单击元件列表窗口中的元件 该元件的形状便会在预览窗口中显示出来 通过方向工具栏的按钮对元件进行旋转和镜像调整 2 在原理图编辑窗口中单击 所选元件便会出现在编辑窗口并可随鼠标一起移动 移到适当位置再单击 便可放置一个元件 在单击前 鼠标右键单击可取消元件放置 3 需要改变元件放置的位置时 可用鼠标右键单击元件 选择快捷菜单中的拖动对象命令 DragObject 即可拖动元件 连续在元件上单击两次鼠标右键则会删除该元件 81 放置元件 4 用鼠标右键逐一单击放置好的元件 选择快捷菜单中的元件属性编辑命令 EditProperties 对元件标号 数值 封装等属性进行编辑 不同的元件需要指定不同的属性 对于单片机还要指定时钟频率 本项目设为6MHz 如图A 11 图A 11编辑元件属性 82 放置并完成属性编辑后的所有元件 如图A 12所示 图A 12放置完成的所有元件 放置元件 83 4 布线绘图 1 ISIS的原理图编辑窗口与常规的Windows应用程序窗口有较大的区别 它是没有滚动条的 用户可通过如下方法选择原理图的显示区域 移动鼠标指针至需要显示的地方 滚动鼠标滚轮缩放原理图 ISIS就会自动以鼠标指针所在处为中心进行显示 移动鼠标指针至需要显示的地方 再按F5功能键 可把显示中心移到鼠标指针所在处 放置好所有的元件后 即可以按设计好的硬件电路对元件进行布线绘图 具体的操作要点如下 84 4 布线绘图 单击预览窗口中想要显示的位置 编辑窗口即以此位置为中心显示 在原理图编辑框内 按住Shift键 用鼠标 撞击 边框 可使显示区域平移 按住Shift键的同时 拖曳鼠标绘制出一个矩形框 可将框内的图像放大显示 移动鼠标指针至需要显示的地方 再按缩放功能键 F6 F7 便会以鼠标指针所在处为中心缩放图像 85 布线绘图 2 ISIS的原理图编辑窗口没有布线按钮 这是因为ISIS使用的是智能化布线功能 会自动检测用户的布线动作 具体的操作方法如下 选择Tools WireAutoRouter命令或单击主工具栏的 自动布线器 按钮 可打开ISIS的自动布线功能 该功能打开时 用户只要在两个连接点单击 ISIS就会自动选择一条合适的路径把两个点连接起来 86 布线绘图 如果希望自行设定走线路径 则可关闭自动布线功能 也可以在自动布线功能打开情况下 在想要线路拐弯处单击则可 对于不满意的连线 在连线过程中可按Esc键删除 对于已完成的连线 可单击主工具栏中的 撤销 按钮撤销连线操作 或用鼠标右键单击想要删除的连线 再在快捷菜单中选择删除连线命令 DeleteWire 即可 删除其他对象也可用此方法 87 当绘图格栅设置得太大 而出现无法连线的现象时 应在View菜单中将格栅调小 如图A 13所示 可将格栅调为50th或10th 若元件不在格栅线上 可先移好元件 并在连线过程中滚动鼠标滚轮放大显示 便可准确连线 布线绘图 图A 13绘图格栅调整 88 布线绘图 3 在应用项目中用到的8155的3个I O口引脚是用总线表示的 所以绘图时必须用到总线 总线的绘制方法如下 单击绘图工具栏的 总线 按钮 打开绘制总线功能 即可使用前面介绍的连线方法画出总线 89 布线绘图 总线需要通过分支线与网络标号才能表示具体的连接 画分支线时 可利用ISIS的重复布线功能 先在图中的A B两点画出一条分支线 画斜线时需要关闭自动布线器 如图A 14 a 所示 然后再双击C点 这样就可以在C点与总线之间画出一条同样的分支线 如图A 14 b 所示 用同样的方法即可整齐地画出其他分支线 图A 14使用重复布线功能画分支线 90 布线绘图 单击绘图工具栏的 导线标签 按钮 对导线进行标注 总线采用 名称 0 X 的格式标注 同一条总线上的分支线名称应与总线名称相同 编号为0 X 其他相互接通的导线只需标注相同的标签名则可 如图A 15所示 图中标注为READ WRITE的导线是相互连通的 图A 15导线的标注 91 图A 16自动打铃机电路原理图 通过以上步骤绘制完成的自动打铃机电路原理图如图A 16所示 布线绘图 92 5 建立源代码文件 1 使用Proteus提供的编辑器或其他通用编辑器 输入 编辑 建立应用项目的源程序 使用Proteus自带编辑器建立应用项目源程序的方法是 进入Proteus安装目录下的BIN子目录 运行其中的SCREDIT程序 并在它的编辑窗口中输入应用项目的源程序 如图A 17所示 编辑完成后 以 ASM为扩展名存盘 本项目以 打铃机 ASM 存盘 图A 17Proteus自带的源程序编辑器 93 Proteus允许使用第三方的外部编辑器 方法是 在ISIS窗口中 选择Source菜单中的 SetupExternalTextEditor 命令 在弹出窗口中选择外部编辑器 建立源代码文件 如图A 18所示 图中以选择Windows的记事本为例 图A 18选择Windows的记事本作为编辑器 94 2 添加源文件 选择Source菜单中的 Add RemoveSourceFiles 命令 在弹出窗口中添加已经存盘的源程序文件 打铃机 ASM 并在其中的 CodeGenerationTool 框中选择代码生成工具为 ASEM51 确定后 指定的源程序文件即被添加到本设计中 并在Source菜单中列出添加的源程序文件名 如图A 19所示 建立源代码文件 图A 19添加源程序文件 95 3 选定代码生成工具 选择Source菜单中的 DefineCodeGenerationTool 命令 在弹出窗口中选择代码生成工具为 ASEM51 如图A 20所示 建立源代码文件 图A 20选择代码生成工具 96 4 编译源文件 选择Source菜单中的 BuildAll 命令 Proteus就会对添加的源程序文件进行编译 并弹出 BUILDLOG 窗口 报告编译信息 如图A 21所示 图A 21源程序编译信息 建立源代码文件 97 如无错误 Proteus便会生成扩展名为 HEX的目标代码文件 本项目为 打铃机 HEX 如有错误 可单击Sour
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Lesson 76 April Fools'Day说课稿-2025-2026学年初中英语第二册新概念英语
- 脐疗课件教学课件
- 商铺托管合同
- 应届生实习劳动合同
- 初中 心育课说课稿:发现快乐
- 2025租赁合同当事人的权利和义务
- 项目3 社区服务为大家说课稿-2023-2024学年小学劳动四年级上册湘人版《劳动实践指导手册》
- 毕业生岗位培训协议书5篇
- 第一单元第 第2课 营造艺术的情趣和意境 说课稿 -2024-2025学年人教版初中美术七年级下册
- 2025年低空经济无人机网络战防御策略研究报告
- .新课7 必修第一册Unit4 Loo.king good,feeling good (词汇+课文)(译林版2020)(解析版)2025年初升高英语无忧衔接(通.用版)
- 复发转移性宫颈癌诊疗指南(2025版)解读课件
- 检验科质量标准手册
- 设备设施验收与交付方案
- 工业煤气安全知识培训课件
- 初三数学二次函数测试试卷及答案
- 航海专业英语常用词汇汇编
- 学堂在线 军事历史-第二次世界大战史 章节测试答案
- 急诊科多发创伤抢救流程指南
- 曲臂式高空作业车专项施工方案
- 研究生学术道德与学术规范课件
评论
0/150
提交评论