单片机C语言(C51)的常用库函数

合集下载

c51单片机c语言教程

c51单片机c语言教程

51单片机C语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。

在众多单片机中51 架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。

51 的编程语言常用的有二种,一种是汇编语言,一种是 C 语言。

汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。

对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。

综合以上 C 语言的优点,我在学习时选择了 C 语言。

以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。

*注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。

明浩2003-3-30mailto:pnzwzw@ wzw@第一课建立您的第一个C项目使用C 语言肯定要使用到C 编译器,以便把写好的C 程序编译为机器码,这样单片机才能执行编写好的程序。

KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51 应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了KEIL51 软件,要使用KEIL51 软件,必需先要安装它。

KEIL51 是一个商业的软件,对于我们这些普通爱好者可以到KEIL 中国代理周立功公司的网站上下载一份能编译2K 的DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。

c51单片机c语言常用指令 -回复

c51单片机c语言常用指令 -回复

c51单片机c语言常用指令-回复C51单片机C语言常用指令C51单片机是一种广泛应用于嵌入式系统的微控制器,其C语言编程常用指令为开发者提供了便利。

本文将逐步回答关于C51单片机C语言常用指令的问题,涵盖了常用的输入输出指令、控制流指令、算术指令和逻辑指令等方面,帮助读者全面了解和掌握这些重要的指令。

一、输入输出指令1. 如何在C51单片机上进行输入操作?答:可以使用P1口进行输入操作,需要将P1口配置为输入模式,并使用P1口的位操作函数来读取具体的引脚输入值。

2. 如何在C51单片机上进行输出操作?答:可以使用P2口进行输出操作,需要将P2口配置为输出模式,并使用P2口的位操作函数来设置具体的引脚输出值。

3. 如何控制C51单片机的LED灯?答:可以使用P0口进行LED灯的控制,通过设置P0口的引脚为高电平或低电平来点亮或关闭LED灯。

二、控制流指令1. 如何使用条件语句控制程序的执行顺序?答:可以使用if-else语句或switch语句来进行条件判断,并根据判断结果执行不同的代码块。

2. 如何使用循环语句进行重复操作?答:可以使用for循环、while循环或do-while循环来实现重复操作,根据循环条件控制代码块的执行次数。

三、算术指令1. 如何进行加法运算?答:可以使用加法运算符"+"来进行加法运算,例如:a = b + c;表示将变量b和c的值相加,然后将结果赋值给变量a。

2. 如何进行减法运算?答:可以使用减法运算符"-"来进行减法运算,例如:a = b - c;表示将变量b减去变量c的值,然后将结果赋值给变量a。

四、逻辑指令1. 如何进行逻辑与运算?答:可以使用逻辑与运算符"&&"来进行逻辑与运算,例如:if(a > 0 && b < 10) {...}表示当变量a大于0且变量b小于10时执行相应的操作。

常用Keil C51库函数

常用Keil C51库函数
void *memcpy(void *dest, void *src , int len)
从src所指向的内存中复制len个字符到dest中,返回指向dest中最后一个字符的指针。如果src与dest发生交迭,则结果是不可测的
void *memccpy(void *dest, void *src, char val, int len)
bit isdigit(char c)
检查参数字符是否为十进制数字0~9,是则返回1,否则返回0
bit isgraph(char c)
检查参数字符是否为可打印字符(不包括空格),值域0x21~0x7e,是则返回1,否则返回0
bit isprint(char c)
检查参数字符是否为可打印字符(包括空格),值域0x21~0x7e,是则返回1,否则返回0
int printf(const char *fmstr[,argument]...)
以第一个参数指向字符串制定的格式通过8051串行口输出数值和字符串,返回值为实际输出的字符数
int sprintf(char *s,const char *fmstr[,argument]...)
与printf功能相似,但数据是通过一个指针s送入内存缓冲区,并以ASCII码的形式存储
将串s2(包括结束符)复制到s1中,返回指向s1中第一个字符的指针
char *strncpy(char *s1, char *s2, int n)
与strcpy相似,但它只复制n个字符。如果s2的长度小于n,则s1串以0补齐到长度n
int strlen(char *s1)
返回串s1中的字符个数,不包括结尾的空字符
char strcmp(char *s1, char *s2)

C51介绍

C51介绍

