#ifndef __INTRINS_H__
#define __INTRINS_H__
extern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned int _iror_ (unsigned int, unsigned char);
extern unsigned long _lror_ (unsigned long, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);
extern unsigned int _irol_ (unsigned int, unsigned char);
extern unsigned long _lrol_ (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#endif
1怎么用C51写一个NOP语句呢?
把头文件intrins.h包含进来,然后在需用NOP处调用_nop_();函数即可。
头文件intrins.h包含进来,然后在需用NOP处调用_nop_();函数即可。
2.c51中的intrins.h库函数
_crol_ 字符循环左移
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作8051 NOP 指令
_testbit_ 测试并清零位8051 JBC 指令
详解:
函数名: _crol_,_irol_,_lrol_
原 型: unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
功 能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令
相关,上面几个函数不同于参数类型。
例:
#include
main()
{
unsigned int y;
C-5 1 程序设计 37
y=0x00ff;
y=_irol_(y,4);
}
函数名: _cror_,_iror_,_lror_
原 型: unsigned char _cror_(unsigned char val,unsigned char n);
unsigned int _iror_(unsigned int val,unsigned char n);
unsigned int _lror_(unsigned int val,unsigned char n);
功 能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令
相关,上面几个函数不同于参数类型。
例:
#include
main()
{
unsigned int y;
y=0x0ff00;
y=_iror_(y,4);
}
函数名: _nop_
原 型: void _nop_(void);
功 能:_nop_产生一个NOP 指令,该函数可用作C 程序的时间比较。C51 编译器在_nop_
函数工作期间不产生函数调用,即在程序中直接执行了NOP 指令。
例:
P()=1;
_nop_();
P()=0;
函数名: _testbit_
原 型:bit _testbit_(bit x);
功 能:_testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。
如果该位置为1,则将该位复位为0。8051 的JBC 指令即用作此目的。
_testbit_只能用于可直接寻址的位;在表达式中使用是不允许的
关键字:c51 intrins.h 库函数
引用地址:
c51中的intrins.h库函数
推荐阅读最新更新时间:2024-03-16 14:44
Keil C51 xdata基址偏址寻址试验
本人最近用KEIL C51来做一个程序,要用到外部数据存贮器,也要寻址外部别的芯片,因为要用到对外部数据的连续读写,因此对xdata做了一点详细研究。 一、 第一种方式是定义外部对址常量,程序如下: #define XRAM 0x0000 #define CYDRAM 0x1000 #define EPM244H 0x4000 #define EPM244L 0x5000 void readdata(unint add) { volatile unchar xdata *xramadd; xramadd=CYDRAM+add; //just produce the CS signal
[单片机]
C51---4.1 静态数码管显示
数码管引脚定义 原理图 74HC138 通过74HC138译码器的 P2_2 P2_3 P2_4 控制LED1-LED8 输出0为选中 例如 P2_2=1//低位 P2_3=0 P2_4=1//高位 101十进制为5 则第5位为有效 并且低电平有效。数码管为共阴极连接,所以LED5被选中 通过74HC138译码器选择LED 74HC245 74HC245为双向数据缓冲器 OE为低电平有效,芯片使能 A0-A7 与 B0-B7一一相连 DIR控制方向选择,高电平方向为A0- B0,低电平方向为B0- A0 代码 思路:通过74HC138选择LED1-8中的数码管,例如选择LED6 ,则控制 P
[单片机]
C51中的函数指针
概述 函数指针是C编程语言众多难懂的特性之一。由于C编译器对关于8051架构的独特要求,函数指针和可重入函数需要克服更大的挑战。这主要是因为函数参数传递的方式。 通常,(对于大多数非8051的芯片),函数参数是在栈上以压入和弹出的汇编指令来完成。由于8051的栈大小有限(仅128字节,某些设备上更低至64字节),函数参数传递必须用不同的技术来传递。 英特尔为8051推出PL/ML-51编译器时,他们引入了将参数存储在固定内存位置的技术。当链接器被调用时,它会建立程序的调用树,找出哪些函数参数是相互独立的,然后覆盖它们。这就是链接器OVERLAY指令的开始。 由于PL/M-51不支持函数指针,所以从未出现间接函数调用的问
[单片机]
C51入门3,IIC通信实验
实验一:写入按键次数在24C04上,并读出显示在4个LED上。 程序: //写入按键次数在24C04上,并读出显示在4个LED上 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include reg52.h //定义器件在IIC总线的地址和端口设置 #define WriteDeviceAddress 0xa0 #define ReadDeviceAddress 0xa1 sbit SCL=P2^1; sbit SDA=P2^0; sbit P10=P1^0; sbit K1=P3^2; char c
[单片机]
C51 DS1302芯片+lcd12864 显示时间
1.原理图 1302芯片部分 lcd12864部分 2.代码部分 config.h #ifndef __CONFIG_H #define __CONFIG_H #include reg51.h #include lcd12864.h #include intrins.h #define uchar unsigned char #define uint unsigned int #endif lcd12864.c #include lcd12864.h void lcdinit(void) //初始化LCD { write(0,0x30); //功能设定 write(0,0x0c); //显示开
[单片机]
C51编译器-高级编程技巧(4)-寄存器的应用
Register Usage寄存器应用 汇编程序可以在改变当前寄存器组中所有寄存器和ACC,B,DPTR以及PSW中的内容。当在汇编程序中调用C函数时,要注意这些寄存器都有可能被C函数改变。 Overlaying Segments段覆盖 如果程序在连接和定位过程中执行了覆盖过程,那么每个汇编子程序都有一个独一无二的程序段是非常重要的。这对于在段覆盖过程中,根据各个不同的段的计算函数之间的偏移是很必要的。当出情以下情况时,汇编子程序的数据区可以包括在覆盖分析之中: (1)所有的段名都用Cx51命名规则命名。 (2)每个使用局部变量的汇编函数都指定一个数据段。这个数据段可能被其他函数在传递数时访问。参数必须依次序存放。 Exa
[单片机]
24C01的IIC 读写的C51程序
/*------------------------------------------------------------------------------ 为了安全起见,程序中很多NOP是冗余的,希望读者能进一步精简,但必须经过验证。 Atmel 24C01 比较特殊,为简约型. 51晶振为11.0592MHz 〖参考〗 http://www.c51bbs.com 〖版本〗V1.00A Build 0918 -----------------------------------------------------------------------------*/ #include reg51.h #incl
[单片机]
STM32的官方库函数调用
例如添加 #include stm32f10x.h 添加stm32f10x_gpio.c、stm32f10x_usart.c 再在stm32f10x_conf.h 中去掉相应的头文件注释
[单片机]