ZigBee无线传感网技术与应用 课件 项目二任务二 变化的IO口 .pptx
Zigbee无线传感网技术与应用
空调排气系统
02
任务二:变化的I/O口
任务要求
要求读者掌握程序中与、或、非逻辑语法的用法,掌握单片机程序中延迟程序的写法,使用延迟程序修改任务一程序让LED效果慢下来,并使用万用表测量电压。
储备知识
逻辑运算符,共有三种常用的计算方式与、或、非,在单片机程序设计中起着十分关键的作用,这先与、或、非计算方式做一个介绍。单片机中的逻辑计算数字都是1或0进行。
1.逻辑运算
“与”计算在C语言中以“”符号来表示,注意这里为一个的“”,两个表示对位操作,一个表示对字节的计算。
“与”计算英文表示为and,在字面上的理解为and即和,如“我要一个杯子和一块布”字面上意思是说杯子和布我都要,其计算的方式与乘法类似。如右图:
图:类似乘法的计算
用一个口决表示即:“有0出0,全1出1”。与运算中只要一个有0的存在那么它的结果就为0。
储备知识
1.逻辑运算
“或”计算在C语言中以“|”符号来表示,注意这里为一个的“|”,两个表示对位操作,一个表示对字节的计算。
“或”计算英文表示为or,在字面上的理解即或者,如“我要一杯酒或者一盏茶”,字面上的意思说我要酒或者茶,其计算方式类似加法计算。如右图:
图:类似加法的计算
用一个口决表示即:有1出1,全0出0”。或运算中只要一个有1的存在,那么她的结果就是1。
储备知识
1.逻辑运算
“非”计算在C语言中以“~”符号来表示,注意与“!”不同,“~”为对字节进行非运算。
“非”计算即取反,如果数据为0那么非则为1,1非则为0。如下图:
图:取反计算
储备知识
2.逻辑运算作用
逻辑运算符在单片机中一个最为重要作用就是对位的计算。如果需要实现将P1.0置成输出模式,然后在不改变原先的状态的情况下再将P1.5设置成输出,在不改变原先的状态的情况下再将P1.7设置成输出,下面列举一行代码,代码如下所示。
P1DIR=0x01;//将P1口的P1.0设置为输出
P1DIR=0x41;//将P1口的P1.5设置为输出
P1DIR=0xC1;//将P1口的P1.7设置为输出
储备知识
2.逻辑运算作用
P1DIR|=0x01;//将P1口的P1.0设置为输出
P1DIR|=0x40;//将P1口的P1.5设置为输出
P1DIR|=0x80;//将P1口的P1.7设置为输出
这里提到有个前提是不影响原先状态的情况下,改变对操作每个位,此时则需要对先前的位进行保留重新计算新的位,大大增加了计算的量,如果这时使用逻辑运算符就可以减轻计算量,同时又可以使得I/O口的位操作变的十分方便,代码如下所示。
代码如上所示,其中“|=”表示P1DIR或计算0x01数值。利用或计算的特点,在或计算中如果数据或上0则保留下原先的数据,或上1则强制变为1,如右图所示。
图:或计算
储备知识
2.逻辑运算作用
在理解完“或”计算之后同样对“与”计算在单片机中的作用进行说明,实际“与”计算则作为或计算相反在使用。同样如果将P1DIR设置成先前的P1.0设置成输入,P1.5设置成输入,那么如果不考虑先前数据的情况下,可以使用“与”计算来进行操作。代码如下所示。
P1DIR=~0x01;//将P1口的P1.0设置为输入
P1DIR=~0x40;//将P1口的P1.5设置为输入
P1DIR=~0x80;//将P1口的P1.7设置为输入
储备知识
2.逻辑运算作用
代码如上所示这里使用到了一个“非”的取反符号,让程序写起来更加容易,0x01取反的到一个0xfe的数据二进制即为11111110,根据与计算的原则任何数与上1得到的为其本身,与上0则强制清0,如下图所示。
图:与计算
储备知识
在任务一中,是否遇到一个问题即程序上写了LED亮与灭的代码,但是全速运行的过程中并未出现同样的亮与灭效果,这是因为程序执行的速度很快,因为太快了所以看不出原先的亮灭的变化,这时希望它的执行速度可以慢下来,但是无法通过修改特殊寄存器的方式让程序慢下来,所以需要使用延迟程序来实现该功能。
延迟顾名思义让程序先等一会在执行,延迟的思想在于如何等一会,在这一会的时间我们需要干些什么事情呢?答案就是做没有用的代码,如循环。代码如下所示。
3.延迟妙用
unsignedinti=10000;
while(i--);
储备知识
分析刚刚的代码,首先定义了一个整型的变量i,让i赋值10000,再让i一直减1直到i为0时退出循环,在这过程中在这个代码段循环了10000次,如果芯片的一条指令的速度为0.032us,则乘上10000得到320us的时间,也就是得到了停留时间。但是320us并