头文件INTRINS.H的用法

头文件INTRINS.H的用法
KEIL 中头文件INTRINS.H的作用在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_,_cror_:将char型变量循环向左(右)移动指定位数后返回
_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。

_chkfloat_:测试并返回源点数状态。

就是汇编中的子函数。

_crol_,_cror_:如果二进制数为01010101 那么_crol_(1) 左移1位后将高位补低位。

结果10101010。

功能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。

例:
#include <intrins.h>
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 <intrins.h>
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;
在12M的晶振下每个_nop_()延时11us,经过适当的调整即可做到精确延时。

函数名:_testbit_
原型:bit _testbit_(bit x);
功能:_testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。

如果该位置为1,则将该位复位为0。

8051 的JBC 指令即用作此目的。

_testbit_只能用于可直接寻址的位;在表达式中使用是不允许的。

此文为转载内容,主要起到知识传播共享地步,如对原作者有侵犯,请发邮件332552236@告知,立即改正.
Wait。

合集下载

STC库函数使用参考

STC库函数使用参考

STC库函数使用参考STC(世纪天成)是国内广泛应用的一款单片机系列,具有价格低廉、易学易用的优势,被广泛应用于各种电子设备中。

STC单片机的编程则需要使用STC库函数进行。

```#include <reg52.h>#include <intrins.h>```其中,<reg52.h>是STC系列单片机的寄存器头文件,<intrins.h>是STC提供的一些特殊函数的头文件。

接下来,我们需要定义一些常用的寄存器,这些寄存器是我们在编程中经常会用到的,格式如下:```sbit LED = P1^0;```这里以LED灯为例,sbit是STC库函数中用来定义一个位的关键字,P1代表P1口,^0表示P1的第0位。

接下来,我们可以利用STC库函数提供的函数进行一些常用操作,如读取或设置寄存器的值、延时等。

```//设置P1口为输出口void Set_P1_OutputP1 = 0xff;``````//点亮LED灯void Light_LEDLED=0;```这是一个点亮LED灯的函数,LED=0即表示将LED口的值设置为0,即点亮LED灯。

```//延时函数void Delay(unsigned int t)while(t--);```这是一个延时函数,通过while循环来实现延时,t为延时时间。

除了这些基本的操作之外,STC库函数还提供了更多的功能,如串口通信、定时器和PWM等功能。

我们可以通过调用相应的库函数来实现这些功能。

下面是一个使用定时器的例子:```//定时器初始化函数void Timer_InitTMOD=0x01;//设置定时器1为模式1 TH0 = 0xfe; // 设置初始值TL0=0x00;TR0=1;//启动定时器1//定时器中断函数void Timer_ISR( interrupt 1TH0 = 0xfe; // 设置初始值TL0=0x00;//定时器中断处理代码//主函数void mainTimer_Init(; // 初始化定时器EA=1;//开启总中断while(1);```在上面的例子中,首先通过Timer_Init函数初始化定时器,然后通过定时器中断函数处理定时器中断,最后通过开启总中断来启动定时器。

[计算机软件及应用]Keil C51软件使用说明

[计算机软件及应用]Keil C51软件使用说明