六、 逗号运算符
0.3 C51流程控制语句
0.3.1 C51选择语句 一、条件语句 条件语句由关键字if构成。有3种条件语句: 1、if(条件表达式)语句 若条件表达式的结果为真(非0值),则执行后面的 语句;反之若条件表达式的结果为假(0值),则不 执行后面的语句。 例如: if(p1!= 0){ c=20;}
本章共六节,主要介绍:
0.1 单片机的C语言 0.2 C51的数据类型与运算 0.3 C51流程控制语句 0.4 C51的指针类型 0.5 C51的函数 0.6 C51编程实例
0.1 单片机的C语言
0.1.1 C51程序开发概述 一、采用C51的优点
编译器能自动完成变量的存储单元的分配,编程者可 以专注于应用软件的设计,可以对常用的接口芯片编制通 用的驱动函数,对常用的功能模块和算法编制相应的函数, 可以方便地进行信号处理算法和程序的移植,从而加快单 片机应用系统的开发速度。 当代码长度超过4KB以上时,C51比汇编语言更具有 明显的优势。
访问SFR
说明:
• Float:浮点型
Float (1)s 2E 127 (1.M )
•Sfr: 可以定义8051单片机的所有内部8位特殊功能 寄存器 •Sfr16: 可以定义8051单片机内部16位特殊功能寄 存器 •bit: 可以定义位量
•sbit: 可以定义8051内部RAM中的可寻址位或特殊 功能寄存器中的可寻址位.
2、sbit 位变量名 = 字节地址^位的位置(0~7),如: sbit OV=0xD0^2; /* 定义OV位地址为0xD2 */ sbit CY=0xD0^7; /* 定义CY位地址为0xD7 */ 注:字节地址作为基地址,必须位于0x80~0xFF之 间。 3、sbit 位变量名 = 位地址,如: sbit OV=0xD2; /* 定义OV位地址为0xD2 */ sbit CY=0xD7; /* 定义CY位地址为0xD7 */ 注:位地址必须位于0x80~0xFF之间。

C语言中KeilC51库函数大全

C语言中KeilC51库函数大全

Keil C51库函‎数参考C51强大‎功能及其高‎效率的重要‎体现之一在‎于其丰富的‎可直接调用‎的库函数,多使用库函‎数使程序代‎码简单,结构清晰,易于调试和‎维护,下面介绍C‎51的库函‎数系统。

第一节本征库函数‎(intri‎nsic routi‎n e s)和非本征证‎库函数C51提供‎的本征函数‎是指编译时‎直接将固定‎的代码插入‎当前行,而不是用A‎C ALL和‎L CALL‎语句来实现‎,这样就大大‎提供了函数‎访问的效率‎,而非本征函‎数则必须由‎A CALL‎及LCAL‎L调用。

C51的本‎征库函数只‎有9个,数目虽少,但都非常有‎用,列如下:_crol‎_,_cror‎_:将char‎型变量循环‎向左(右)移动指定位‎数后返回_iror‎_,_irol‎_:将int型‎变量循环向‎左(右)移动指定位‎数后返回_lrol‎_,_lror‎_:将long‎型变量循环‎向左(右)移动指定位‎数后返回_nop_‎:相当于插入‎N OP_test‎b it_:相当于JB‎C bitva‎r测试该位‎变量并跳转‎同时清除。

_chkf‎l oat_‎:测试并返回‎源点数状态‎。

使用时,必须包含#inclu‎c le <intri‎n s.h>一行。

如不说明,下面谈到的‎库函数均指‎非本征库函‎数。

第二节几类重要库‎函数1. 专用寄存器‎i nclu‎d e文件例如803‎1、8051均‎为REG5‎1.h其中包括‎了所有80‎51的SF‎R及其位定‎义,一般系统都‎必须包括本‎文件。

2. 绝对地址i‎n clud‎e文件ab‎s acc.h该文件中实‎际只定义了‎几个宏,以确定各存‎储空间的绝‎对地址。

3. 动态内存分‎配函数,位于std‎l ib.h中4. 缓冲区处理‎函数位于“strin‎g.h”中其中包括拷‎贝比较移动‎等函数如:memcc‎p y memch‎r memcm‎p memcp‎y memmo‎v e memse‎t这样很方便‎地对缓冲区‎进行处理。

80C51单片机程序设计函数1

80C51单片机程序设计函数1

C51函数函数:C程序的基本单位,即C51程序主要由函数构成。

分类:C51函数可分为主函数main( )和普通函数两种,普通函数又可分为标准库函数和自定义函数。

主函数:一个C51源程序必须有也只能有一个main函数,而且是整个程序执行的起始点。

普通函数:普通函数是被主函数调用的子函数,标准库函数是由C51编译系统的函数库提供的,自定义函数就是用户根据自己的需要编写的函数。

C51函数普通函数又可分为标准库函数和自定义函数。

C51函数可分为主函数main( )和普通函数两种C 程序的基本单位函数普通函数标准库函数自定义函数主函数main ()有且只有一个main 函数,入口。

定义格式返回值类型函数名([形式参数列表])[编译属性] [中断属性] [寄存器组属性]{局部变量声明;函数体语句;}返回值类型:指本函数返回值的数据类型,若无返回值,则成为无类型,用void表示;若该项要素缺省,则C51编译系统默认为int类型。

函数名:除了main函数有固定名称外,其他函数由用户按标识符的规则自行命名形式参数:用“数据类型变量名”表示,没有具体数值;可以是一个,或多个(中间用逗号“,”分隔),或没有形式参数,但圆括号必不可少。

定义格式返回值类型函数名([形式参数列表])[编译属性] [中断属性] [寄存器组属性]{局部变量声明;函数体语句;}编译属性:是指定该函数采用的存储器编译模式,有Small、Compact和Large 3种选择,缺省时,默认Small模式。

中断属性和寄存器组属性:中断属性是指明该函数是否中断函数;寄存器组属性是指明该函数被调用时准备采用哪组工作寄存器。

用于中断函数,允许缺省,后续章节详述。

局部变量:是仅应用于本函数内的变量,在执行本函数时临时开辟存储单元使用,本函数运行结束即予释放;局部变量说明是说明该变量的数据类型、存储器类型等。

