|
5楼
楼主 |
发表于 2013-11-8 12:53:22
|
只看该作者
本帖最后由 oldbeginner 于 2013-11-8 12:59 编辑
oldbeginner 发表于 2013-11-8 12:29
我刚开始看下面的的定义时云里雾里的,摸不着门,不过,现在可以解决了。
//------------------------- ...
现在就可以理解端口刷新,我刚开始理解为初始化是不正确的。
//------------------------------------------------------------------------------------------------------------
//X输入,Y输出刷新
//------------------------------------------------------------------------------------------------------------
static void RefreshIO(void)
{
rX[0].BYTE =~P1;
rX[1].BYTE =~P2;
P0 = rY[0].BYTE;
}
********************
果然,在这里需要理解为联合体,好在代码短小。
输出最好理解,先看
P0 = rY[0].BYTE;
P0是输出端口,因为联合体内只有一个空间,所以BYTE对应rY[0](在前面的分析中理解为结构体)的8个二进制位。
再看输入端口,
rX[0].BYTE =~P1;
多了一个取反,这时再看电路图,按键的另一端接地,这样当按键按下时,端口是低电平(为0),但是在程序逻辑里要表示为1,所以取反。
同理 rX[1].BYTE =~P2;
这个端口刷新函数为什么定义为静态函数?搜一下,也可以理解。
静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
****************************
在PLC_Configure.h中
// 位运算器及 7级中间过渡栈
extern unsigned char data ACC_BIT;
// 位元件 X,Y 存储位
extern TYPE_BIT_BYTE data rX[_X_BYTE] , rY[_Y_BYTE];
搜一下,若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下,http://zhidao.baidu.com/link?url ... 0dUVHC5ChADZstKT8aq。
|
|