PIC单片机中C语言程序中|=和&=是输入输出的意思么

//PORTA RA2 / RA4 / RA5
TRISA|= (BIT2 ); //RA2 输入
TRISA&=~(BIT0|BIT4|BIT5); //RA0 RA4 RA5输出
ANSEL|= (BIT2 ); //AN2 模拟输入
//PORTB RB4 / RB5 / RB6/ RB7
TRISB|= ( BIT5); // RB5 输入
TRISB&=~(BIT4|BIT6|BIT7); //RB4 RB6 RB7 输出
//PORTC RC0 / RC1/ RC2 / RC5 /// // RC3 / RC4/ RC6 / RC7
TRISC|= (BIT0 | BIT1| BIT2| BIT5); //RC0 RC1 RC2 RC5输入
TRISC&=~(BIT3|BIT4|BIT6|BIT7); //RC3 RC4 RC6 RC7输出
ANSEL|=(BIT4|BIT5|BIT6); //RC1 为AD口输入 对应AN5
看不太明白,能解释一下么,百度不到。。

和c51是一样的咯,位与和位或追问

你对PIC16F690单片机有研究么,看过资料吧,我就想知道TRISA|= (BIT2 ); 为什么就是RA2输入。。

追答

TRISA是方向寄存器咯,控制io方向的,置为1或0变为输入或输出咯

追问

你可能没太明白我的意思,位运算返回值是二进制数,我是想知道TRISA与BIT2位与后,TRISA2怎么等于1?TRISA和BIT2是默认值么,默认值是多少。。

追答

例如bit2=0x04;
那么TRISA|= (BIT2 ); 就是将trisa的第三位置为1,就这么简单

追问

可是我不知道BIT2等于几啊,就算BIT2=0X 0000 0100,我也不知道TRISA等于几啊,也没把他置1,别人写的程序也没问题,运行无故障,所以我以为他们都有初值或者固定值或者默认值之类的,我就是想问这个。。

追答

╮(╯▽╰)╭
菜鸟就是这个样子地
初始化的话时候可以TRISA=0x00,那么你就知道TRISA等于几咯,至于BIT2=多少,头定义里有的

追问

这个在初始化里真心没找到有初值,头定义里也没有BIT2,算了,谢谢你了,我还是问他本人吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-23
一般用 |= 置位,用 &= 清除位
举个例子:
BIT3 = 0x04;
PORTA |= BIT3; /* 将PORTA第3位设置为1 */
PORTA &= ~BIT3; /* 将PORTA第3位设置为0 */
实在不清楚可以拿笔算一下
第2个回答  2013-09-23
这些都是简单的C语言,你好好看看运算符相关章节内容
a |= b 相当于 a = a | b

a &= b 相当于 a = a & b追问

位运算返回值是二进制,我是想问TRISA和BIT2默认值是多少,TRISA和BIT2位与后怎么就是:TRISA2=1

追答

1、pic单片机没用过,不过针对八位单片机BIT2应该就是等于:(unsigned char )(1<<2)也就是0x04(二进制为:00000100b)。
2、你上面有一处误解:“位运算返回值是二进制”,在寄存器和内存中,数据都是以二进制存储的,没有运算返回值是二进制还是八进制还是十进制亦或是其他的说法。
3、针对于:“TRISA和BIT2位与后怎么就是:TRISA2=1”,TRISA我姑且认为是寄存器并且TRISA2为TRISA的第2位,进行&操作是将TRISA的第二位置位为1,所以就有“TRISA和BIT2位与后怎么就是:TRISA2=1”
4、不客气~

第3个回答  2013-09-23
是位运算的意思
相似回答