定义格式返回值类型函数名([形式参数列表])[编译属性] [中断属性] [寄存器组属性]{局部变量声明;函数体语句;}函数体语句:是函数执行的任务,是函数运行主体。

c51单片机c语言常用指令 -回复

c51单片机c语言常用指令 -回复

c51单片机c语言常用指令-回复C51单片机C语言常用指令导语:C51单片机是一种非常常用的微控制器,它广泛应用于许多嵌入式系统和电子设备中。

在单片机的开发过程中,C语言是一种非常常用的编程语言。

本文将介绍C51单片机常用的指令,帮助读者了解这些指令的功能和使用方法。

第一部分:常用的I/O口控制指令I/O口控制指令是C51单片机中非常重要的一部分,因为它们用于控制单片机与外部设备之间的数据交互。

以下是一些常用的I/O口控制指令:- P0:将P0口设置为输入或输出,可以用于与外部设备进行数据通信。

- P1:将P1口设置为输入或输出,可以用于与外部设备进行数据通信。

- P2:将P2口设置为输入或输出,可以用于与外部设备进行数据通信。

- P3:将P3口设置为输入或输出,可以用于与外部设备进行数据通信。

第二部分:常用的中断控制指令中断是C51单片机中实现实时响应的重要机制之一。

以下是一些常用的中断控制指令:- EA:使能所有中断。

- EX0:外部中断0的控制指令,用于外部设备产生中断信号。

- EX1:外部中断1的控制指令,用于外部设备产生中断信号。

- IT0:外部中断0的触发方式,可以设置为电平触发或边沿触发。

- IT1:外部中断1的触发方式,可以设置为电平触发或边沿触发。

第三部分:常用的定时器控制指令定时器是C51单片机中实现时间计数和定时任务的重要模块。

以下是一些常用的定时器控制指令:- TMOD:设置定时器模式,可以选择定时器0/1的工作模式。

- TL0、TL1:定时器0/1的低8位计数器,用于保存定时值的低8位。

- TH0、TH1:定时器0/1的高8位计数器,用于保存定时值的高8位。

- TR0、TR1:定时器0/1的运行控制位,用于启动和停止计时器。

- TF0、TF1:定时器0/1的溢出标志位,用于判断定时器是否溢出。

第四部分:常用的串口通信指令串口通信是C51单片机中常用的通信方式之一,用于与其他设备进行数据交互。

51单片机c语言

51单片机c语言
p 形参需要指定数据类型,和定义变量一样,调用多个参 数时,需要用逗号隔开。
Unsigned char add(unsigned char x,unsigned char y)
p 形参和实参的数据类型应该相同。
静态(static)变量是在程序运行过程中,只赋予一 次初值,在第一次执行函数时,它的值就是给定的那个 初值,而之后在该函数所有的执行次数中,它的值都是 在上一次函数执行结束后的值,即它可以保持前次的执 行结果。
void Abc() { static int i=0; i++; }
void Abc() { int i=0; i++; }
#include<reg51.h> //头文件 void main()//主函数 {
P2=0x00; } #include<reg51.h> //头文件 void main()//主函数 int i,j; void main() {
P2=0x00; for(i=1000;i>0;i--) for(j=110;j>0;j--); }
存储种类是变量在程序执行中的作用范围,有4种: 自动(auto)、外部(extern)、静态(static)和寄存 器(register)。
自动(auto)变量又称为动态存储变量,在调用和 它有关的函数时,系统会自动分配存储空间,调用结束 后会自动释放存储空间。平时这个关键词是可以省略的。

char c_var;//等同于auto char c_var; int i_var;//等同于auto int i_var; }
a>>0001 0101
位移之后,空缺的位由0补上。
#include<reg51.h> //头文件

C语言中KeilC51库函数大全

C语言中KeilC51库函数大全

C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。

第一节本征库函数(i n t r i n s i c r o u t i n es)和非本征证库函数C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL 和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。

C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。

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

使用时,必须包含#inclucle <>一行。

如不说明,下面谈到的库函数均指非本征库函数。

第二节几类重要库函数1. 专用寄存器include文件例如8031、8051均为其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。

2. 绝对地址include文件该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。

3. 动态内存分配函数,位于中4. 缓冲区处理函数位于“”中其中包括拷贝比较移动等函数如:memccpy memchr memcmp memcpy memmove memset这样很方便地对缓冲区进行处理。

5. 输入输出流函数,位于“”中流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的及源文件,然后在库中替换它们即可。