* ——表示是指针类型,此处*不含取内容之意;
数据类型——声明指针所指变量的类型;
[存储器类型1]——声明指针所指变量的存储类型,若默认则定义
为一般指针;
[存储器类型2]——声明该指针变量本身的存储类型;
标识符——声明指针变量本身的数据类型和名称.
22
MCS-51单片机原理、接口及应用
第6章 单片机的C51语言编程
6
MCS-51单片机原理、接口及应用
第6章 单片机的C51语言编程
6.1.2 C51中常用的头文件
reg51.h、reg52.h、math.h、ctype.h、stdio.h、stdlib.h、 absacc.h和intrins.h. 〔1〕reg51.h和reg52.h
〔定义51或52子系列单片机特殊功能寄存器和特殊位〕 reg52.h比reg51.h多了几行定义T2寄存器的内容.
第6章 单片机的C51语言编程
汇编语言:
优点:面向机器、目标代码短、占用存储器空间少、运行
快. 缺点:指令助记符多、编程灵活性差.
C语言: 优点:具有面向机器和面向用户的特点,良好的可读性﹑易
维护性和可移植性,对硬件的控制能力也很强, C语言的数据类 型及运算符丰富,具有良好的程序结构.
缺点:代码效率稍低〔同汇编语言相比〕,占用存储空间较 大. 解决方法:单片机内部都嵌入了大容量的Flash ROM,有效的 弥补了这个缺陷.
{
局部变量说明
执行语句〔包括子函数的调用语句〕
}
4
MCS-51单片机原理、接口及应用
第6章 单片机的C51语言编程
func1<形式参数及说明>
//子函数1
{ 局部变量说明

头文件INTRINSH的左移右移

头文件INTRINSH的左移右移

头文件INTRINS_H的左移右移头文件INTRINS.H的作用在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_,_cror_:将char型变量循环向左(右)移动指定位数后返回_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。

_chkfloat_:测试并返回源点数状态。

就是汇编中的子函数。

_crol_,_cror_:如国二进制数为01010101 那么_crol_(1) 左移1位后将高位补低位。

结果10101010。

功能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。

#include &lt;intrins.h&gt;main(){unsigned int y;C-5 1 程序设计37y=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”指令相关,上面几个函数不同于参数类型。

关于51单片机启动程序和头文件的深入学习

关于51单片机启动程序和头文件的深入学习

总的作用:STARTUP.A51//启动文件. 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main 函数<reg51.h> //特殊寄存器的字节地址和位地址,sfr定义字节变量、sbit定义位变量,用通俗名作为变量名,并赋地址值,从而用名称来使用这些特殊寄存器。

<intrins.h> //定义了一些外部函数,在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.特别需要注意的概念:地址与地址值:“地址是存放值的内存空间对应的门牌号码。

地址值是门牌号对应内存空间里存放内容。

通俗讲,一栋楼房, 101号房间什么都没只有1个人。

这个人是值。

101是地址。

房间是内存空间。

”启动程序详细解释;STARTUP.A51:用户上电初始化程序;------------------------------------------------------------------------------;; 用户定义需上电初始化的内存空间;; 使用以下EQU命令可定义在CPU复位时需用0进行初始化的内存空间;; ;IDATA 存储器的空间的绝对起始地址总是0.IDATALENEQU 80H ; 需用0进行初始化的IDATA存储器空间的字节数;XDATASTARTEQU 0H ; XDATA存储器空间的绝对起始地址XDATALENEQU 0H ; 需用0进行初始化的XDATA存储器的空间字节数.;PDATASTARTEQU 0H ; PDATA存储器的空间的绝对起始地址PDATALENEQU 0H ; 需用0进行初始化的PDATA存储器的空间字节数.;; 注意: IDATA 存储器的空间在物理上包括了8051单片机的DATA和BIT存储器空间.; 听说至少要保证与C51编译器运行库有关的存储器的空间进行0初始化不知是否;------------------------------------------------------------------------------;; 再入函数模拟初始化;; 以下用EQU指令定义了再入函数模拟堆栈指针的初始化;; 使用SMALL存储器模式时再入函数的堆栈空间.IBPSTACKEQU 0 ; 使用SMALL存储器模式再入函数时将其设置成1. IBPSTACKTOPEQU 0FFH+1 ; 将堆栈顶设置为最高地址+1.;; 使用LARGE存储器模式时再入函数的堆栈空间.XBPSTACKEQU 0 ; 使用LARGE存储器模式再入函数时将其设置成1. XBPSTACKTOPEQU 0FFFFH+1; 将堆栈顶设置为最高地址+1.;; 使用COMPACT存储器模式时再入函数的堆栈空间.PBPSTACKEQU 0 ; 使用COMPACT存储器模式再入函数时将其设置成1. PBPSTACKTOPEQU 0FFFFH+1; 将堆栈顶设置为最高地址+1.;;------------------------------------------------------------------------------;; 使用COMPACT存储器模式时64K字节XDATA存储器空间的分页定义;; 以下用EQU指令定义PDATA类型变量在XDATA存储器空间的页地址; 使用EQU指令定义PFAGE时必须与L51连接定位器PDATA指令的控制参数一致;PPAGEENABLEEQU 0 ; 使用PDATA类型变量时将其设置成1.PPAGEEQU 0 ; 定义页号.;;------------------------------------------------------------------------------NAME?C_STARTUP ; 模块名为?C_STAUTUP?C_C51STARTUPSEGMENT CODE ; 代码?STACKSEGMENT IDATA ; 堆栈RSEG?STACK ; 堆栈DS 1EXTRNCODE (?C_START) ; 程序开始地址PUBLIC?C_STARTUPCSEGAT 0x8000 ; 定义用户程序的起始地址,用MON51仿真器时可能有用?C_STARTUP:LJMP STARTUP1RSEG?C_C51STARTUPSTARTUP1:;; 初始化串口MOVSCON,#40HMOVTMOD,#20HMOVTH1,#0fdHSETBTR1CLRTI; 单片机上电IDATA内存清零如果不需要上电清零IDATA可以注销IF到IFEDN之间的话句; 或者修改IDTALEN的长度为了具有掉电保护功能不知IDTALEN多长为好IFIDATALEN <> 0MOVR0,#IDATALEN - 1CLR AIDATALOOP:MOV @R0,ADJNZR0,IDATALOOPENDIF;; 单片机上电XDATA内存清零如果不需要上电清零XDATA可以注销IF到IFEDN之间的话句; 或者修改XDATALEN的长度IFXDATALEN <> 0MOVDPTR,#XDATASTARTMOVR7,#LOW (XDATALEN)IF(LOW (XDATALEN)) <> 0MOVR6,#(HIGH (XDATALEN)) +1ELSEMOVR6,#HIGH (XDATALEN)ENDIFCLR AXDATALOOP:MOVX @DPTR,AINCDPTRDJNZR7,XDATALOOPDJNZR6,XDATALOOPENDIF;; 送PDATA存储器页面高位地址IFPPAGEENABLE <> 0MOVP2,#PPAGEENDIF;; 单片机上电PDATA内存清零如果不需要上电清零XDATA可以注销IF到IFEDN之间的话句; 或者修改PDATALEN的长度IFPDATALEN <> 0MOVR0,#PDATASTARTMOVR7,#LOW (PDATALEN)CLR APDATALOOP:MOVX @R0,AINCR0DJNZR7,PDATALOOPENDIF;; 设置使用SMALL存储器模式时再入函数的堆栈空间.IFIBPSTACK <> 0EXTRNDATA (?C_IBP)MOV?C_IBP,#LOW IBPSTACKTOPENDIF;; 设置使用LARGE存储器模式时再入函数的堆栈空间.IFXBPSTACK <> 0EXTRNDATA (?C_XBP)MOV?C_XBP,#HIGH XBPSTACKTOPMOV?C_XBP+1,#LOW XBPSTACKTOPENDIF;; 设置使用COMPACT存储器模式时再入函数的堆栈空间.IFPBPSTACK <> 0EXTRNDATA (?C_PBP)MOV?C_PBP,#LOW PBPSTACKTOPENDIF;; 设置堆栈的起始地址MOVSP,#?STACK-1 ; 例如MOV SP,#4FH;;This code is required if you use L51_BANK.A51 with Banking Mode 4; 如果你的程序使用了Mode 4 程序分组技术请启动下面的程序,不会吧你的程序超过64K 利害;EXTRN CODE (?B_SWITCH0);CALL ?B_SWITCH0 ; init bank mechanism to code bank 0; 程序从第一组bank 0 块开始执行; 跳转到用户程序MAIN函数LJMP?C_STARTEND总之,在KEIL中,汇编是从ORG 000H开始启动,那么它在C51中是如何启动MAIN()函数的呢?实际上是C51中有一个启启动程序STARTUP.A51,它总是和C程序一起编译和链接的.启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件,只要复位,则该文件立即执行,其功能包括:z 定义内部RAM大小、外部RAM大小、可重入堆栈位置z 清除内部、外部或者以此页为单元的外部存储器z 按存储模式初使化重入堆栈及堆栈指针z 初始化8051硬件堆栈指针z 向main( )函数交权头文件详解/*--------------------------------------------------------------------------REG51.HHeader file for generic 80C51 and 80C31 microcontroller.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.--------------------------------------------------------------------------*/#ifndef __REG51_H__#define __REG51_H__/* BYTE Register */ sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0; sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98; sfr SBUF = 0x99;/* BIT Register */ /* PSW */sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88;/* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8;/* IP */sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8;/* P3 */sbit RD = 0xB7;sbit WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;/* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;#endif/*-------------------------------------------------------------------------- INTRINS.HIntrinsic functions for C51.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.--------------------------------------------------------------------------*/#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关于sfr、sbit://如同int、char...sfr 似乎不是标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新的关键词,其用法是:sfrt 变量名=地址值。

c语言串口编程实例

c语言串口编程实例

c语言串口编程实例摘要:1.串口编程基础2.C 语言串口编程步骤3.C 语言串口编程实例4.实例详解5.总结正文:一、串口编程基础串口编程是指通过计算机串行接口进行数据通信的编程方式。

串口(Serial Port)是一种计算机硬件接口,可以通过串行通信传输数据。

与并行通信相比,串行通信只需一条数据线,传输速度较慢,但具有线路简单、成本低的优点。

因此,串口编程在电子设备、计算机外设、通信设备等领域有广泛的应用。

二、C 语言串口编程步骤1.包含头文件:在使用C 语言进行串口编程时,首先需要包含头文件`<reg52.h>`或`<intrins.h>`。

2.配置串口:配置串口包括设置波特率、数据位、停止位、奇偶校验等参数。

3.初始化串口:初始化串口主要是初始化串口硬件,如配置UART(通用异步收发器)等。

4.打开串口:打开串口是指使能串口通信功能,以便数据传输。

5.读写串口:通过`in`和`out`语句实现数据的输入输出。

6.关闭串口:在数据传输完成后,需要关闭串口以节省资源。

7.串口通信:通过循环寄存器、缓存寄存器或FIFO(先进先出)等方法实现数据的收发。

三、C 语言串口编程实例以下是一个简单的C 语言串口编程实例,该实例通过串口发送数据“Hello, World!”:```c#include <reg52.h>#include <intrins.h>sbit UART_TXD = P3^1; // 配置UART TXD 引脚void init_uart(); // 初始化UART 函数void send_data(unsigned char dat); // 发送数据函数void main(){init_uart(); // 初始化UARTsend_data("H"); // 发送字符"H"send_data("e"); // 发送字符"e"send_data("l"); // 发送字符"l"send_data("l"); // 发送字符"o"send_data(" "); // 发送空格send_data("W"); // 发送字符"W"send_data("o"); // 发送字符"r"send_data("r"); // 发送字符"l"send_data("d"); // 发送字符"d"while(1); // 循环等待}void init_uart() // 初始化UART 函数{TMOD = 0x20; // 设置定时器1 为工作状态TH1 = 0xfd; // 设置定时器1 的计数值TL1 = 0xfd; // 设置定时器1 的计数值TR1 = 1; // 使能定时器1SCON = 0x40; // 设置串口工作状态ES = 0; // 开总中断EA = 1; // 开总中断允许}void send_data(unsigned char dat) // 发送数据函数{SBUF = dat; // 将数据存入缓存寄存器while(!TI); // 等待发送缓存清空TI = 0; // 清空发送缓存}```四、实例详解1.配置串口:通过设置UART TXD 引脚为P3.1,确定波特率、数据位、停止位和奇偶校验等参数。

步进电机控制说明书

步进电机控制说明书

目录1 题目.............................................................2 电路原理图的设计.................................................2.1 步进电机控制电路原理图......................................2.2 LCD显示模块.................................................2.3 L297/298电机驱动模块……………………………………………………2.4 晶振电路和复位电路………………………………………………………2.5 键盘控制模块(加速、减速、正转、反转)................................3 软件系统设计......................................................3.1 软件系统的流程结构..........................................3.2 主程序bujindianji.c模块....................................3.3头文件reg52.h程序模块.......................................3.4 头文件1602.h程序模块.....................................3.5头文件intrins.h程序模块.....................................4 仿真及调试........................................................总论..............................................................参考文献..........................................................致谢.............................................................1题目: 步进电机的单片机控制功能要求:用MCS-51系列单片机作为控制器;采用两相双极性步进电机为控制对象;采用L297/298驱动芯片为步进电机驱动器;用加速、减速、正转、反转4个键进行相应的控制;用LCD 显示步进的电机的工作状态。

单片机复习题

单片机复习题单片机的引脚及其功能1.EA 脚的功能是控制程序存储器的选择,单片机使用片内程序存储器时,该引脚应该接+5V高电平。

2.单片机的 RST引脚是复位引脚,外接复位电路。

3.MCS-51单片机有片内RAM 、特殊功能寄存器、扩展数据存储器和程序存储器 4个存储空间。

4.对于标准的 MCS-51单片机而言,idata区是指片内 RAM地址范围为 0x00~0x7f的区域,共 128 字节,对于增强型MCS-51单片机(52单片机)而言,idata区的地址范围为0x00~0xff ,共 256 字节。

5.MCS-51单片机的 data区位于单片机的片内 RAM中,地址范围为 0x00~0x7f ,共128 字节。

6.MCS-51单片机有 4 组工作寄存器组,工作寄存器组区的地址范围是 0x00~0x1f ,当前工作寄存器组用 R0~R7 8个寄存器表示。

7.若函数 display()的定义如下:void display(void) using 1{ …… }单片机在执行函数 display时,当前工作寄存器组是第 1 组工作寄存器,其中R2的地址是 0x0a 。

8.单片机执行下列程序段后,当前工作寄存器组是第 3 组工作寄存器,其中 R7 的地址是 0x1f 。

RS0=1;RS1=1;9.code区是指单片机的程序存储区,code区的作用是存放程序代码和表格数据。

10.至少要配备时钟电路、复位电路、存储器电路和电源电路,单片机才能独立工作。

11.时钟电路的作用是产生时钟信号,装配晶振时应该将晶振尽可能地安装在XTAL1、XTAL2引脚附近。

12.若单片机的 fosc = 12MHz,单片机的机器周期为 1μs 。

13.C51程序中至少有一个 main 函数。

14.C51程序中,语句由分号(;)结尾。

15.C51 书写比较自由,一条语句可以分多行书写,也可以在一行中书写多条语句。

16.unsigned char 型变量占 1 个字节,值域是 0~255 ,data区中最多只能定义 128 个 unsigned char 型变量。

C51资料-头文件

c51头文件的作用与c头文件的作用类似。

absacc。

h——-包含允许直接访问8051不同存储区的宏定义assert。

h-——文件定义assert宏,可以用来建立程序的测试条件ctype.h—--字符转换和分类程序intins。

h——-文件包含指示编译器产生嵌入式固有代码的程序的原型math.h—-—数学程序reg51.h--—51的特殊寄存器reg52。

h---52的特殊寄存器setjmp。

h—-—定义jmp_buf类型和setjmp和longjmp程序的原型stdarg.h—--可变长度参数列表程序stdlib.h—--存储器分配程序stdio。

h--—流输入和输出程序string。

h———字符转操作程序,缓冲区操作程序单片机中用c编程时头文件reg51。

h及reg52。

h解析我们在用c语言编程是往往第一行就是reg51.h或者其他的自定义头文件,我们怎么样来理解呢?1)“文件包含”处理。

