程序的继承开发环境缩写教IDE,无论你编写zigbee 51 32 或者你是编写c++ c# java php 安卓,都需要有一个好的开发环境。一个好的开发环境,这里有一个我现实中的例子,我有一个朋友,他学了一种新语言 AS3,开始的时候,他不知道这个东西用什么开发环境,于是他就用记事本编程。这里我不得不说,大神用记事本编程也是可以的,但是一旦他遇到问题了,也不能调试,只能看着程序一点一点的想到底问题出在哪了。后来他向一个有经验的人找到了一款开发环境,这个环境运行其实还是比较慢的,但是可以调试,开发效率提升了好多。
那么我们的zigbee编程呢,就是用的iar,好我们下面正式开始
咱们知道了这个之后,咱们来看一下串口配置的流程
1指定串口的IO位置:
意思就是咱们需要制定串口到底实在备用位置1还是在备用位置2,咱们这里两个串口,我只讲串口0
2相应IO配置成偏上外设功能
因为我们的串口他其实一个片上外设的功能,那么我们就需要吧IO口对应的脚设置成片上外设的模式
3.8个数据位、1个停止位、无流控、无校验确立。
这个就是我们常见的8个数据位啊 停止位啊 灯的配置
4.波特率
5开CPU中断、对应串口接收中断
把两个中断打开
这里涉及的寄存器可能比较多,我就不带同学们来一一看寄存器了,我讲这个串口,让大家把这个实验做出来,主要是为了方便我们后面调试的时候看现象,做实验,所以 像这种和51单片机和非常类似,我只是把不同点拿出来讲一下,这里其实相应的初始化代码已经列出来了我就带着大家看一下这个低吗,这个串口比较简单
1把这个寄存器的第0位清零,意思就是他的备用位置我们选的1,就是实现了第一句这个功能
2这里就是把P0_2P,0_3配置成偏上外设模式,而不是普通IO口模式
3这句话这里实际涉及很多寄存器的操作,你不需要知道细节,你只需要知道只要这么配置,那么他就能实现我们第三句的这些功能,具体这样配置到是啥意思,你仔细研究出来一一对应上了好像也没什么意义,你下次写的时候难道你会再查一遍?肯定不会,你肯定就是把这句代码一抄就完事了
所以只要知道这样配置能达到这种效果就可以了,你不需要在意这些细节了
4然后我们需要关心波特率,波特率在我们手册里给了我们一堆常见的波特率对应的表
4然后我们需要关心波特率,波特率在我们手册里给了我们一堆常见的波特率对应的表,他实际上是一个公式,我们不需要知道这个是怎么算出来的,他把所有的典型波特率的典型值,对应的两个参数都告诉我们了,我们只需要把这两个值填到寄存器里面去就可以了,而且我们只关心怎么把它用起来,不需要去关心这些细节
我们最最常用的就是9600 115200,你像我编程这么长时间只用到过这两种波特率,可能是我孤陋寡闻,但是我真的没有用过别的波特率,咱们有一说一
然后我们这里配置波特率为115200所以寄存器配置就是11 216,如果你要配别的波特率,那么你就来查表,然后把值赋给寄存器就可以了
然后就需要把串口的中断和cpu总中断打开就可以了
那么这个这个串口初始化的工作就结束了
然后就是中断函数,这个东西就是中断向量,不能随便改,函数名可以随便写,这就是串口0的中断函数,一旦串口0接收到了数据,那么就会引发中断,会调用这个函数
进入到这个里面之后首先这里面有个URX0IF这个实际上是寄存器的一个位,表示串口0一旦来数据的时候那么这个寄存器里面的这个标志位就会被置1,我们在程序里要把它清零
然后我们要取数据,是从U0DBUF里面拿到串口传过来的数据
这里说一下这里和51单片机是一样,我们这个串口有两个寄存器,都叫U0DBUF,这是两个寄存器,名字都一样,当我们读的时候,读的是外面进来的这个数据进入到缓冲区的数据,如果我们去写的时候,吧数据赋值到这个寄存器里面,他会把数据发出去,所以虽然这两个寄存器的名字一样,但是实际上,是两个不同的寄存器
区别就是 吧ch放在左边就是读取,如果ch放到右边,就是去写数据
名字一样但是是两个寄存器
然后我们这个函数的功能就是把拿到的自己马上又送出去
这里又有一个标志位UTX0IF,这也是一个寄存器的位,默认他是0,一旦我们发送完,他就是置为1,然后我们需要手动清零,也就是如果这个寄存器的这一位=0,就表示没有发送完,一旦发送完了,就再把它清零
然后我们在吧这个功能丰富一下