第三节K ei l C51库函数原型列表1.bit isalnum(char c);bit isalpha(char c);bit iscntrl(char c);bit isdigit(char c);bit isgraph(char c);bit islower(char c);bit isprint(char c);bit ispunct(char c);bit isspace(char c);bit isupper(char c);bit isxdigit(char c);bit toascii(char c);bit toint(char c);char tolower(char c);char __tolower(char c);char toupper(char c);char __toupper(char c);2.unsigned char _crol_(unsigned char c,unsigned char b);unsigned char _cror_(unsigned char c,unsigned char b);unsigned char _chkfloat_(float ual);unsigned int _irol_(unsigned int i,unsigned char b);unsigned int _iror_(unsigned int i,unsigned char b);unsigned long _irol_(unsigned long l,unsigned char b);unsigned long _iror_(unsigned long L,unsigned char b);void _nop_(void);bit _testbit_(bit b);3.char getchar(void);char _getkey(void);char *gets(char * string,int len);int printf(const char * fmtstr[,argument]…);char putchar(char c);int puts (const char * string);int scanf(const char * fmtstr.[,argument]…);int sprintf(char * buffer,const char *fmtstr[;argument]);int sscanf(char *buffer,const char * fmtstr[,argument]);char ungetchar(char c);void vprintf (const char *fmtstr,char * argptr);void vsprintf(char *buffer,const char * fmtstr,char * argptr);4.float atof(void * string);int atoi(void * string);long atol(void * string);void * calloc(unsigned int num,unsigned int len);void free(void xdata *p);void init_mempool(void *data *p,unsigned int size);void *malloc (unsigned int size);int rand(void);void *realloc (void xdata *p,unsigned int size);void srand (int seed);5.void *memccpy (void *dest,void *src,char c,int len);void *memchr (void *buf,char c,int len);char memcmp(void *buf1,void *buf2,int len);void *memcopy (void *dest,void *SRC,int len);void *memmove (void *dest,void *src,int len);void *memset (void *buf,char c,int len);char *strcat (char *dest,char *src);char *strchr (const char *string,char c);char strcmp (char *string1,char *string2);char *strcpy (char *dest,char *src);int strcspn(char *src,char * set);int strlen (char *src);char *strncat (char 8dest,char *src,int len);char strncmp(char *string1,char *string2,int len);char strncpy (char *dest,char *src,int len);char *strpbrk (char *string,char *set);int strpos (const char *string,char c);char *strrchr (const char *string,char c);char *strrpbrk (char *string,char *set);int strrpos (const char *string,char c);int strspn(char *string,char *set);系统分类:用户分类:标签:无标签来源:整理阅读全文(121) | 回复(0)发表于2009/6/23 13:41:24Hello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下:#pragma DB OE CD#indule <>#include<>void main(void){SCOn=0x50;TMOD=0x20TH1=0xf3;Tri=1;TI=1;printf(“Hello,world \n”);while(1) { }}第一节u V i s i o n f o r W i n d o w s的使用步骤(1) file_new新建一个文件,输入如上内容或直接用目录下源文件。

c51中的intrins库函数

c51中的intrins库函数

c51中的intrins库函数流水灯循环左移右移,用C语言,要高效的话,只有用伪本征函数文件“intrins.h”中的_crol_(),_cror_()...等等函数,具体解释如蓝色文字,例如,要用P1口驱动8个共阳连接的二极管左循环一个一个地亮,语句是 P1=_crol_(a,1);//a储存被移位的字符。

_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”指令相关,上面几个函数不同于参数类型。

例:#includemain(){unsigned int y;C-5 1 程序设计 37y=0x00ff;y=_irol_(y,4); /*y=0x0ff0*/}函数名: _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语言版)第3章 C51程序设计基础

单片机基础与应用(C语言版)第3章 C51程序设计基础

选择语句
多分支选择的switch语句, 其一般形式如下: switch(表达式)
{ case常量表达式1: 语句组1;break; case常量表达式2: 语句组2;break; …… case常量表达式n: 语句组n;break; default : 语句组n+1;
} 该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达 式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应 该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继 续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同, 则执行default后的语句组。
位运算
按位或操作符: |
或操作
格式:x|y
规则:对应位均为0时才为0,否则为1 例如, i=i|0x0f; 等同于
i|=0x0f;
主要用途:将1个数的某(些)位置1,其余各位不变
位运算
异或操作
按位异或操作符:^ 格式:x^y 规则:对应位相同时为0,不同时为1
例如, i=i^0x0f; 等同于 i^=0x0f; 主要用途:使1个数的某(些)位翻转(即原来为1的位 变为0,为0的变为1),其余各位不变。
右移运算符“>>”的功能,是把“>>”左边的操作数 的各二进制位全部右移若干位,移动的位数由“>>” 右边的常数指定。进行右移运算时,如果是无符号数, 则总是在其左端补“0”
练习
1 .若x = 10, 则!X的值为真或假? 2. 若a = 3, b = 2, 则if(a&b)的值为真或假? 3. 5 && 0 ||8的值为?
浮点型 指针型 位类型 特殊功能寄存器 16位特殊功能寄存器 可寻址位

C51的部分常用库函数_51单片机应用开发从入门到精通_[共3页]

C51的部分常用库函数_51单片机应用开发从入门到精通_[共3页]

第3章 MCS-51单片机软件开发环境
37 3.3.2 C51的部分常用库函数
本小节将简要介绍C51的部分常用库函数。

1.abs 函数
abs 函数的详细介绍如表3.14所示。

表3.14 abs 函数介绍 函 数 原 型
#include <math.h> int abs(int x); 函数参数
x :整型 函数功能 计算x 的绝对值 函数返回值
x 的绝对值,整型
说明:在math.h 头文件中,除了abs 函数之外,还有类似的acos 、asin 、atan 等函数。

2.ceil 函数
ceil 函数的详细介绍如表3.15所示。

