方式A:
unsigned int temp=0x01;
void delay();
while(1)
{
delay();
P1=temp;
temp=_crol_(temp,1);
}
方式B:
void delay();
while(1)
{
delay();
P1=_crol_(P1,1); // 没用中间变量,直接左移
}
A和B在C51中调试都没问题,打开P1口查看,都是左移
在Proteus中仿真时,A没问题,但B出现问题,P1口全是蓝色的低电平。
把8个LED全删掉,直接观察P1口,又发现红色的高电平能够左移循环。
怎么回事?怎么用方式B左移,P1口连上LED后就出问题了?
一点没问题
C51中 _crol_ 的使用问题
include "reg51.h"#include "intrins.h"void delay(unsigned int i){ while(i--);}void main(void){ char i=0; P1=0xfe; while(1){ delay(20000); P1=_crol_(P1,1); \/\/ 没用中间变量,直接左移 }} 一点没问题
请问C51单片机的循环左移和循环右移函数中的“循环”是指什么?_百度知 ...
C51单片机的循环左移函数是,_crol_(变量名,n),循环右移函数是,_cror_(变量名,n),函数中的“循环”是指变量的8位二进制数依次向左移一位,或向右移一位。你比如的,取8位数,让1111 1110循环左移一位,就是在1111 1110、1111 1101、1111 1011、1111 0111、1110 1111,等等,每移位一次,...
各位单片机高手,哪位帮我分析一下下面这个程序,问题出...
回答:首先给你解释一下“<<”位移符的作用: 因为你的P1=0xfe,二进制数据就是11111110,左移一位之后为11111100,0往左移了一位,但是最低位系统自动以0补齐,而0x7f的二进制数据位01111111,所以if语句是永远进入不了的。 当然,针对此问题,C51给出了一个解决方案: 使用_crol_()函数可解决此问题...
C51单片机里的_crol_()语句用普通的语句怎么实现
汇编最简单:RL A ;循环左移 C麻烦一点:unsigned char corl(unsigned char a){ if(a&0x80)a=(a<<1)|0x01;else a=a<<1;return(a);}
为什么我用C51里左移的指令不能实现流水灯的循环?
程序写的不对,你主函数里面 void main(){ aa=0xde;while(1){ P1=aa;delayms(500);aa=aa<<1; \/\/右移一位,移8次出去,还在往右移动,都移动出界了哈哈!} } 在程序里面写个判断语句移动完成后,在从新开始移动程序如下:int main(void){ aa=0xde;while(1){ P1=aa;delayms(500);a...
c51 中断之后怎么让程序继续执行呢?
外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为delay();P1=0xfe;delay();EX0=0;P1=_crol_(P1,1);delay();EX0=1;P1=0X00;一直重复.之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:voidtx0()interrupt0using0{unsignedchari;delay();P1=0xfe;delay...
求一c51单片机,8位流水灯程序
a = _crol_(a, 1);for(i = 8; i > 0; i--)for(j = 250; j > 0; j--)for(k = 250; k > 0; k--);} } \/\/--- 补充提问:0123不是同时亮,而是0 1 2 3 按顺序亮,再1234按顺序亮...回答补充提问,改动如下:include<reg52.h> include<intrins.h> void main(){ ...
51单片机流水灯程序中头文件#include<intrinsh>的解析
intrins.h 编辑本段intrins.h 在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便. 内部函数 描述 _crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ 长整数循环右移 _nop_ 空操作8051 NOP ...
各位大虾看一下这个c51怎么弄的!
char temp,a;void delay(u);void main(){ a=0;temp=0xfe;{ \/\/多余的大括号 if(a%2=0)P2^3=0;delay(20);else P2^3=1; \/\/应该在main函数之前位声明 sbit beep=P2^3 delay(20);}……while(1){ P1=temp;temp=_crol_(temp,1);delay(20);P1=temp;} } void delay(u...
如何用C51单片机实现P0口接两个按键,P1口接8个LED灯。key1按下左移动...
给个四路:定意一个变量;if(按键1按下)变量为1;if(按键2按下)变量为2;if(变量==1){ 左移控制;} else if(变量==2){ 右移控制;}