arm+wince5.0 位变量 单独操作某个引脚

coldra   2010-6-2 09:10 楼主
wince上面能不能定义位变量,,就像51那样,
sbit led=P2^0;这种,操作led这个变量就是操作那个引脚了,,,
arm上面有没有类似的定义??用宏也行

我想定义位变量 单独操作某个IO口,,比如GPF0,,想不到办法~~

回复评论 (6)

ARM上没有位运算的变量,不过可以通过控制IO寄存器来实现某个IO口操作。
在CE下的话还需要编写符合微软规范的驱动程序。偶也是刚学,呵呵,就知道这么多了。
点赞  2010-6-2 09:25
在WinCE上要想操作GPIO口,就得写驱动程序,通过虚拟地址映射来控制IO口,楼主可以先探索一下如何控制IO口吧,可以参考一下如何写GPIO流驱动。
点赞  2010-6-2 09:44
直接使用位操作就可以了,不能定义位变量。
点赞  2010-6-2 10:02
给点提示你:
GPF0 &=~(1<<0);//GPF0 置低
GPF0 |=(1<<0); //GPF0 置高
点赞  2010-6-2 20:01
引用: 引用 4 楼 linux_lee 的回复:

给点提示你:
GPF0 &=~(1<<0);//GPF0 置低
GPF0 |=(1<<0); //GPF0 置高


呵呵,写错了,改正下:
GPFDAT   &=~(1<<0);//GPF0 置低
GPFDAT   |=(1<<0); //GPF0 置高
点赞  2010-6-2 20:03
一、定义一个字节(8位)的位变量,既可按字节访问也可按位进行访问



union flag                                // 先定义一个联合flag



{



    unsigned char val;                    // 再定义该联合中的一个字节型变量val



    struct                                // 定义一个结构型数据,构成位域。



    {



        unsigned char B0:1;     // B0~B7为每一位的名称,可用其他名称替换,例如B0可写成FLAG0。



        unsigned char B1:1;     // B1可写成FLAG1



        unsigned char B2:1;     // B2可写成FLAG2



        unsigned char B3:1;     // B3可写成FLAG3



        unsigned char B4:1;     // B4可写成FLAG4



        unsigned char B5:1;     // B5可写成FLAG5



        unsigned char B6:1;     // B6可写成FLAG6



        unsigned char B7:1;     // B7可写成FLAG7



    } bits;                     // 再定义该联合中的另一个结构型变量bits



};



volatile union flag flag;       // 最后,定义该联合的变量flag,注意这句话中有两点要弄清楚,关键字volatile的本意是“易变”,在C30中一般不能省略;第一个flag是联合的名称,第二个flag是该联合的变量,这第二个flag可写成其他任意名称,例如lcd_ctrl等等。



有了上述定义就可以引用了,引用方法如下:



当按字节操作时,例如这样:flag.val = 0xAA;       //变量flag被赋值:0xAA。



当按位操作时,例如这样:flag.bits.B0 = FALSE;    // 0



                        flag.bits.B1 = TRUE;     // 1



                        flag.bits.B2 = FALSE;    // 0



                        flag.bits.B3 = TRUE;     // 1



                        flag.bits.B4 = FALSE;    // 0



                        flag.bits.B5 = TRUE;     // 1



                        flag.bits.B6 = FALSE;    // 0



                        flag.bits.B7 = TRUE;     // 1



在上述定义中,C30在内存中只分配一个字节的变量flag,因而操作起来极为方便,如果将上述定义中的volatile关键字去掉,也可应用于keil c51中,以解决51单片机中位变量有限(20H~2FH共128个位)的矛盾。



二、定义一个字(16位)的位变量,既可按字访问也可按位进行访问



这和定义字节位变量的方法相同,请看:



union flag                                 // 先定义一个联合flag



{



    unsigned int val;                      // 再定义该联合中的一个字变量val



    struct                                 // 定义一个结构型数据,构成位域。



    {



        unsigned char B0:1;     // B0~B7为每一位的名称,可用其他名称替换,例如B0可写成FLAG0。



        unsigned char B1:1;     // B1可写成FLAG1



        unsigned char B2:1;     // B2可写成FLAG2



        unsigned char B3:1;     // B3可写成FLAG3



        unsigned char B4:1;     // B4可写成FLAG4



        unsigned char B5:1;     // B5可写成FLAG5



        unsigned char B6:1;     // B6可写成FLAG6



        unsigned char B7:1;     // B7可写成FLAG7



        unsigned char B8:1;     // B8写写成FLAG8



        unsigned char B9:1;     // B9可写成FLAG9



        unsigned char B10:1;    // B10可写成FLAG10



        unsigned char B11:1;    // B11可写成FLAG11



        unsigned char B12:1;    // B12可写成FLAG12



        unsigned char B13:1;    // B13可写成FLAG13



        unsigned char B14:1;    // B14可写成FLAG14



        unsigned char B15:1;    // B15可写成FLAG15







    } bits;                                  // 再定义该联合中的另一个结构型变量bits



};



volatile union flag flag;                    // 最后,定义该联合的变量flag。



当按字操作时,例如这样:flag.val = 0x55AA;   // 变量flag被赋值:0x55AA。



当按位操作时,例如这样:flag.bits.B0 = FALSE;// 0



                        flag.bits.B12 = TRUE;// 1



在上述定义中,C30在内存中分配一个字变量flag。




这是摘录的东西。可以用这种方法定义位变量。用共用体的方式对IO口进行操作是经常使用的一个手段。建议楼主查一下相关的资料。这个问题就很容易解决。看一下定义管脚是如何实现的。

另外,需要用流驱动的方式来调用你的底层。
点赞  2010-6-3 19:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复