表3.15 ceil 函数介绍 函 数 原 型
#include <math.h> float ceil(float x); 函数参数
x :浮点数 函数功能
求大于或等于x 的最小整数 函数返回值
大于或等于x 的最小整数,浮点数
说明:在math.h 头文件中,有类似ceil 的求小于或等于x 的最大整数的floor 函数。

3.getchar 函数
getchar 函数的详细介绍如表3.16所示。

表3.16 getchar 函数介绍 函 数 原 型
#include <stdio.h> char getchar(void); 函数参数
无 函数功能
从MCS-51单片机硬件的输入接口用_getkey 函数读入一个字符并且将此字符传递给putchar 函数用于回应 函数返回值
来自输入接口的下一个字符,整型,有ASCII 对应码值
4.gets 函数
gets 函数的详细介绍如表3.17所示。

51单片机 定时器 c语言

51单片机 定时器 c语言

51单片机定时器 c语言51单片机是目前较为流行的一种单片机芯片,定时器是其重要的功能之一,可以用于实现各种定时任务,而c语言则是51单片机常用的编程语言之一。

下面将结合实例,阐述51单片机定时器在c语言中的使用方法。

一、引入头文件及定义定时器首先需要引入头文件“reg51.h”,然后需要定义一个定时器变量和一个计数变量。

在本文中,我们将使用定时器0,所以定义如下:```c#include<reg52.h>sbit led = P2^0; //定义led信号端口P2.0unsigned char count = 0; //计数变量unsigned char timerVal = 56; //定时器初值```需要注意的是,定时器初值的计算方法如下:$$定时器初值 = 256 - \frac{所需延时时间× 晶振频率}{12}$$在本例中,晶振频率为11.0592MHz,所需延时时间为0.001秒,则计算得到定时器初值为56。

二、设置定时器参数设置定时器参数前,需要先关闭定时器0。

设置完成后,再通过TR0位将定时器0启动。

```cvoid initTimer(){TMOD &= 0xF0; //定时器0, 方式1TMOD |= 0x01;TH0 = timerVal; //定时器初值高位TL0 = timerVal; //定时器初值低位ET0 = 1; //打开定时器0中断EA = 1; //打开总中断}void main(){initTimer(); //初始化定时器0while(1){if(count >= 100){led = !led; //LED翻转count = 0; //计数器清零}}}void timerHandler() interrupt 1{TH0 = timerVal;TL0 = timerVal;count++; //计数器+1}```在上述代码中,通过设置TMOD寄存器,将定时器工作在方式1。

C51函数参考

C51函数参考

(12)asin
原型:float asin(float x); 功能:求反正弦 参数:浮点数 x,取值必须在-1~1 之间。 返回:X 的反正弦,值在-π /2~π /2 之间。
(13)acos
原型:float acos(float x); 功能:求反余弦 参数:浮点数 x,取值必须在-1~1 之间。 返回:x 的反余弦,值在 0~π 之间。
(5)_lror_
原型:unsigned long _lror_(unsigned long l,unsigned char b); 功能:_lror_程序将长整数 l 循环右移 b 位。固有函数代码,要求内嵌而不是被调用。 参数:l 要右移的数,b 要右移的位数。 返回:返回右移后的值。摘要:#include<intrins_h>。
《单片机控制装置安装与调试》
电子工业出版社
(8)_lrol_
原型:unsigned long _lrol_(unsigned long l,unsigned char b); 功能:_lrol_程序将长整数 l 循环左移 b 位。固有函数,代码要求内嵌而不是被调用。 参数:l 要左移的数,b 要左移的位数。 返回:返回左移后的值。
(11)_pop_
原型:void _pop_(unsigned char _sfr); 功能:将堆栈中的数据弹出到特殊功能寄存器_sfr。
三、字串转数字,随机数,存储池管理<stdlib.h> (1)atof
原型:float atof(void *string); 功能:将浮点数格式的字符串转换为浮点数。如果 string 的第一个字符不能转换成数字,就 停止处理。 参数:格式为,[{+|-}]数字[.数字][{e|E}[{+|-}]数字]。如,-12.345e+67 返回:atof 函数返回 string 的浮点值。

Keil C51使用详解

Keil C51使用详解

Keil C51使用详解第一章Keil C51开发系统基本知识 (6)第一节系统概述 (6)第二节Keil C51单片机软件开发系统的整体结构 (6)第三节Keil C51工具包的安装 (7)1. C51 for Dos 72. C51 for Windows的安装及注意事项: (7)第四节Keil C51工具包各部分功能及使用简介 (7)1. C51与A51. 72. L51和BL51. 83. DScope51,Tscope51及Monitor51. 84. Ishell及uVision. 9第二章Keil C51软件使用详解 (10)第一节Keil C51编译器的控制指令 (10)1. 源文件控制类 (10)2. 目标文件(Object)控制类: (10)3. 列表文件(listing)控制类: (10)第二节dScope51的使用 (11)1. dScope51 for Dos 112. dScope for Windows 12第三节Monitor51及其使用 (13)1. Monitor51对硬件的要求 (13)2. Mon51的使用 (13)3. MON51的配置 (13)4. 串口连接图: (13)5. MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1. Ishell for Dos的使用 (14)2. uVision for windows的使用 (15)第三章Keil C51 vs 标准C.. 15第一节Keil C51扩展关键字 (15)第二节内存区域(Memory Areas): (16)1. Pragram Area: (16)2. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三节存储模式 (16)1. Small模式 (16)2. Compact模式 (17)3. large模式 (17)第四节存储类型声明 (17)第五节变量或数据类型 (17)第六节位变量与声明 (17)1. bit型变量 (17)2. 可位寻址区说明20H-2FH.. 18第七节Keil C51指针 (18)1. 一般指针 (18)2. 存储器指针 (18)3. 指针转换 (18)第八节Keil C51函数 (19)1. 中断函数声明: (19)2. 通用存储工作区 (19)3. 选通用存储工作区由using x声明,见上例。

