ORTx寄存器是 单片机的输出寄存器,端口输出状态设定好后通过设置PORTx可以使端口x的相应位输入高电平或低电平来控制外部设备。<BR>例如:<BR>PORTA = 0xFF; //端口A所有口线输出高电平</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>PORTA = 0x0F; //端口A高4位输出低电平,低4位输出高电平</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>小贴士:<BR>利用位逻辑运算符对特定的端口进行设定。</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>PORTA = 1<<3; //端口A第4位置为高电平,其它为低电平,应为00000001左移3位后是00001000<BR>PORTA = 1<<7; //同理,第8位置高电平</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>有时候我们期望端口某一位设置成高电平,但是其它位的高低电平要保持不变,如何做呢?C语言是很强大的,有办法!如下:</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>PORTA |=1<<3; //实现端口A第4位置为高电平,其它位的高低电平不受影响<BR>上面的语句是简化的写法,分解一下就是:<BR>PORTA = PORTA | (1<<3); //数字1左移3位后与端口A进行按位或,结果就是端口A第4位置为高电平,其它位的高低电平不受影响</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>那么大家就会问了,如何实现设置某一位为低电平,其它位的高低电平不变呢?建议大家思考1分钟再看下面的内容。</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>PORTA &=~(1<<3); //解释一下,首先将1左移3位变成00001000b,然后再按位取反变成11110111b,然后再与端口A做按位与运算,这样就实现了设置端口A第4位为低电平,其它位的高低电平不变。<BR>分解后的语句为:<BR>PORTA = PORTA & (~(1<<3)); //结果是一样的</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>将某端口相应位的高低电平翻转,即原来高电平变为低电平,低电平变为高电平.</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><BR><FONT size=4>PORTA = ~PORTA; //将PORTA按位取反后再赋值给PORTA</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>按位逻辑运算还有一个异或,这个也非常有意思,它能实现电平翻转,有兴趣大家看看书</FONT></SPAN></H2>
>这不仅仅是C语言的问题,是单片机C语言.</P><P>b是二进志标志.</P>| 欢迎光临 智能车制作 (http://111.231.132.190/) | Powered by Discuz! X3.2 |