当前位置: 代码迷 >> 单片机 >> 关于单片机程序一些有关问题
  详细解决方案

关于单片机程序一些有关问题

热度:52   发布时间:2016-04-28 15:21:35.0
关于单片机程序一些问题
以下是单片机程序,请高手注释解释一下每句话的含义啊

#define SET_LE() GP4DAT = (GP4DAT | 0x00080000) //P4.3->LE
#define CLR_LE() GP4DAT = (GP4DAT & 0xFFF7FFFF)

#define SET_SCL() GP4DAT = (GP4DAT | 0x00100000) //P4.4->SCL
#define CLR_SCL() GP4DAT = (GP4DAT & 0xffefffff)

#define SET_DATA() GP4DAT = (GP4DAT | 0x00200000) //P4.5->DATA
#define CLR_DATA() GP4DAT = (GP4DAT & 0xffdfffff)

#define SET_DATA_OUT() GP4DAT = GP4DAT | 0x20000000;
#define SET_DATA_IN() GP4DAT = GP4DAT & 0xDFFFFFFF;

------解决方案--------------------
就是一个宏定义,很好理解啊

#define SET_LE() GP4DAT = (GP4DAT 
------解决方案--------------------
 0x00080000) //P4.3->LE

看SET_LE()的名字,就是把LE那根线拉高
GP4DAT应该就是映射GP4口的寄存器
 (GP4DAT 
------解决方案--------------------
 0x00080000) 就是把寄存器GP4DAT对应的那位拉高
然后LE那根线就高了

如果楼主是初学,不明白#define可以百度下
------解决方案--------------------
看看C语言语法的 宏定义部分 和 位操作部分 就明白了,很简单的
------解决方案--------------------
1楼说得对,就是宏定义
代码中碰见SET_LE() 就用GP4DAT = (GP4DAT 
------解决方案--------------------
 0x00080000)替换就好明白了 
------解决方案--------------------
是这样:

编译程序在遇到你所定义的宏名的时候,就会替换成对应的宏字符串。这个过程也叫做宏展开。

例如你定义了

#define SET_LE() GP4DAT = (GP4DAT 
------解决方案--------------------
 0x00080000) //P4.3->LE

编译时,代码中所有的 SET_LE() 都会替换成 GP4DAT = (GP4DAT 
------解决方案--------------------
 0x00080000) //P4.3->LE。
  相关解决方案