单片机C语言(C51)常用库函数

单片机C语言(C51)常用库函数

单片机C语言(C51)常用库函数单片机C语言(C51)常用库函数在单片机编程中,使用库函数可以大大提高开发效率和简化代码结构。

C51是一种常用的单片机编程语言,它提供了许多常用的库函数,本文将介绍一些常用的C51库函数及其用法。

1. 字符串处理函数字符串处理是单片机编程中常见的任务。

C51提供了一些常用的字符串处理函数,如strcpy、strcat、strcmp等。

这些函数可以简化对字符串的操作。

- strcpy:用于将一个字符串复制到另一个字符串中。

用法示例:```char str1[20];char str2[20] = "Hello, world!";strcpy(str1, str2);```- strcat:用于将一个字符串追加到另一个字符串的末尾。

用法示例:```char str1[20] = "Hello,";char str2[20] = " world!";strcat(str1, str2);```- strcmp:用于比较两个字符串是否相等。

用法示例:```char str1[20] = "Hello";char str2[20] = "World";if (strcmp(str1, str2) == 0) {// 字符串相等的处理逻辑} else {// 字符串不相等的处理逻辑}```2. 数学函数单片机编程中常常需要进行数学运算,C51提供了一些常用的数学函数,如abs、sqrt、sin等。

这些函数可以帮助实现各种数学计算。

- abs:用于计算一个整数的绝对值。

用法示例:```int num = -10;int abs_num = abs(num);```- sqrt:用于计算一个浮点数的平方根。

用法示例:```float x = 16.0;float sqrt_x = sqrt(x);```- sin:用于计算一个角度的正弦值。

C51程序的函数教程

C51程序的函数教程

C51程序的函数教程C51是一种基于哈佛体系结构的经典单片机架构,广泛应用于各种嵌入式系统中。

C51程序是指使用C语言编写的针对C51单片机的程序代码。

在本文中,我们将介绍C51程序中常用的几个重要函数,并提供一些实例来帮助读者更好地理解其用法。

1. 主函数(main函数)主函数是C程序的入口点,它是程序的起始位置。

在C51程序中,主函数的定义形式如下:```cvoid main(void)//程序代码```主函数中的程序代码将按照顺序执行,可以包括变量定义、函数调用、条件语句和循环语句等。

2.IO口输入输出函数IO口输入输出函数用于控制C51单片机的输入输出引脚。

C51单片机通常具有多个IO口,每个IO口可以配置为输入或输出。

以下是几个常用的IO口输入输出函数:- `void P0 = value;`:将value的值输出到P0口。

- `value = P0;`:将P0口的值读取到value变量。

- `void P1 = value;`:将value的值输出到P1口。

- `value = P1;`:将P1口的值读取到value变量。

3.延时函数延时函数用于在程序中添加延迟以实现时间控制。

C51单片机没有内置的延时函数,但我们可以使用定时器来实现延时。

以下是一个常用的延时函数示例:```cvoid delay(unsigned int ms)while (ms--)//使用定时器产生延时}```在上述延时函数中,使用了一个循环来实现延时。

具体的延时时间是通过循环次数来控制的,ms参数表示延时的毫秒数。

4.串口通信函数串口通信函数用于实现C51单片机与外部设备之间的串口通信。

串口通信可以用于数据传输和调试等应用。

以下是一个常用的串口通信函数示例:```cvoid UART_Init//配置串口参数void UART_SendChar(unsigned char value)//发送一个字符unsigned char UART_ReceiveChar//接收一个字符```在上述示例中,`UART_Init`函数用于配置串口的参数,`UART_SendChar`函数用于发送一个字符,而`UART_ReceiveChar`函数用于接收一个字符。

51单片机C语言指令

51单片机C语言指令
sfr 1 字节 0~255
sfr16 2 字节 0~65535
有符号整形 (signed)ind 16位 -32767-+32767
(signed)short 16位 -32767-+23767
(signed)long 32位 -2147483648-+214748364
简单的单片机C程序要有什么
1)头文件 (#include<re51.h>)
2)主函数 (void main)
3)执行部分
C语言中常用的语句
1)选择语句(if-else)
2)循环语句(while)
3)循环语句(do while)
4)循环语句(for( ; ; ))
C-51的运算符
do-while 循环语句
C-51的数据类型
sbit(位)
把变量另外取名#define a P2 (把P2另外取名为a)
基本数据类型
bit 1 字节 0 或 1
signed char 1 字节 -128~+127
unsigned char 1 字节 0~255
signed int 2 字节 -32768~+32867
unsigned int 2 字节 0~65535
signed long 4 字节 -2147483648~+2147483647
unsigned long 4 字节 0~4294967295
float 4 字节 ±1.176E-38~±3.40E+38
指针 1~3 字节 对象地址
sbit 1 位 0 或 1
== != (等于 不等于)

