专业的游戏资讯门户网站,爱游戏就上Gmae234!
game234首页 > 问答列表 >

c语言 怎么对位进行替换

就是在单片机keil编程中,有sbitCY=PSW^7,sbitK=P1^0,要想把这两个位所贮存的二进制数值进行替换,应该怎么替换?或者请告诉我怎么利用左移指令与逻辑运算指令怎样实现循环左移...
请注意:本网坚决拥护中国共产党领导,坚决打击任何违规违法内容,若您发现任何有害信息,请E-Mail:513175919@qq.com举报,我们核实后将给予现金奖励!爱国是每个中国人应尽的责任,爱国从我做起!为实现中国梦,实现中国腾飞而努力!

   IIS 8.5 详细错误 - 404.0 - Not Found

HTTP 错误 404.0 - Not Found

您要找的资源已被删除、已更名或暂时不可用。

最可能的原因:

  • 指定的目录或文件在 Web 服务器上不存在。
  • URL 拼写错误。
  • 某个自定义筛选器或模块(如 URLScan)限制了对该文件的访问。

可尝试的操作:

  • 在 Web 服务器上创建内容。
  • 检查浏览器 URL。
  • 创建跟踪规则以跟踪此 HTTP 状态代码的失败请求,并查看是哪个模块在调用 SetStatus。有关为失败的请求创建跟踪规则的详细信息,请单击此处

详细错误信息:

模块   IIS Web Core
通知   MapRequestHandler
处理程序   ASPClassic
错误代码   0x80070002
请求的 URL   http://172.21.0.17:80/asku.asp?id=27414556
物理路径   C:\web\asku.asp
登录方法   匿名
登录用户   匿名

详细信息:

此错误表明文件或目录在服务器上不存在。请创建文件或目录并重新尝试请求。

查看详细信息 »

   2019-04-24 10:15:45


采纳答案   就是交换两个变量是吧。另设一个中间变量即可实现。
sbit CY=PSW^7;
sbit K= P1^0;
sbit temp;
temp=CY;
CY=K;
K=temp;
这个思想您应该能明白吧。呵呵。

实现循环左移是吧,就是最高位移到最低位,然后顺次左移。
左移指令是把最高位移到C(进位/借位标志)里面,所以需要把这个标志放到最低位,也就是说使最低位和进位标志一样。
设最高位为A,最低位为B,可得最低位应该为 A非*B+A*B
因此不能用一个独立的逻辑运算(与、或、非、异或)实现,按照上面给出的公式即可运算,注意最高位A是在C进位标志中的。

呵呵,这个明白了吗?更多追问追答
追问:我刚试过,但是运行不成功。希望帮我纠正其中的错误,万分感谢!(是否是寄存器PSW的CY有什么特殊的原因,还是位与位之间不能用赋值“=”运算)
追答:嗯。首先aa是uchar类型的,不能使用操作符“^”,这个操作符只对P0到P3有效,而且得定义在main函数之前,也就是宏定义之后的位置。

改正:把所有sbit类型的变量声明在主函数之前,并且赋初值。
可以先定义 sbit K=P0^0; 然后在调用函数中修改P0的值,这时候K的值也可以改变的。

所以您的corl函数中只需要写以下语句:
aa=aa<<1;
P0=aa;
temp=K;
K=CY;
CY=temp; //其实这里不需要这么复杂,您只是需要把最低位变为和CY的值一样,所以直接
//K=CY 即可,不需要交换他们的值,交换之后没用。
这时P0口中已经是循环左移之后的值了,所以不需要返回值,main函数中也不需要再对P0口赋值了。但是要修改aa的值,要保证进入corl函数时,aa的值是当前P0的值。

您再试试,还不行的话,把源程序粘贴过来,我给您调试。您是要实现循环亮灯?
追问:还是得麻烦你帮我调试一下了!
#include
#define uint unsigned int
#define uchar unsigned char
sbit K=P1^0;
void delayms(uint);
uchar crol();
uchar aa;
void main()
{aa=0xfe;
while(1)
{P1=aa;
delayms(50000);
aa=crol();}
}
void delayms(uint xms)
{uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);}
uchar crol()
{aa=aa<<1;
P1=aa;
K=CY;}
追答:OK,给您调试好了。您自己对应一下哪里还不清楚,程序能正确执行,得到正确结果。

#include //我用的是89c51做的仿真
#define uint unsigned int
#define uchar unsigned char
sbit K=P1^0;
void delayms(uint);
void crol(); //这里不需要返回值 aa是全局变量
uchar aa;
void main()
{aa=0xfe;
P1=aa; //只需要最开始给P1口赋初值即可 while里面不需要再赋值 在crol函数中改变P1的值
while(1)
{
delayms(500);
crol();}
}
void delayms(uint xms)
{uint i,j;
for(i=xms;i>0;i--)
for(j=10;j>0;j--);}
void crol()
{aa=aa<<1; //aa左移 记住aa始终保存的是P1口的上一个状态
P1=aa; //左移之后给P1 这时P1.0还是0
K=CY; //修改P1.0的值为刚刚移出来的那个值在CY中
aa=P1; //修改aa的值 以便下一次利用
}

这回明白了吧。呵呵    2019-04-24 10:15:45

ask1ask2ask3ask4ask5ask6ask7ask8ask9ask10ask11ask14ask13ask14ask15

热门图文更多>