PIAE-V6.0总线开发板指导书.doc_第1页
PIAE-V6.0总线开发板指导书.doc_第2页
PIAE-V6.0总线开发板指导书.doc_第3页
PIAE-V6.0总线开发板指导书.doc_第4页
PIAE-V6.0总线开发板指导书.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PIAE V6.0总线开发板实验指导书PIAE G目 录指导书前言- 2 -1 PIAE V6.0 总线学习板硬件介绍- 2 -2 实验之前的准备- 4 -3 PIAE V6.0总线学习板实验详解- 4 -3.1 实验前注意事项- 4 -3.2数码管显示实验- 4 -3.3INT0外部中断计数实验- 5 -3.4串口通讯实验- 6 -3.5 CAN节点自收发实验- 7 -3.6两节点CAN总线通讯基本实验- 8 -3.7两节点CAN通讯+按键+显示实验- 9 -3.8两节点CAN通讯程序+按键程序+显示程序+RS232通讯)- 9 -3.9 RS485总线实验- 10 -3.10 继电器实验- 11 -附录1 ASCII码表- 13 -附录2 MCS-51单片机存储器结构- 14 -附录3 C语言编码规范-强烈推荐- 24 -指导书前言广大网友大家好:首先非常感谢多年来您对EDN-CAN总线学习小组的支持,有了大家的参与,使得我们小组成为网上学习CAN总线的一块热土,使得对CAN总线感兴趣的朋友们借由我们的一点微薄之力,能够步入学习CAN总线的大门。经过几年的发展,我们这个自发组织的小组根据广大网友的建议,已经开发了六版CAN开发板,并逐步的将更加实用的应用实例在PIAE的开发板上实现。更为高兴的是,根据这几年的研发经验和网上与大家的交流,我们将学习CAN总线的一些心得和开发过程汇总成一本书CAN总线轻松入门与实践,该书由北航出版社出版,不多介绍了,相信这本书会给初学者带来不一样的感受。 这个实验指导书可以看做是对书的一个补充,因为书的主要目的还是介绍CAN总线的一些相关知识以及开发设计过程,具有普适性。然而作者认为,书一定要配合实践动手才能真正领悟CAN总线的开发过程,因此针对我们的PIAE6.0-CAN总线开发板,写了这个指导书,类似我们在大学时的实验指导书。指导书中以板载的几个重要实验为主,书中所讲的诸如流水灯之类的简单单片机实验就不写了,相信大家自己都能搞定。相信有了书的讲授,配合我们小组的开发板和这本指导书,你一定能学会CAN总线。最后祝大家在学习的路上一帆风顺!永远进步!邮箱: 博客: /blog/PIAE/ 学习小组:/684/ -PIAE1 PIAE V6.0 总线学习板硬件介绍首先介绍一下PIAE V6.0总线学习板的硬件,下面是该学习板图片。基本配置:(1)4位的数码管显示单元(2)LED指示灯(3)1个按键:INT0外部中断按键(4)RS232通讯功能模块:MAX232+ DB9的接口(5)RS485通讯功能模块:MAX485+接口(6)CAN通讯功能模块:SJA1000+82C250 (7) 继电器及控制端口(8)无线通讯功能模块接口:14针接口+无线通讯模块nRF2401(可选)可选模块无线通讯模块nRF2401 配合无线模块所做实验:(1) 手动无线通信(2) 无线加串口通信(3) 无线同步计时(4) 无线温度测量系统 .期待有才华创意的你实现更多的idea!总结:PIAE6.0学习板,可以说是麻雀虽小,五脏俱全。对于初学的同学来说,性价比绝对超值,一套学习板几乎可以学习CAN,232,485和无线四种通信方法,同时熟练掌握单片机的开发方法。2 实验之前的准备 开始用PIAE学习板之前,希望大家要做好几个准备。而不是说拿到板子后,把所有的实验程序下载进去,看看热闹就完了,如果仅仅是这样的话,是不会真正掌握CAN总线的,更别提入门了。那需要什么准备呢?(1) 先别着急开发板和程序。把书从头到尾仔细的研读一遍,尤其是CAN总线的基本知识和工作原理。要弄清CAN总线的一些基本概念。这些是第一、二章所讲的内容(2) 从理论慢慢过渡到硬件,仔细看书的第三章,熟悉CAN总线硬件控制器和驱动器,大概了解CAN总线硬件的构成,其实很简单,关键都在软件上。(3) 学习第四章,这一章主要讲一个总线系统的硬件设计,以单片机为主控器。顺便学习一些电路的设计技巧。(4) 从第六章到第九章中选取一个自己感兴趣的章节,仔细研读程序的编写和设计思路,读懂一个后,剩下几个便可以很快掌握。(5) 照着第五章的几个最基本实验,尤其是软件的操作方法,来学习板上的资源操作。(6) 熟练了板上资源操作后,就可以用板子来学习CAN总线有关的实验了。总结:按照上述的步骤是比较科学系统的学习过程,当然每个人的基础部一样,要根据自己的实际情况来安排学习过程。如果有了这些基础,我们就可以进行PIAE总线开发板之旅了,呵呵,做好准备了吗?我们开始吧!3 PIAE V6.0总线学习板实验详解3.1 实验前注意事项整个试验板功能丰富,但是有一些需要注意的地方,这些注意的地方其实是电路硬件自身的原因,了解这些有助于使用该开发板,并且能够更好的了解硬件的使用。(1)下载的时候注意冷启动,先按按钮,再打开板子的总开关。3.2数码管显示实验实验内容在数码管上显示255。实验目的熟悉PIAE总线学习板的数码管显示电路;熟悉数码管显示编程硬件电路相关点评采用三极管反向驱动,降低成本,减轻大家的负担。数码管采用共阳极数码管,P0口为数码管的字形控制,P24P27为数码管的字位控制。当P24P27位为低电平,数码管的字形控制也为低电平时,对应的里面的LED灯亮。软件程序 请参考相关程序。实验步骤和实验现象与结果(1) 检查电路,判断电路是否短路。(2) 打开电源开关,下载程序。下载程序时观察软件上显示是否下载成功。(3) 下载完毕后,数码管显示255。实验注意事项实验前一定要检查电路,防止短路。3.3INT0外部中断计数实验实验内容INT0按键为外部中断计数按键,将计数结果在数码管上显示。实验目的熟悉总线学习板上的硬件资源,熟悉外部中断计数程序和显示程序编程。硬件电路相关点评按键增加硬件消抖,使计数准确,不容易出现按一下按键,计多个数值的情况。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)打开电源开关,下载程序。下载程序时观察软件上显示是否下载成功。(3)下载完毕后,数码管显示0。(4)按INT0按键,计数增加1,数码管显示增加1(十进制显示)。实验注意事项(1)实验前一定要检查电路,防止短路(2)INT0按键是中间那个按键,PCB板的标注有误。3.4串口通讯实验实验内容INT0按键为外部中断计数按键,每按一次,数码管1-2(从右至左)显示数据加1,通过串口发送当前计数结果给PC机; PC机发送一个字节的数据,在数码管3-4上显示。实验目的熟悉总线学习板上的硬件资源,熟悉中断计数程序和显示程序,学习串口通讯编程。硬件电路相关点评检查RS232芯片的好坏。芯片正常时,2脚电平在9V左右,6脚在-9V左右。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)打开电源开关,下载程序。下载程序时观察软件上显示是否下载成功。(3)下载完程序后,数码管1-2显示0,数码管3-4可能显示不是0。(4)按一下复位键,让程序重新运行。数码管1-2显示0,数码管3-4显示0。(5)关闭下载程序软件,打开串口调试精灵。(6)按INT0按键一次,数码管1-2显示加1(十进制显示),自动发送数据给PC机。(7)通过串口调试精灵发送一个字节的16进制数,数码管3-4显示改变。实验注意事项(1)实验前一定要检查电路,防止短路(2)INT0按键是中间那个按键,PCB板的标注有误。(3)程序下载程序和串口调试精灵不能同时打开,避免串口冲突。3.5 CAN节点自收发实验实验内容INT0按键为外部中断计数按键,每按一次,数码管1-2(自右向左)显示加1,并且发送数据;同时接收到自己发送的数据,在数码管3-4(自右向左)上显示。实验目的验证该CAN节点硬件是否正常,学习最简单最基本的CAN总线通讯编程。本实验的重点是让您分析最基本的CAN总线编程。 硬件电路 见书中的相关设计章节。相关点评(1) 采用P23控制SJA1000复位管脚,可以通过软件复位芯片。(2) 增加通讯指示灯。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)打开电源开关,下载CAN节点的程序。下载程序时观察软件上显示是否下载成功。(3)按INT0按键,数码管1-2(自右向左)显示加1,同时数码管3-4(自右向左)显示加1。数码管1-2和数码管3-4显示相同。实验注意事项(1)实验前一定要检查电路,防止短路(2)INT0按键是右边的按键。3.6两节点CAN总线通讯基本实验实验内容前提:你有一个CAN节点,可以显示接收到的数据,则可以做这个实验。当总线学习板的CAN节点接收到一包数据后,会回复一包8字节的数据。数据内容为:0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88实验目的学习最简单最基本的CAN总线通讯编程。可能你没有一个可以显示接收数据的CAN节点,没有关系,本实验的重点是让您分析最基本的CAN总线编程。 硬件电路见书中的相关设计章节。相关点评(3) 采用P23控制SJA1000复位管脚,可以通过软件复位芯片。(4) 增加通讯指示灯。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)将总线学习板的CAN节点与您的CAN节点连接。注意连接方法。(3)根据程序中应用层协议,设置通讯速率,帧格式等。(4)打开电源开关,下载CAN节点的程序。下载程序时RS232处的指示灯会闪烁。(5)当您向总线学习板上的CAN节点发送一包数据,该节点就会回复一包数据。数据内容为:0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88实验注意事项(1)实验前一定要检查电路,防止短路(2)INT0按键是右边的按键。(3)两个CAN节点连接时,是HH,LL。(4)如果通讯不成功,CAN节点就会处于死循环。3.7两节点CAN通讯+按键+显示实验实验内容前提:您有两块我们的总线学习板。INT0按键为外部中断计数按键,每按一次,数码管1-2(自右向左)显示加1,并且发送数据到CAN节点2;接收到CAN节点2的数据在数码管3-4(自右向左)。CAN节点2的功能与CAN节点1功能相同。实验目的熟悉CAN总线通讯编程。硬件电路见书中的相关设计章节。相关点评(1)采用P23控制SJA1000复位管脚,可以通过软件复位芯片。(2)增加通讯指示灯。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)打开电源开关,分别下载CAN节点的程序。下载程序时观察软件上显示是否下载成功。(3)下载完毕后,关闭电源,然后将两个总线学习板的CAN节点连接。注意连接方法。(4)两个节点打开电源后,数码管1-2(自右向左)显示0;数码管3-4(自右向左)显示0(5)按CAN节点1上的INT0按键一次,其数码管1-2显示加1(十进制显示),自动发送数据到CAN节点2,并且在节点2的数码管3-4上显示。(6)按CAN节点2上的INT0按键一次,其数码管1-2显示加1(十进制显示),自动发送到CAN节点1,并且在节点1的数码管3-4上显示。实验注意事项(1)实验前一定要检查电路,防止短路(2)INT0按键是右边的按键。(3)两个CAN节点连接时,是HH,LL。3.8两节点CAN通讯程序+按键程序+显示程序+RS232通讯)实验内容前提:您有两块我们的总线学习板。INT0按键为外部中断计数按键,每按一次,数码管1-2(自右向左)显示加1,并且发送数据到CAN节点2,同时也通过串口发送到PC机;PC机也可以通过串口发送数据给总线学习板,在数码管3-4(自右向左)上显示,然后其会通过CAN总线发送给CAN节点2;接收到CAN节点2的数据在数码管3-4(自右向左)上显示。CAN节点2的功能与CAN节点1功能相同。实验目的熟悉CAN总线通讯编程,学习两种总线融合通讯编程。硬件电路 见书中的相关设计章节。相关电评(1)采用P23控制SJA1000复位管脚,可以通过软件复位芯片。(2)增加通讯指示灯。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)打开电源开关,分别下载CAN节点的程序。下载程序时RS232处的指示灯会闪烁。(3)下载完毕后,关闭电源,然后将两个总线学习板的CAN节点连接,CAN节点1与PC机相连,注意连接方法。如果不连接PC机,实验现象与实验七相同。(4)两个节点打开电源后,数码管1-2(自右向左)显示0;数码管3-4(自右向左)显示0(5)按CAN节点1上的INT0按键一次,其数码管1-2显示加1(十进制显示),自动发送数据到CAN节点2,并且在节点2的数码管3-4上显示;自动通过串口发送数据给PC机。(6)PC机利用串口调试精灵可以发送字节数据给CAN节点,在数码管3-4上显示,总线学习板也会将收到的数据通过CAN总线发送给CAN节点2。(7)按CAN节点2上的INT0按键一次,其数码管1-2显示加1(十进制显示),自动发送到CAN节点1,并且在节点1的数码管3-4上显示。CAN节点1还会通过串口发送给PC机实验注意事项(1)实验前一定要检查电路,防止短路(2)INT0按键是右边的按键。(3)两个CAN节点连接时,是HH,LL。(4)CAN节点可以不连接PC机,但是两个CAN节点必须连接。3.9 RS485总线实验实验内容INT0按键为外部中断计数按键,每按一次,数码管1-2(从右至左)显示数据加1,通过RS485总线发送485接收节点; 本节点接收到的数据在数码管3-4上显示。实验目的熟悉总线学习板上的硬件资源,熟悉中断计数程序和显示程序,学习RS485通讯编程和硬件设计。硬件电路 相关电评本电路板单片机的RS232接口与RS485接口共用单片机的RXD,TXD信号,因此采用跳线进行选择。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)检查电路,判断电路是否短路。(2)打开电源开关,将J2 ,J3 跳到RS232端,下载程序。下载程序时观察软件上显示是否下载成功。(3)下载完程序后断电,将J2,J3 跳到RS485端。将电路板的EX2接口的A,B管脚与RS232/485转换器的485端的A,B管脚直连,RS232端连接到PC机串口。(4)重新上电后,数码管1-2显示0,数码管3-4显示0。(5)关闭下载程序软件,打开串口调试精灵。(6)按INT0按键一次,数码管1-2显示加1(十进制显示),自动发送数据给PC机。(7)通过串口调试精灵发送一个字节的16进制数,数码管3-4显示改变。实验注意事项(1)实验前一定要检查电路,防止短路(2)程序下载程序和串口调试精灵不能同时打开,避免串口冲突。(3)电路板485接口的A,B接口与另外485节点的A,B接口直连。3.10 继电器实验实验内容以单片机的INT0接口作普通IO功能使用,控制固态继电器间歇性的吸合和断开,采用输出口的两个LED指示灯表示继电器的状态。实验目的熟悉总线学习板上的硬件资源,熟悉继电器的使用和控制方法。硬件电路 相关电评继电器最基本的用途就是弱电控强电,本图中的继电器采用三极管驱动。软件程序 请参考相关程序。实验步骤和实验现象与结果(1)将J5跳线短到IN一侧,继电器的控制输出可以不连接电源。(2)检查电路,判断电路是否短路。(3)打开电源开关,下载程序。下载程序时观察软件上显示是否下载成功。(4)下载完毕后,继电器间歇性的吸合和断开,并伴随着继电器动作的声音,同时LED9和LED10交替被点亮和熄灭。实验注意事项(1)必须将J5跳线短到IN一侧,否则看不到LED9和LED10的状态变化。(2)实验前一定要检查电路,防止短路。为了让大家学习方便,附录中收录了一些常用的参考资料,比如51单片机的一些知识,如果忘了一些知识,可以快速查阅。附录1 ASCII码表信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 96 、 1 SOH 33 ! 65 A 97 a 2 STX 34 ” 66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL 39 , 71 G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT 43 + 75 K 107 k 12 FF 44 , 76 L 108 l 13 CR 45 - 77 M 109 m 14 SO 46 . 78 N 110 n 15 SI 47 / 79 O 111 o 16 DLE 48 0 80 P 112 p 17 DCI 49 1 81 Q 113 q 18 DC2 50 2 82 R 114 r 19 DC3 51 3 83 X 115 s 20 DC4 52 4 84 T 116 t 21 NAK 53 5 85 U 117 u 22 SYN 54 6 86 V 118 v 23 TB 55 7 87 W 119 w 24 CAN 56 8 88 X 120 x 25 EM 57 9 89 Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 123 28 FS 60 94 126 31 US 63 ? 95 _ 127 DEL扩展ACII码表附录2 MCS-51单片机存储器结构MCS-51的存储器可分为四类:程序存储器 一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。 MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的 端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时, 则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。 8051片内有4kB的程序存储单元,其地址为0000H0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意: 其中一组特殊是0000H0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。 另一组特殊单元是0003H002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下: 0003H000AH 外部中断0中断地址区。 000BH0012H 定时/计数器0中断地址区。 0013H001AH 外部中断1中断地址区。 001BH0022H 定时/计数器1中断地址区。 0023H002AH 串行中断地址区。 可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,每段只有8个地址单元是不能存下完整的中断服务程序的,因而一般也在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。数据存储器数据存储器也称为随机存取数据存储器。MCS-51单片机的数据存储器在物理上和逻辑上都分为两个地址空间,一个是内部数据存储区和一个外部数据存储区。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。8051内部RAM共有256个单元,这256个单元共分为两部分。其一是地址从00H7FH单元(共128个字节)为用户数据RAM。从80HFFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。 在00H1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的第3和第4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如图2所示。内部RAM的20H2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H7FH。位地址分配如表1所示,CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。表1RAM位寻址区地址表单元地址MSB位地址LSB2FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H特殊功能寄存器特殊功能寄存器(SFR)也称为专用寄存器,特殊功能寄存器反映了MCS-51单片机的运行状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行。 MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80HFFH地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。表2是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍。程序计数器PC(program Counter) 程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。累加器ACC(Accumulator) 累加器A是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。大部分的数据操作都会通过累加器A进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”,它的功能较多,地位也十分重要。以至于后来发展的单片机,有的集成了多累加器结构,或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器的“交通堵塞”问题。提高单片机的软件效率。表2特殊功能寄存器标识符号地址寄存器名称ACC0E0H累加器B0F0HB寄存器PSW0D0H程序状态字SP81H堆栈指针DPTR82H、83H数据指针(16位)含DPL和DPHIE0A8H中断允许控制寄存器IP0B8H中断优先控制寄存器P080HI/O口0寄存器P190HI/O口1寄存器P20A0HI/O口2寄存器P30B0HI/O口3寄存器PCON87H电源控制及波特率选择寄存器SCON98H串行口控制寄存器SBUF99H串行数据缓冲寄存器TCON88H定时控制寄存器TMOD89H定时器方式选择寄存器TL08AH定时器0低8位TH08CH定时器0高8位TL18BH定时器1低8位TH18DH定时器1高8位寄存器B 在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。程序状态字(Program Status Word) 程序状态字是一个8位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。寄存器的各位定义如下,其中PSW.1是保留位,未使用。下表是它的功能说明,并对各个位的定义介绍如下:表3程序状态字位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位标志CYACF0RS1RS0OV-PPSW.7(CY) 进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位使用。PSW.6(AC) 辅助进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,否则被清零。AC辅助进位位也常用于十进制调整。PSW.5(F0) 用户标志位,供用户设置的标志位。PSW.4、PSW.3(RS1和 RS0) 寄存器组选择位。可参见本章的图2定义。PSW.2(OV) 溢出标志。带符号加减运算中,超出了累加器A所能表示的符号数有效范围(-128+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。 执行加法指令ADD时,当位6向位7进位,而位7不向C进位时,OV=1。或者位6不向位7进位,而位7向C进位时,同样OV=1。 除法指令,乘积超过255时,OV=1。表面乘积在AB寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A中。 除法指令,OV=1,表示除数为0,运算不被执行。否则OV=0。PSW.0(P) 奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,否则清零。数据指针(DPTR) 数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。 DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令: MOVX A, DPTR MOVX DPTR, A 在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。 MOVC A, A+DPTR堆栈指针SP(Stack Pointer) 堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知,08H1FH隶属13工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H1FH之间较为适宜。 数据的写入堆栈我们称为入栈(PUSH,有些文献也称作插入运算或压入),从堆栈中取出数据称为出栈(POP,也称为删除运算或弹出),堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出,必须先取走最上层的书籍。这个道理非常相似。 那么堆栈有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。 转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。 MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数据。 堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令,用于子程序完成时,为主程序恢复现场。I/O口专用寄存器(P0、P1、P2、P3) I/O口寄存器P0、P1、P2和P3分别是MCS-51单片机的四组I/O口锁存器。MCS-51单片机并没有专门的I/O口操作指令,而是把I/O口也当作一般的寄存器来使用,数据传送都统一使用MOV指令来进行,这样的好处在于,四组I/O口还可以当作寄存器直接寻址方式参与其他操作。定时/计数器(TL0、TH0、TL1和TH1) MCS-51单片机中有两个16位的定时/计数器T0和T1,它们由四个8位寄存器组成的,两个16位定时/计数器却是完全独立的。我们可以单独对这四个寄存器进行寻址,但不能把T0和T1当作16位寄存来使用。定时/计数器方式选择寄存器(TMOD) TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD可以用字节传送指令设置其内容,但不能位寻址,各位的定义如下:表4定时/计数器工作方式控制寄存器TMOD位序D7D6D5D4D3D2D1D0位标志GATEM1M0GATEM1M0定时/计数器1定时/计数器0最后总结一下:附录3 C语言编码规范-强烈推荐 感谢高手为我们总结这些好东西。看完之后发现自己很多的代码都是不规范的。搞电子的程序员要好好看看。A.1 排版 1-1:程序块要采用缩进风格编写,缩进的TAB键一个。 1-2:相对独立的程序块之间、变量说明之后必须加空行。 1-3:较长的语句(80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。 1-5:若函数或过程中的参数较长,则要进行适当的划分。 1-6:不允许把多个短语句写在一行中,即一行只写一条语句。 1-7:if、while、for、default、do等语句自占一行。 1-8:对齐只使用TAB键,不使用空格键。 1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。 1- 10:程序块的分界符(如C/C+语言的大括号和)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while0、switch、case语句中的程序都要采用如上的缩进方式。 1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如),后不应加空格。 1-12: 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。 A.2 注释 2-1:一般情况下,源程序有效注释量必须在20以上。 2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。 2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。 2-4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。 2-5:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。 2-6:注释的内容要清楚、明了,含义准确,防止注释二义性。 2-7:避免在注释中使用缩写,特别是非常用缩写。 2-8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。 2-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。 2-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。 2-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。 2-12:注释与所描述内容进行同样的缩排。 2-13:将注释与其上面的代码用空行隔开。 2-14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。 2-15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。 A.3 标识符命名 3-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。 3-2:命名中若使用特殊约定或缩写,则要有注释说明。 3-3:自己特有的命名风格,要自始至终保持一致,不可来回变化。 3-4:对于变量命名,禁止取单个字符(如i、j、k.),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。 3-5:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式。 A.4 可读性 4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。 4-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。 A.5 变量 5-1:去掉没必要的公共变量。 5-2:仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。 5-3:明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。 5-4:当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。 5-5:防止局部变量与公共变量同名。 5-6:严禁使用未经初始化的变量作为右值。 A.6 函数、过程 6-1:对所调用函数的错误返回码要仔细、全面地处理。 6-2:明确函数功能,精确(而不是近似)地实现函数设计。 6-3:编写可重入函数时,应注意局部变量的使用(如编写C/C+语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)。 6-4:编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论