您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章单片机软件编程基础
第3章51系列单片机软件编程基础—C51语言基础•1、指令(语句)•让计算机做某件事的命令称为指令(语句)。•指令属性:功能、时间、空间。•所有指令的集合称为指令系统。2、程序与程序设计•著名计算机科学家沃思提出一个公式:•数据结构+算法=程序•实际上:•程序=•算法+数据结构+程序设计方法+语言调试工具•指令的有序集合称为程序。•编制程序的过程称为程序设计。•C51的基础包括:•3.1C51语言的数据•3.2C51对单片机主要资源的控制•3.3C51的基本运算与流程控制语句•3.4C51语言的数组、指针、函数•3.5C51语言的预处理命令及汇编语句的嵌入•3.6C51的程序结构3.1C51语言的数据•C51语言是对数据的处理。•3.1.1数据类型•3.1.2常量与变量•3.1.3存储类型3.1.1数据类型3.1.2变量与常量1、常量整型、实型、字符型、字符串、符号•(1)整型•十进制:6、89、345•十六进制:0x12、0X45AB•如果是负值:-0x56、-9•(2)实型常量•15.75、1.574E1、1575E-3、-0.0025、•-2.5e-3、25E-4(3)字符型常量•单引号‘a’、’9’、’!’•字符时按其对应的ASCII码值来存储的,一个字符占一个字节•注意:‘9’和9是完全不同的•(4)字符串常量•双引号“china”、“123456”•“9”和‘9’不同•(5)符号常量•#define标识符常量•如:#definePI3.1415926•#defineSTAR‘*’•(#define是预处理命令)2、变量•数据类型变量名;•用的比较多的:•char•unsignedchar•int•unsignedchar•bit3.1.3存储类型3.2对单片机主要资源的控制•3.2.1特殊功能寄存器的定义•3.2.2绝对地址的访问•3.3.3位变量的定义3.2.1特殊功能寄存器的定义•两种方法:•1、sfr名字=特殊寄存器地址;•如:sfrSCON=0x98;•sfrTMOD=0x89;•2、#includereg51.h3.2.2绝对地址的访问•两种方法:•1、绝对宏#includeabsacc.h如:•#includeabsacc.h•#definePAXBYTE[0xffec]•#defineNRAMDBYTE[0x40]•voidmain(void)•{PA=0x3A;•NRAM=0x01;•}2、_at_关键字•[存储类型]数据类型变量名_at_常量;•例:•dataunsignedcharx1_at_0x40;•xdataunsignedintx2_at_0x2000;•voidmain(void)•{x1=0xff;•x2=0x1234;•while(1);•}3.2.3SFR中的位及位变量的C51定义•1、SFR的位定义•sbit位名=SFR名^位置;•如:sbitLED0=P1^0;•2、位变量的C51定义•biti1;•bdatacharibase;•bitmy0=ibase^0;•bitmy7=ibase^7;3.3基本运算与流程控制•3.3.1基本运算•3.3.2分支判断-if、switch•3.3.3循环控制—while、for•3.3.4break、continue、return、goto3.3.1基本运算•算术、关系、逻辑、赋值、位•1、算术运算•+、-、*、/、%、--、++•%运算两端要为整型数据。•2、关系运算•、=、、=、==、!=•结果:成立或不成立1或03、逻辑运算:•&&(逻辑与)、||(逻辑或)、!(逻辑非)•结果:真或假1或0•4、位运算:•&(按位与)、|(按位或)•^(按位异或)、~(按位取反)•(位左移)、(位右移)3.3.2分支判断-if、switch•1、if•(1)if(表达式)•{语句}•(2)if(表达式){语句1}•else{语句2}•(3)if(表达式1){语句1;}•elseif(表达式2){语句2;}•elseif(表达式3){语句3;}•...•elseif(表达式m){语句m;}•else{语句n;}2、switch•switch(表达式)•{case常量表达式1:{语句1;}break;•case常量表达式2:{语句2;}break;•...•case常量表达式n:{语句n;}break;•default:{语句n+1;}•}3.3.3循环控制—while、for•1、while•while(表达式)•{语句;}•2、do-while•do•{语句;}•while(表达式);3、for•for(表达式1;表达式2;表达式3)•{语句;}举例--延时函数•(1)用while实现:•voidmsec(unsignedintx)•{unsignedcharj;•while(x--)•{for(j=0;j125;j++);•}•}(2)用for实现:•voiddelayxms(unsignedintxms)•{unsignedintt1,t2;•for(t1=xms;t10;t1--)•for(t2=120;t20;t2--);•}举例—无限循环:3.3.4break、continue、return、goto•break;•退出循环(整个循环)•continue;•退出循环(当前循环)•goto标号;•无条件转移3.4数组、指针、函数•3.4.1数组(一维)•类型说明符数组名[元素个数];•intdemol[10];•unsignedchartab[5]={1,2,3,4,5};•查表:例:将摄氏温度转换成华氏温度•#defineucharunsignedchar•ucharcodetempt[]={32,34,36,37,39,41};•ucharftoc(uchardegc)•{returntempt[degc];•}•voidmain()•{ucharx;•x=ftoc(5);•}3.4.2指针•指针是用来存放存储器地址的变量,其声明格式如下:•数据类型*变量名称;•基于存储器的指针•一般指针3.4.3函数•1、一般函数•返回值类型函数名()•{语句;}•返回值类型函数名(形式参数)•{语句;}•2、中断函数•函数类型函数名interruptnusingn3、函数库#include•(1)SFR库:reg51.h•(2)I/O函数库stdio.h•I/O函数库主要用于数据通过串口的输入和输出等操作。串口初始化:•SCON=0x50;•TMOD|=0x20;PCON|=0x80;•TL1=0xF4;TH1=0xF4;•IE|=0x90;•TR1=1;(3)内部函数库intrins.h(4)绝对地址访问库absacc.h3.5预处理及汇编语句的嵌入•3.5.1文件包含、宏定义、条件编译•1、include•#include文件名--当前•#include“文件名”—整个•2、define•#define标识符数值3、条件编译•#if常量表达式•代码1;•#else•代码2;•#endif3.5.2汇编语句的嵌入•#pragmaasm•汇编语句•#pragmaendasm3.6C51程序结构•单片机C51语言继承了C语言的特点,其程序结构与一般C语言结构没有差别。•3.6.1程序结构•3.6.2编程规范及注意事项•3.6.3标识符与关键字3.6.1程序结构•#includereg52.h•#includestdio.h•voidFunction1(void);•unsignedintch;•voidmain(void)•{SCON=0x50;•TMOD=0x20;•TH1=221;TR1=1;TI=1;•//以上5条语句是为串口调试设置的••while(ch=5)•{Function1();•printf(char=%d\n,ch);•}•while(1);•}•voidFunction1(void)•{unsignedcharps;•ps=1;ch=ch+ps;•}结构再说:设51单片机P1.0连接了一个LED发光指示灯,编程使该灯按一定的时间间隔闪烁:•1/****************************•2;说明:这是一个学习C51的例程•3;功能:使P1.0口的LED按照设置的时间间隔闪烁•4;设计者:JZH•5;设计日期:2013年9月27日•6;修改日期:2014年11月20日•7;版本序号:V1.0.0•8;*****************************/•9#includereg51.h//寄存器定义•10#includestdio.h//一般I/O口定义•11/***以下是全局变量定义*********/•12sbitLED=P1^0;//LED灯连接在P1.0上•13intdatai;//定义一个整型全局变量•14/*********主程序开始***************/•15voidmain(void)•16{while(1)•17{LED=1;//LED灯点亮•18for(i=0;i1000;i++);//延时•19LED=0;//LED灯熄灭•20for(i=0;i1000;i++);//延时•21}•22}3.6.2编程规范及注意事项•1、注释•//•/**/•2、命名•3、格式•3.6.3标识符与关键字•1、标识符•2、关键字实验1:Dais使用简介•1、启动与设定:双击出现:选择通信串口与波特率(1)如果纯软件模拟:选择“取消”;(2)需要硬件:选择“串口1、57600”在选择:串口1、57600时,如果出现:•说明:硬件没有连接好,必须检查仿真器的连接。正常后进入:2、编辑:(新文件或已存在的文件)•(1)编辑一个新文件:•选择下拉菜单“文件---新文件”出现:在空白处输入源程序,如下图:源程序输入完毕,选择“文件—存储”保存文件,出现:注意:•(a)“文件”不能放在桌面上。•(b)“路径”建立的根目录要选择在“E盘或F盘”,不能选择建立在“C或的D”(C或D已被系统保护)。•(c)“路径名、文件名”不能出现汉字。•(d)“路径名、文件名”不能超过8个字符。•如:E:\JZH\J1.ASM显示:编辑一个新文件结束。•(2)编辑一个已存在的文件•选择下拉菜单“文件—打开文件”•在相应的路径下选择相应的源程序即可。2、编译:将源程序翻译成机器码•文件编辑完成后,就要进行编译。•选择下拉菜单“编译---文件编译、连接、装载”,如下图:如果没有语法错误,出现:如果有语法错误,出现:点击错误的提示,即可找到错误行,进行相应的修改,然后再进行编译,直到没有错误。•3、运行:•要知道编写的程序是否正确,要运行程序,通过对结果的分析才行。•运行方式有多种,主要有连续运行、运行到光标处、单步运行。•在下拉菜单“调试---”中选择。•如图:•“连续运行”是看整个程序运行的结果;•“运行到光标处”是看一段程序运行的结果。•“单步运行”是程序运行每一步的结果。•一般开始选择“连续运行”,如果结果有问题,再选择“运行到光标处”或“单步运行”。连续运行:4、观察结果:•结果一般放在:寄存器、片内RAM、片外RAM及I/O口•另外,可以看到ROM中的内容。•观察结果先需要将运行程序暂停。暂停运行是“ESC”键。选择下拉菜单“视图---寄存器”\“存储空间”如图:点击“寄存器”,出现如下图。点击相应的寄存器名字,可以修改其内容。点击“存储空间”,出现“程序存储区、数据存储区、CPU内部存储区、特殊寄存器区”•程序存储区:ROM区,源程序编译后产生的代码。•数据存储区:片外RAM及I/O口•CPU内部存储区:片内RAM•特殊寄存器区:特殊功能寄存器区。•一般用“数据存储区、CPU内部存储区”。数据存储区:可以看到片外RAM及I/O口的地址及内容,内容可以修改。CPU内部存储区:可以看到片内RAM的地址及内容,内容可以修改。4、快捷方式•系统提
本文标题:第3章单片机软件编程基础
链接地址:https://www.777doc.com/doc-2155656 .html