程序的第一行是一个“文件包含”处理。

所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来。

程序中包含REG51.h文件的目的是为了要使用P1 (还有其他更多的符号)这个符号,即通知C 编译器,程序中所写的P1 是指80C51 单片机的P1 端口而不是其它变量。

这是如何做到的呢?打开reg51。

h 可以看到这样的一些内容:(此文件一般在C:\KEIL\C51\INC下,INC文件夹根目录里有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件.如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到INC文件夹里就可以了.) #ifndef __REG51_H__#define __REG51_H__sfr P0 = 0x80;。

.。

.。

.。

.。

.。

..sbit TI = 0x99;sbit RI = 0x98;#endif熟悉80C51 内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地址的对应关系.注意其中有sfr P1 = 0x90;这样的一行,即定义P1 与地址0x90 对应,P1 口的地址就是0x90(0x90 是C 语言中十六进制数的写法,相当于汇编语言中写90H)。

c51库函数的使用

再入属性: non-reentrant 功能: cos 计算并返回 x 的余弦值,sin 计算并返回 x 的正弦值,tan 计算并返回 x 的正切值,所有函数的
变量
范围都是-pi/2~+pi/2 ,变量的值必须在正负 65535 之间,否则产生一个 NaN 错误。
函数原型: float acos(float x); float asin(float x); float atan(float x);
函数原型: #define FARRAY(object,base)((object volatile far *) ((base)+0x10000L)) #define FCARRAY(object,base)((object const far *) ((base)+0x810000L))
功能: 宏 FARRAY 和 FCARRAY 用于访问位于 far 和 const far 存储区的数组类型目标,FARRAY 用于 访问 far
空间(存储类为 HDATA),FCARRAY 用于访问 const far 空间(存储类为 HCONST)。
内部函数 INTRINS.H 内部函数的原型声明包含在头文件 INTRINS.H 函数原型: unsigned char _crol_(unsigned char val,unsigned char n); unsigned int _irol_(unsigned int val,unsigned char n); unsigned long _irol_(unsigned long val,unsigned char n);
功能: pow 计算并返回 x^y 的值,如果 x 不等 于 0 而 y=0,则返回 1.当 x=0 且 y<=0 或当 x<0 且 y 不是 整数时则返

c语言中string.h的用法

c语言中string.h的用法在C语言中,string.h是一个头文件,提供了一些常用的字符串处理函数。

下面是string.h 中一些常用函数的用法:strlen():用于获取字符串的长度,即字符串中字符的个数。

#include <string.h>int main() {char str[] = "Hello, world!";int length = strlen(str);printf("Length of the string: %d\n", length);return 0;}strcpy():用于将一个字符串复制到另一个字符串。

#include <string.h>int main() {char source[] = "Hello";char destination[10];strcpy(destination, source);printf("Copied string: %s\n", destination);return 0;}strcat():用于将一个字符串追加到另一个字符串的末尾。

#include <string.h>int main() {char str1[] = "Hello";char str2[] = " world!";strcat(str1, str2);printf("Concatenated string: %s\n", str1);return 0;}strcmp():用于比较两个字符串是否相等。

#include <string.h>int main() {char str1[] = "Hello";char str2[] = "Hello";int result = strcmp(str1, str2);if (result == 0) {printf("Strings are equal\n");} else {printf("Strings are not equal\n");}return 0;}这些函数只是string.h中一部分常用函数的示例,该头文件还提供了其他一些字符串处理函数,如strncpy()、strncat()、strncmp()等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档