⑴ 51单片机c语言里 _nop_ 函数怎么用
在单片机c语言中直接调用库函数即可,具体如下:
#include<intrins.h> // 声明了void_nop_(void);
_nop_(); // 产生一条NOP指令。
该函数的作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
⑵ 求写一段简单的51单片机C语言代码
单片机检测高电平。1、可以用外部中断,外接激光传感器最好用普通光耦隔离一下,顺便改成低电平触发单片机中断。然后用位移指令移动跑马灯,然后计数值加1.
2、可以用循环检测,也建议用光耦隔离先,在MAIN里面不断检测P00,发现变化后,再次检测以便确认,确认后同样位移一下跑马灯,然后计数加1。
⑶ 51单片机c语言 _nop_()是一个空指令短时间延时的空几个机器周期
这个_nop_()等效与汇编里面的,NOP指令,也就是空一个机器周期,如果是传统51单片机的话,等于空12个时钟周期【即一个机器周期】,操作方法如下:
1、首先,可以利用keil来进行模拟实验,观察软件所显示的数值,然后再进行相关的运算,即可得出结果。
⑷ 51单片机 c语言里 _nop_ 函数怎么用 具体一点 求高手指教
在单片机c语言中直接调用库函数即可,具体如下:
#include<intrins.h> // 声明了void_nop_(void);
_nop_(); // 产生一条NOP指令。
该函数的作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
⑸ 51单片机的c语言程序
请你参考:
#include<reg51.h>
unsignedchari;
voidDelayms(unsignedintx)
{
unsignedchart;
while(x--)
for(t=0;t<120;t++);
}
voidmain()
{
IT1=1;
IE|=0x84;
P2=0xFE;
i=1;
while(1);
}
voidEX1_INT()interrupt2
{
ET0=0;
Delayms(10);
P2=~(1<<i);
i=++i%8;
ET0=1;
}
⑹ 请高手具体解释一下以下51单片机C语言程序:
void timer() interrupt 1 using 2//定时器0中断函数,interrupt 1是T0的中断入口
{
Flag_Delay5ms=0;//将 延时5ms 标志位 置为 0,表示5ms结束
TH0=-5000/256;//为T0高8位赋初值,相当于TH0=(65536-5000)/256;可以推出晶振为12MHz
TL0=-5000%256;//为T0低8位赋初值,同上
}
/*延时5ms函数,主要利用定时器0实现*/
void Delay5ms(void)
{
TR0=1;//T0计时开始
ET0=1;//允许T0中断
while(Flag_Delay5ms);//若 延时5ms 标志位 为1,即5ms未结束,则继续等待
ET0=0;//5ms结束,禁止T0中断
TR0=0;//停止T0计时
Flag_Delay5ms=1;//重新将 延时5ms 标志位 置为 1,为下次延时做准备
}
该程序不合理的地方,在等待、及 禁止 T0中断时,停止T0计时前,T0依然在计时,换句话说,下次再启动的初值,已经不是原来设置好的初值了。所以延时误差依然存在。
⑺ 51单片机C语言编程
假设数码管接P1,第三个键是P3.2。
那么程序如下:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x40,0x00};
sbit key3=P3^2;
bit flag;
main()
{
uchar i,j,dat;
P2=0xff;
flag=0;
while(1)
{
dat=P2|0x01;
switch(~dat)
{
case 0x02:i=1;break;
case 0x04:i=0;break;
case 0x08:i=2;break;
case 0x10:i=3;break;
case 0x20:i=4;break;
case 0x40:i=5;break;
case 0x80:i=6;break;
default:i=9;break;
}
if(key3==0)
{
while(key3==0);
flag=!flag;
j=i;
}
if(flag)i=10;
else i=j;
P1=table[i];
}
}
⑻ 51单片机C语言
先定义一个unsigned int 型的变量temp,
然后angle[0]乘以10000,结果给temp,
然后将temp分离,逐个给table的元素。
具体实现代码如下:
unsigned int temp;
temp = (unsigned int)(angle[0]*10000);
table[0] = temp/10000;
table[1] = '.';
table[2] = temp%10000/1000;
table[3] = temp%1000/100;
table[4] = temp%100/10;
table[5] = temp/10;
如果你是用来在1602显示的话,还有转换成ASCII码,在每个数组元素后面+'0'即可。
⑼ c51单片机中,每条c语言需要的时间是多少
应该是指令周期,根据指令的不同,一般一个指令需要1-4个机器周期来完成(比如乘法或除法就需要48个时钟周期来完成),一般的51单片机都是12分频,也就是说1个机器周期分为12个时钟周期。请你好好理解时钟周期--机器周期--指令周期三者之间的关系。
目前STC有不少型号的单片机有单时钟周期指令,一个时钟周期即为一个机器周期,不进行12分频,就是在1个时钟周期内可以执行一条指令,但只是部分指令可以单时钟周期执行,大多指令需要1-6个时钟周期来完成,相比较而言,已经比普通的12分频单片机速度快多了。
⑽ 51单片机c语言编程是否用到指令系统
单纯的c语言编程时用不到系统指令的,但是c和汇编的混合编程时用的到指令系统的,然后就是你要对系统的存储有深刻的认识比如块存储,存储结构等之类的,因为c会用到很多内存操作的,这样可以提高代码运行质量