头文件INTRINS.H的用法
- 格式:pdf
- 大小:241.59 KB
- 文档页数:2
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函数初始化定时器,然后通过定时器中断函数处理定时器中断,最后通过开启总中断来启动定时器。
头文件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 <intrins.h>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”指令相关,上面几个函数不同于参数类型。
总的作用: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语言串口编程实例摘要: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头文件的作用与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)。
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()等。
C语言include用法及搭配在C语言编程中,我们经常使用include指令来引入头文件。
头文件中包含了函数和变量的声明以及一些常量的定义,可以方便地在不同的源文件中共享代码。
本文将详细介绍include指令的用法及其搭配的一些常见技巧。
1. include指令的基本使用include指令的基本使用方法如下:#include <header_file.h>#include "header_file.h"其中,<header_file.h>表示引入系统提供的头文件,而"header_file.h"表示引入用户自定义的头文件。
include指令的作用是将指定的头文件的内容插入到当前源文件中。
这样就可以在当前源文件中使用头文件中所声明的函数、变量和常量。
例如,我们有一个头文件math.h,里面定义了一些数学函数的声明和常量的定义。
我们可以在需要使用这些函数和常量的源文件中加入#include "math.h",以便使用这些函数和常量。
2. 头文件的分类头文件可以分为两类:系统提供的头文件和用户自定义的头文件。
2.1 系统提供的头文件系统提供的头文件包含了一些常见的函数和常量的声明以及一些系统相关的声明和定义。
我们可以使用系统提供的头文件来使用这些函数、常量和系统相关的特性。
常见的系统提供的头文件包括:•stdio.h:提供输入输出相关的函数和常量,如printf、scanf等。
•stdlib.h:提供一些通用的函数和常量,如malloc、free等。
•string.h:提供字符串操作相关的函数和常量,如strcpy、strlen等。
•math.h:提供数学相关的函数和常量,如sin、cos等。
•stdbool.h:提供布尔类型的定义,如true、false等。
我们可以使用#include <stdio.h>来引入stdio.h头文件,以便在源文件中使用其定义的函数和常量。
C51常用数据类型
C51扩充数据类型
算术运算符关系(逻辑)运算符
头文件通常有reg51.h, math.h, ctype.h, stdio.h,
stdlib.h, absacc.h, intrins.h。
#define新名称原内容
reg51.h和reg52.h是定义51单片机或52单片机特殊功能寄存器和位寄存器的,这两个头文件中大部分内容是一样的,52单片机比51单片机多一个定时器T2,因此,reg52.h中也就比reg51.h中多几行定义T2寄存器的内容。
intrins.h位移
math.h是定义常用数学运算的,比如求绝对值、求方根、求正弦、和余弦等,该头文件中
包含有各种数学运算函数,当我们需要使用时可以直接调用它的函数。
main函数
格式:void main()
特点:无返回值,无参数
若有返回值就用int main。
返回值就是指一个函数运行完后有没有东西返回,没有return语句,就说明这个函数没有返回值。
C语言头文件使用大全1. stdio.h:提供了输入输出相关的函数,如printf和scanf。
2. stdlib.h:提供了一些通用的函数,如malloc和atoi。
3. string.h:提供了一些字符串处理的函数,如strcpy和strcat。
4. math.h:提供了数学函数,如sin和sqrt。
5. ctype.h:提供了一些字符处理的函数,如isalpha和isdigit。
7. assert.h:提供了断言机制,用于程序的调试。
8. errno.h:定义了一些错误代码,如EIO和EINVAL。
9. limits.h:定义了一些整数类型的最大值和最小值,如INT_MAX和INT_MIN。
10. float.h:定义了浮点类型的一些精度和范围,如FLT_EPSILON和DBL_MAX。
11. stdbool.h:定义了布尔类型和真值常量,如bool和true。
12. wchar.h:提供了处理宽字符的函数,如wprintf和fgetws。
13. signal.h:提供了处理信号的函数,如signal和kill。
14. dirent.h:提供了操作目录和文件的函数,如opendir和readdir。
15. fcntl.h:提供了文件控制相关的函数,如open和close。
16. sys/types.h:定义了一些系统数据类型,如size_t和pid_t。
17. sys/stat.h:定义了文件状态的一些宏和函数,如S_IRUSR和stat。
18. sys/socket.h:提供了网络编程相关的函数和结构体,如socket和bind。
19. netdb.h:提供了网络数据相关的函数和结构体,如gethostbyname和hostent。
20. pthread.h:提供了线程相关的函数和结构体,如pthread_create和pthread_mutex_t。
这些头文件仅仅是C语言头文件中的一部分,它们提供了丰富的功能来帮助我们进行程序开发。
KEIL 中头文件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 程序设计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”指令相关,上面几个函数不同于参数类型。
C语言常见头文件汇总C语言是一种广泛应用的编程语言,在学习和使用C语言时,我们通常会使用一些常见的头文件来调用各种函数和实现一些功能。
以下是一些常见的C语言头文件及其功能的汇总:1. stdio.h:提供了一些输入输出相关的函数,如printf、scanf等。
它是C语言中最常见的、最基础的头文件之一2. math.h:提供了数学运算相关的函数,如sin、cos、sqrt等。
3. string.h:提供了一些字符串操作相关的函数,如strcpy、strcat、strlen等。
4. stdlib.h:提供了一些通用的函数,如malloc、free、rand等。
5. ctype.h:提供了一些用于字符处理的函数,如isalnum、isalpha、tolower等。
6. stdbool.h:定义了bool类型及其取值true和false。
8. assert.h:提供了一些断言相关的函数,如assert。
9. limits.h:定义了一些与整数类型相关的宏,如INT_MAX、INT_MIN等。
10. float.h:定义了一些与浮点数类型相关的宏,如FLT_MAX、FLT_MIN等。
11. errno.h:定义了一些与错误码相关的宏和函数,如errno、perror等。
12. fcntl.h:定义了一些与文件控制相关的宏和函数,如open、close等。
13. signal.h:定义了一些与信号处理相关的宏和函数,如signal、kill等。
14. setjmp.h:定义了一些与非局部跳转相关的宏和函数,如setjmp、longjmp等。
15. locale.h:定义了一些与本地化相关的宏和函数,如setlocale、localeconv等。
16. stdarg.h:定义了一些用于可变参数函数的宏和函数,如va_list、va_start、va_arg等。
17. ctype.h:定义了一些字符分类函数,如isalpha、isdigit等。
C51常用头文件在KEIL 中,对于单片机所使用的头文件,除了reg51 reg52以外,还有一些从各芯片制商的官网下载与reg51,reg52功能类似的头文件,需了解透外,还要对各类型单片机均可通用且相当有用的的头文件,做相应的了解。
因为,内部所包含的函数与宏定义,可以及大的方便我们编写应用程序1字符函数 ctype.h1 extern bit isalpha(char);功能:检查参数字符是否为英文字母,是则返回12 extern bit isalnum(char)功能:检查字符是否为英文字母或数字字符,是则返回13 extern bit iscntrl(char)功能:检查参数值是否在0x00~0x1f 之间或等于0x7f,是则返回14 extern bit isdigit(char)功能:检查参数是否为数字字符,是则返回15 extern bit isgraph(char)功能:检查参数值是否为可打印字符,是则返回1,可打印字符为0x21~0x7e 6 extern bit isprint(char)功能:除了与isgraph相同之外,还接受空格符0x207 extern bit ispunct(char)功能:不做介绍。
8 extern bit islower(char)功能:检查参数字符的值是否为小写英文字母,是则返回19 extern bit isupper(char)功能:检查参数字符的值是否为大写英文字母,是则返回110 extern bit isspace(char)功能:检查字符是否为下列之一,空格,制表符,回车,换行,垂直制表符和送纸。
如果为真则返回111 extern bit isxdigit(char)功能:检查参数字符是否为16进制数字字符,是则返回112 extern char toint(char)功能:将ASCII字符0~9 a~f(大小写无关)转换成对应的16进制数字,返回值00H~0FH13 extern char tolower(char)功能:将大写字符转换成小写形式,如字符变量不在A~Z之间,则不作转换而直接返回该字符14 extern char toupper(char)功能:将小写字符转换成大写形式,如字符变量不在a~z之间,则不作转换而直接返回该字符15 define toascii(c) ((c)&0x7f)功能:该宏将任何整形数值缩小到有效的ASCII范围之内,它将变量和0x7f相与从而去掉第7位以上的所有数位16 #define tolower(c) (c-‘A’+’a’)功能:该宏将字符与常数0x20 逐位相或17 #define toupper(c) ((c)-‘a’+’A’)功能:该宏将字符与常数0xdf 逐位相与2数学函数 math.hextern int abs (int val);extern char cabs (char val);extern long labs (long val);extern float fabs (float val);功能:返回绝对值。
头文件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。