单片机C语言编程常用语句讲课稿

单片机C语言编程常用语句讲课稿
C51还可以定义多维数组,也可以定义字符型数组。 数组是十分有用的数据类型,用它可以形成容易查找的 数据表格。
C51函数
一、函数的定义与分类 ⒈ 函数的分类
⑴ 标准库函数 ⑵ 用户自定义函数 用户自定义函数是用户根据自己的需要而编写的函数。 从函数定义的形式上划分:无参数函数、有参数函数 和空函数。 ⒉ 函数的定义 返回值类型 函数名(形式参数列表)
#include <reg52.h>
void main()
{
char a;
a=P1;
a=a&0x03;
/*屏蔽高6位*/
switch (a)
{
case 3:P1=0x83;break;
case 2:P1=0x43;break;
case 1:P1=0x23;break;
case 0:P1=0x13;
}
void main()
{
char a; while (1) {
While中的条件恒为1,表示 死循环。
a=P1;
a=a&0x03;
/*屏蔽高6位*/
switch (a)
{
case 3:P1=0x83;break;
case 2:P1=0x43;break;
case 1:P1=0x23;break;
case 0:P1=0x13;
⒉ 二维数组 ⑴ 二维数组的定义 类型说明符 数组名[行数] [列数]; 如:float a[3][4]; ⑵ 二维数组的初始化 int a[3][4]={{1,2,3,4},{5,6,7,8}, {9,10,11,12}}; /*全部初始化*/ int a[3][4]={{1,2,3,4},{5,6,7,8}, {}}; /*部分初始化,a[2][0]= a[2][1]= a[2][2]= a[2][3]= 0*/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中,c为待判断的字符。可打印字符的取值范围为0x21~0x7C,不包含空格,如果是可打印字符则返回1,否则返回0。
1.6包含空格的可打印字符检查函数
包含空格的可打印字符检查函数用于检查形参字符是否为可打印字符以及空格,其函数原型如下:
bit isprint (char c);
其中,c为待判断字符。如果是则返回1,否则返回0。该函数与isgraph的区别在于包含了空格符,空格符为0x20。
1字符函数
字符函数的原型声明包含在头文件CTYPE.H中。常用的一些字符函数介绍如下。
1.1检查英文字母函数
检查英文字母函数用于检查形参字符是否为英文字母,其函数原型如下:
bit isalpha(char c);
其中,c为待判断的字符,如果是英文字母则返回1,否则返回0。程序示例如下:
1.2检查字母数字函数
2.13获取字符串个数函数
获取字符串个数函数用于返回字符串中字符总数,其函数原型如下:
char*strlen(char *s1);
其中,s1为输入字符串。该函数的功能是获取字符串s1中的字符个数,返回值的大小不包括结尾的字符串结束符。
2.14搜索字符串函数
搜索字符串函数用于搜索字符串出现的位置,其函数原型如下:
char toupper (char c);
其中,c为待转换的小写字符。如果字符参数不在a~z之间,则该函数将不起作用,而直接返回原字符。
1.15 ASCII字符转换函数
ASCII字符转换函数用于将任何字符型参数缩小到有效的ASCII范围之内,其函数原型如下:
char toascii (char c);
2.5字符串移动函数
字符串移动函数同样用于复制字符串,其函数原型如下:
void *memmove(void*dest,void*src,int len);
其中,dest为目标字符串,src为源字符串,len为复制长度。该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针。其功能与memcpy相同,但是复制区间src与dest可以发生交迭。
2.2指定长度的字符串比较函数
指定长度的字符串比较函数用于按照指定的长度比较两个字符串的大小,其函数原型如下:
char memcmp(void*s1, void*s2,int len);
其中,s1和s2为输入字符串,len为比较的长度。该函数的功能是逐个比较字符串sl和s2的前len个字符,如果相等则返回0,如果字符串s1大于s2,则返回一个正数,如果字符串s1小于s2,则返回一个负数。如果两个字符串的长度小于len,该函数仍将一直比较len个字符,这种情况下,有可能结果是错误的。因此应该保证len不能超过最短字符串的长度。
其中,c为待转换的字符。该函数执行的操作是将形参数值和0x7f做与运算,从而去掉第7位以上的所有位数。如果形参已是有效的ASCII字符,则不作处理,直接返回原字符。
1.16大写字符宏转换函数
大写字符宏转换函数用于大写字符转换为小写字符,其函数原型如下:
char _tolower(char c);
其中,c为待转换的大写字符。这其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0x20逐位进行或运算,从而将大写字符转换为小写字符。
2.4带终止字符的字符串复制函数
带终止字符的字符串复制函数用于复制字符串,如果遇到终止字符则停止复制,其函数原型如下:
void*memccpy(void*dest, void*src,char val,int len);
其中,dest为目标字符串,src为源字符串,val为终止字符,len为复制的长度。该函数的功能是复制字符串src中的len个字符到dest中,复制len个字符后则返回NULL。如果遇到字符val则停止复制,此时返回一个指向dest中的下一个元素的指针。
1.7格式字符检查函数
格式字符检查函数用于检查形参字符是否为标点、空格或格式字符,其函数原型如下:
bit ispunct (char c);
其中,c为待判断字符,如果是则返回1,否则返回0。
1.8小写英文字母检查函数
小写英文字母检查函数用于检查形参字符是否为小写英文字母,其函数原型如下:
bit islower(char c);
bit isspace (char c);
其中,c为待判断字符。如果是控制字符则返回1,否则返回0。控制字符包括:空格、制表符、回车、换行、垂直制表符和送纸,其取值范围为0x09~0x0d,或为0x20。
1.11十六进制数字检查函数
十六进制数字检查函数用于检查形参字符是否为十六进制数字,其函数原型如下:
2.11字符串覆盖函数
字符串覆盖函数用于将一个字符串覆盖另一个字符串,其函数原型如下:
char* strcpy(char *s1,char *s2);
其中,s1为目标字符串,s2为源字符串。该函数的功能是将字符串s2(包括结束符)复制到字符串s1中的第1个字符指针处。这里需要注意和strcat函数相区别,strcat函数将字符串s2复制到字符串s1的末尾。
2.3字符串复制函数
字符串复制函数用于复制指定长度的字符串,其函数原型如下:
void*memcpy(void*dest,void*src,int len);
其中,dest为目标字符串,src为源字符串,len为复制的长度。该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针。
bit isxdigit (char c);
其中,c为待判断字符。如果是16进制数字字符则返回1,否则返回0。
1.12十六进制数字转换函数
十六进制数字检查函数用于转换形参字符为十六进制数字,其函数原型如下:
char toint (char c);
其中,c为待转换字符。该函数将形参字符0~9、a~f(大小写无关)转换为16进制数字。其中,对于字符0~9,返回值为0H~9H,对于ASCII字符a~f(大小写无关),返回值为0AH~0FH。
2.9字符串比较函数
字符串比较函数用于比较两个字符串的大小,其函数原型如下:
char strcmp(char *s1,char *s2);
其中,s1和s2为待比较的字符串。该函数的功能是比较字符串s1和s2,如果两者相等则返回0;如果s1<s2,则返回一个负数;如果s1>s2,则返回一个正数。
2.10包含结束符的字符串比较函数
其中,c为待判断字符。如果是小写英文字母则返回1,否则返回0。
1.9大写英文字母检查函数
大写英文字母检查函数用于检查形参字符是否为大写英文字母,其函数原型如下:
bit isupper(char c);
其中,c为待判断字符。如果是大写英文字母则返回1,否则返回0。
1.10控制字符检查函数
控制字符检查函数用于检查形参字符是否为控制字符,其函数原型如下:
1.13大写字符转换函数
大写字符转换函数用于将大写字符转换为小写字符,其函数原型如下:
char tolower (char c);
其中,c为待转换的大写字符。如果字符参数不在A~Z之间,则该函数将不起作用,而直接返回原字符。
1.14小写字符转换函数
小写字符转换函数用于将小写字符转换为大写字符,其函数原型如下:
2.1字符查找函数
字符查找函数用于在memchr(void*sl,char val,int len);
其中,s1为输入字符串,val为待查找的字符,len为查找的长度范围。该函数的功能是在字符串s1中顺序搜索前len个字符以找出字符val,如果找到则返回sl中指向val的指针,如果没有找到则返回NULL。
2.8指定长度的字符串追加函数
指定长度的字符串追加函数用于复制指定长度的字符串到另一个字符串的尾部,其函数原型如下:
void*strncat(,char *s1,char *s2,int n);
其中,s1为目标字符串,s2为待复制的字符串,n为复制的长度。该函数实现的操作是从字符串s2中复制n个字符添加到字符串s1的尾部。其中,如果字符串s2的长度比n小,则将全部复制字符串s2(包括串结束符)。
1.17小写字符宏转换函数
小写字符宏转换函数用于小写字符转换为大写字符,其函数原型如下:
char _toupper (char c);
其中,c为待转换的小写字符。这其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0xdf逐位进行与运算,从而将小写字符转换为大写字符。
2字符串函数
字符串函数的原型声明包含在头文件STRING.H中。在C51语言中,字符串应包括2个或多个字符,字符串的结尾以空字符来表示。字符串函数通过接受指针串来对字符串进行处理。常用的字符串函数介绍如下。
字符串追加函数用于复制字符串到另一个字符串的尾部,其函数原型如下:
void *strcat(char *s1,char *s2);
其中,s1为目标字符串,s2为待复制的字符串。该函数实现的操作是将字符串s2复制到字符串s1的尾部。其中字符串s1要有足够的大小来保存两个字符串。该函数的返回值指向字符串s1中的第一个字符的指针。
检查字母数字函数用于检查形参字符是否为英文字母或数字字符,其函数原型如下:
bit isalnum(char c);
1.3检查控制字符函数
检查控制字符函数用于检查形参字符是否为控制字符,其函数原型:bit iscntrl (char c);其中,c为待判断的字符。控制字符其取值范围为0x00~0xlF之间或等于0x7F,如果是,则返回1,否则返回0。
包含结束符的字符串比较函数用于比较两个字符串的大小,其函数原型如下:
char*strncmp(char *s1,char *s2,int n);
相关文档
最新文档