基于单片机的函数信号发生器的设计与制作

上传人:1888****888 文档编号:36494248 上传时间:2021-10-31 格式:DOC 页数:72 大小:3.25MB
返回 下载 相关 举报
基于单片机的函数信号发生器的设计与制作_第1页
第1页 / 共72页
基于单片机的函数信号发生器的设计与制作_第2页
第2页 / 共72页
基于单片机的函数信号发生器的设计与制作_第3页
第3页 / 共72页
点击查看更多>>
资源描述
第一章 计算机基础知识及MCS-51单片机硬件结构1.1 数制与编码 在计算机中,任何命令和信息都是以二进制数据的形式存储的。本节将讲解常用的十进制、二进制、十六进制的含义及相互转换的方法。1.1.1 二进制数二进制数只有两个数字符号:0和1。计数时按“逢二进一”的原则进行计数。在计算机中,二进制数的每一位是数据的最小存储单位。将8位(bit)二进制数称为一个字节(B),字节是计算机存储信息的基本数据单位。存储器的容量常用以下单位表示:1B=8bit1024B=1KB1024KB=1MB1024MB=1GB1024GB=1TB对于8位二进制数(D0D7),各位所对应的值为D7D6D5D4D3D2D1D0例如:二进制数10110111,按位权展开求和计算可得=1+0+1+1+0+1+1+1=128+0+32+16+0+4+2+1=对于含有小数的二进制数,小数点右边第一位小数开始向右各位的权值分别为1.1.2 十六进制数计算机在输入输出或书写时,可采用十六进制数表示相应的二进制数。十六进制数有16个数字符号,其中09与十进制数相同,剩6个为AF,分别表示十六进制数的确1015,计数时按“逢十六进一”的原则进行计数。为了便于区别不同进制的数据,一般情况下可在数据后跟一后缀:二进制数用“B”表示(如1001111B)十六进制数用“H”表示(如3AH)十进制数用“D”表示(如39D或39)1.1.3 不同数制之间的转换计算机中的数只能用二进制数表示,十六进制数适合读写方便的需要,日常生活使用的是十六进制数,计算机根据需要对各种进制进转换。1二进制数转换为十进制数对任意二进制数均可按权展开将其转化为十进制数。例如:=1+0+1+1+0+1+1+1=128+0+32+16+0+4+2+1=183D2十进制数转换为二进制数十进制数转换为二进制数,可将整数部分与小数部分别进行转换,然后合并。其中整数部分可采用“除2取余法”进行转换,小数部分可采用“乘2取整法”进行转换。例如:将37D转换为二进制数。2371低位(每一次余数为低位)2180291240220211高位(直到商数等于0为止)0结果为37D=100101B。3二进制数转换为十六进制数 因为=16,所以4位二进制数相当于1位十六进制数,二进制、十进制、十六进制对应数的转换关系见表1-1。表1-1 二进制、十进制、十六进制对应转换表十进制二进制十六进制000000100011200102300113401004501015601106701117810008910019101010A111011B121100C131101D141110E151111F例如:1000101B=45H1.1.4 ASCLL码对于计算机非数值型数据不能直接装入计算机,必须将其转换为特定的二进制代码(即将其编码),以二进制代码所表示的字符数据的形式装入计算机。ASCLL码是一种国际标准信息交换码,它利用7位二进制代码来表示字符,再加上1位校验位,故在计算机中用1个字节8位二进制数来表示一个字符。(ASCLL码表可查资料)1.2 单片机与嵌入式系统组成单片机又称单片微控制器,其基本结构是将微型计算机的基本功能部件:中央处理机(CPU)、存储器、输入接口、输出接口、定时器/计算器、中断系统等全部集成在一个半导体芯片上。1.3 MCS-51单片机总体结构1.3.1 MCS-51 单片机总体结构框图及功能单片机内部各功能部件通常都挂靠在内部总线上,它们通过内部总线传送数据信息和控制信息,各功能部件分时使用总线,即所谓的内部单总线结构。图2-1为8051单片机内部基本结构框图。外部事件计数外时钟源振荡器和时序OSC程序存储器4KB ROM数据存储器256B RAM/SFR振荡器和时序OSC8051CPU64KB 总线扩展控制器可编程I/O可编程全双工串行口外中断内中断控制并行口串行通信图1-1 8051单片机内部基本结构框图1CPUCPU是单片机内部的核心部件,是单片机的指挥和控制中心。从功能上看,CPU可分为运算器和控制器两大部分。控制器主要包括程序计算器PC、指令寄存器、指令译码器及定时控制电路等。PC是一个16位的专用寄存器,用来存放CPU要执行的存放在程序存储器中的下一条指令地地址。当系统上电复位后,PC的内容为0000H,所以单片机主控制程序的首地址自然应定位为0000H。运算器由算术逻辑运算部件ALU、累加器ACC、程序状态字寄存器PSW等组成。程序状态寄存器PSW用于寄存当前指令执行后的某些状态信息,PSW各位定义见表1-2。表1-2 PSW各位定义D7D6D5D4D3D2D1D0CyACF0RS1RS0OVF1PCy:进位/借位标志位。AC:辅助进位标志。F0:用户标志位。RS0及RS1寄存器组选择控制位。RS0、RS1与寄存器组的对应关系见表1-3。表1-3RS0、RS1与寄存器组的对应关系见表RS1RS2寄存器组片内RAM地址指令助符000组00H07HR0R7011组08H0FHR0R7102组10H17HR0R7113组18H1FHR0R7OV:溢出标志。2RAMRAM为单片机内部程序存储器,其存储器空间包括随机存储器区、寄存器区、特殊功能寄存器及位寻址区。3ROMROM为单片机内部程序存储器。4并行I/O口P0P3是四个8位并行I/O口,每个口既可作为输入,也可作为输出。5定时器/计数器6中断系统MCS-51单片机有5个中断源。7串行接口串行接口提供对数据各位按序一位一位地传送。MCS-51中的串行接口是一个全双工通信接口,即能同时进行发送和接收数据。8时钟电路CPU执行指令的一系列动用都是在时序电路的控制下一拍一拍进行的,时钟电路用于产生单片机中最基本的时间单位。1.3.2 MCS-51 引脚功能VCC:芯片电源,接+5V。VSS:接地端。XTAL1、XTAL2:晶体振荡电路反相输入端和输出端。ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。PSEN:外ROM读选通信号。RST/VPD:复位/备用电源。 在Vcc掉电情况下,接备用电源。 EA/Vpp:内外ROM选择/片内EPROM编程电源。P0、P1、P2、P3口,共32个引脚。均可作为普通I/O口使用,但P3口均有第二功能。P3.0 RXD 串行输入口 P3.1 TXD 串行输出口 P3.2 INT0 外部中断0(低电平有效) P3.3 INT1 外部中断1(低电平有效) P3.4 T0 定时计数器0 P3.5 T1 定时计数器1 P3.6 WR 外部数据存储器写选通(低电平有效) P3.7 RD 外部数据存储器读选通(低电平有效)P0口有三个功能1外部扩充存储器时,当作数据总线(D0D7)。2外部扩充存储器时,当作低8位地址总线(A0A7)。3不扩充时,可做一般I/O使用,但内部无上拉电阻,作为输入输出时应在外部接上拉电阻。P1只做I/O使用,其内部有上拉电阻。P2有两个功能1扩充外部存储器时,当作高8位地址总线(A8A15)使用。2做一般I/O使用,其内部有上拉电阻。1.4 CS-51存储结构及位处理器由于时间有限,这一部分内容只作简要介绍。从物理结构上划分方法如下:(1).片内程序存储器(2).片处程序存储器(3).片内数据存储器(4).片外数据存储器1.4.1 程序存储器程序存储器用于存放编好的程序及程序中常用的常数,程序存储器由ROM构成,单片机掉电后ROM内容不会丢失。在程序存储器中,MCS-51定义7个单元用于特殊用途。0003H:外部中断0中断入口地址000BH:定时器0中断入口地址0013H: 外部中断1中断入口地址001BH: 定时器1中断入口地址0023H: 外部中断2中断入口地址1.4.1 数据存储器数据存储器用于放程序运算的中间结果、状态标志等。数据存储器由RAM构成,一旦掉电,其数据将丢失。图1-2 片内数据存储器的配置1通用寄存器区在低128的RAM区中,将地址001FH共32个单元设为工作寄存器区,这32个单元又分为4组,每组由8个单元按序组成通用寄存器R0R7。2可位寻址区即可对字节的某一位直接进行处理,如20H.4等。3只能字节寻址的RAM区在30H7FH区的80个RAM单元为用户RAM区,只能按字节存取。堆栈区一般设在些区域。堆栈指针SP指向栈顶单元,堆栈按“先入后出,后入先出”的原则进行。1.4.2 专用寄存器区(SFR)在片内数据存储器的80HFFH单元(高128B)中,有21个单元作为专用寄存器,又称为特殊功能寄存器。如下表。表1-4 特殊功能寄存器(SFR)地址寄存器位地址及位名字节地址D7D6D5D4D3D2D1D0BF7HF6HF5HF4HF3HF2HF1HF0HF0HACCE7HE6HE5HE4HE3HE2HE1HE0HE0HPSWD7HD6HD5HD4HD3HD2HD1HD0HD0HCyACF0RS1RS0OVF1PIPBFHBEHBDHBCHBBHBAHB9HB8HB8HPSPT1PX1PT0PX0P3B7HB6HB5HB4HB3HB2HB1HB0HB0HP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0IEAFHAEHADHACHABHAAHA9HA8HA8HEAESET1EX1ET0EX0P2A7HA6HA5HA4HA3HA2HA1HA0HA0HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0SBUF99HSCON9FH9EH9DH9CH9BH9AH99H98H98HSM0SM1SM2RENTB8RB8TIRIP197H96H95H94H93H92H91H90H90HP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0TH18DHTH08CHTL18BHTL08AHTMODGATEC/TM1M0GATEC/TM1M089HTCON8FH8EH8DH8CH8BH8AH89H88H88HTF1TR1TF0TR0IE1IT1IE0IT0PCON87HDPH83HDPL82HSP81HP087H86H85H84H83H82H81H80H80HP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.01.5 MCS-51工作方式MCS-51单片机的工作方式包括:复位方式、程序执行方式、节电方式和EPROM的编程和校验方式。复位方式:MCS-51的复位电路包括上电复位电路和按键(外部)复位电路,如图1-3所示。图1-3 MCS-51复位电路程序执行方式是单片机的基本工作方式,通常可分为连续执行和单步执行两种工作方式。节电方式:一种能减少单片机功耗的工作方式,通常有空闲方式和掉电方式两种。1.6 MCS-51单片机的时序计算机执行指令的过程分为取指令、分析指令、和执行指令三个步骤,每个步骤又由许多微操作组成,这些微操作必须在一个统一的时钟脉冲的控制下才能按照正确的顺序执行。时钟脉冲由时钟振荡器产生,通常振荡器输出的时钟频率为为616MHz。MCS-51时钟电路如下图所示。图1-4 MCS-51时钟电路图1时钟周期时钟周期也称为振荡周期,即振荡器的振荡频率的倒数,是时序中最小的时间单位。例如:时钟频率为6MHz,刚它的时钟周期应是166.7ns。时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏。2机器周期执行一条指令的过程可分为若干个阶段,每个一个阶段完成一规定的操作,完一个规定操作所需要的时间称为一个机器周期。一个机器周期包含12个时钟周期。3指令周期指令周期定义为执行一条指令所用的时间。MCS-51单片机指令可分为单周期指令、双周期指令、四周期指令三种。只有乘法指令和除法指令是四周期指令。1.6 最小系统最小系统电路图如下图所示:图1-5 最小系统电路图第二章 MCS-51指令系统及汇编语言程序设计2.1 指令系统简介;MCS-51系列单片机指令系统共有111条指令,其中有49条单字节指令、45条双字节指令和17条三字节指令。MCS-51汇编语言指令格式由以下向个部分组成:标号: 操作码 目的操作数 源操作数 :注释其中,中的项表示为可选项例如:LOOP: MOV A,Ri :ARi2.2 寻址方式;所谓寻址方式就是寻找或获得操作数的方式。指令的一个重要组成部分是操作数。由寻址方式指定参与运算的操作数或操作数所在单元的地址。寻址方式的一个重要问题是:何在整个存储范围内,灵活、方便地找到所需要的单元。1立即寻址在立即寻址方式中,操作数直接出现在指令中,指令的操作数可以是8位或16位数。例如:MOV A,#20H;MOV DPTR,#20000H2直接寻址在直接寻址方式中,操作数的单元地址直接出现在指令中,这一寻址方式可进行内存储单元的访问。它包括:特殊功能寄存器地址空间。这也是唯一可寻址特殊功能寄存器(SFR)的寻址方式。例如:MOV TCON,AMOV A, P1内部RAM的低128字节例如:MOV A,76H3寄存器寻址在寄存器寻址方式中,寄存器中的内容就是操作数。例如:MOV A,Ri 。假若Ri中存放在操作数为3BH,则指令执行结果是A=3BH。4寄存器间接寻址在寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储器单元的内容才是操作数。例如:MOV A,R05变址寻址 变址寻址方式是以程序指针PC或数据指针DPTR为基址寄存器,以累加器A作为变址寄存器,两者内容相加(即基地址+偏移量)形成16位的操作数地址,变址寻址方式主要用于访问固化在程序存储器中的某个字节。变址寻址方式有两类:用程序指针PC作基地址,A作变地址,形成操作数地址:A+PC。用数据指针DPTR作基地址,A作变址,形成操作数地址:A+DPTR。6相对寻址相对寻址是以程序计数器PC的当前值作为基地址,与指令中的第二字节给出的相对偏移量rel进行相加,所得和为程序的转移地址。相对偏移量rel是一个用补码表示的8位有符号数,rel的范围为+127128字节之间。例如:SJMP 08HJZ 30H7位寻址位寻址给出的是直接地址。例如:SETB ET02.3 指令系统;单片机指令分为五类:1, 数据传送类;2, 算术远算类;3, 逻辑转移类;4, 控制转移类;5, 位操作。1, 数据传送类(29条)属于这一类的助记符有:MOV 、MOVC、MOVX、XCH、XCHD、PUSH、POP、MOV A ,Rn、MOV Ri ,A Ri DirectDirect #data #data、MOV Rn ,A、MOV Direct1 , ADirect #data#data Direct2 Ri Rn注: 书写时,不要漏掉“,”号。 执行后不影响任何标志位。例:设片内RAM 30H单元内容为40H,第40H单元内容为10H,P1口作为输入口,其输入数据为CAH,求经下列程序段执行后的结果。MOVR0,#30HMOVA,R0MOVR1,AMOV B,R1MOVR1,P1MOV P2,P1、MOVX A , DPTR 、MOVC A ,A+DPTR Ri A+PC、MOVX DPTR , A Ri , A、XCH A ,Rn 、XCHD A ,Ri Ri DPTR Direct、MOVDPT,#DATA16 、PUSH DirectPOP Direct注:由于复位后,SP的值为07H,这就会出现堆栈区与工作寄存器区两者重叠。为此,必须在程序的开头部分通过指令重新定义堆栈区域。如:MOV SP, #70H2、算术运算类(24条形码)属于这一类的助记符有:ADD,ADDC,INCSUBB,DECMUL,DIV,DA、ADD Rn、INCAADDCA ,RiRnSUBB #DATARi DIRECTDIRECTDPTR、DECA、MUL ABRnDIVABRiDAADIRECT3、逻辑运算类(24条)属于这一类的助记符有:ANL,ORL,XRL,CPL,CLRANLA Rn ANLA,RiANLADIRECT ANLA#DATA ANL direct, A ANL direct, #data ORL A, Rn ORL A, direct ORL A, Ri ORL A, #data ORL direct, #data ORL direct, A XRL A, Rn XRL A, direct XRL A, #data XRL A, Ri XRL direct, A XRL direct, #dataCPLACLRARLARLCARRARRCASWAP A4、控制转移类(17条)属于这一类的助记符有:JMP,LJMP,AJMP, LCALL,ACALL,SJMPJZ,JNZ,DJNZ,CJNE、JMPA+DPTR、NOPLJMPaddr16RETAJMPaddr11RETILCALLaddr16、JZrelACALLaddr11JNZrelSJMPrel(地址范围为)DJNZRn ,rel Direct ,rel、CJNERn ,#DATA,relA,#DATA, relRi, #DATA,relA,Direct, rel5、位操作指令(17条)属于这一类的助记符有:JB,JNB,JBC,CLR,SETB,CPL,ANL,ORL,MOV、CLR C、SETBCBITBIT、CPLC、ANLC ,BITBIT/BIT、ORLC ,BIT、MOVC,BITC ,/BITBIT,C、JB BIT ,REL 、JC relJNBBIT ,REL JNC relJBCBIT ,REL、2.4 汇编语言程序设计基础;程序设计语言可分为三类:机器语言、汇编语言、高级语言。机器语言:当指令和地址采用二进制代码表示时,称之为机器语言。CPU直接识别和执行的是机器语言代码,但是,机器语言对人们来说不便于记忆和交流,而且极易出错,故一般不采用机器语言直接编程。但是,对于任何其他语言编写的程序,或者说计算机所执行的每一操作,最终都必须转换为机器语言的指令代码,CPU才能识别和执行。汇编语言:是一种采用助记符来表示的机器语言,即用助符号来代表指令的操作码和操作数,用标号或符号代表地址、常数或变量。这种用助记符编写的程序称为源程序,汇编语言必须翻译成机器语言的目标代码(目标程序),计算机才能执行。高级语言:使用接近人们习惯的自然语言的英语缩写和数学表达的形式编写程序,这样就可以大大提高编程的效率。用高级语言编写的源程序,需要经编译程序翻译成机器语言表示的目标程序,计算机方能执行。2.5 伪指令MCS-51单片机汇编语言中常用的伪指令如下:1ORG(汇编起始地址)格式:ORG 16位地址2END(结束汇编)格式:END功能:汇编语言源程序的结束标志,即通知汇编程序不再继续往下汇编。3EQU(等值)格式:标志符 EQU 数或汇编符号功能:把数或汇编符号赋给标识符,且只能赋值一次。如:LOOP EQU 20H4DB(定义字节)格式: 标号: DB 项或项表功能:将项或项表中的字节(8位)数据依次存入标号所示的存储单元中。使用时,项与项之间用“,”分隔;字符型数据用“”括起来;数据可采用二进制、十六进制及ASCLL码等形式表示。例如:TAB: DB 12H,0AFH,“9”5DW(定义字)格式:标号: DW 项或项表功能:功能:将项或项表中的字(16位)数据依次存入标号所示的存储单元中。例如:TAB: DW 0112H,04AFH6DS(定义存储单元)格式:标号:DS 数字功能:从标号所指示的单元开始,根据数字的值保留一定数量的字节存储单元,留给以后存储数据用。例如:SPACE:DS 107BIT(地址符号命令)格式:标识符 BIT 位地址功能:将位地址赋以标识符。例如:A1 BIT P1.0经以上定义后,A1就可当作位地址来使用。MOV C,A12.6 程序设计实例;程序1:求符号函数。 设X、Y分别为30H、31H单元。分析:由设计要求可以看出,程序有三条路径需要选择,因此需要采用分支程序设计,其流程图如图2-1所示。开始0YX=0?X0?2Y1Y结束YYNN图2-1 符号函数流程图程序如下:ORG 2000HXEQU30HYEQU31HMOVA,XJZLOOP0;A为0值,转LOOP0JBACC.7,LOOP1;最高位为1,为负数MOVA,#01H;A1SJMPLOOP0LOOP1:MOVA,#02H;A2LOOP0:MOVY,A;YASJMP$END程序2:在内部RAM的42H开始的连续单元中存放一组8位无符号数,该数组长度n(n3DH)存放在41H中,找出这组数中的最大数,并将其存入内部RAM的40H单元中。分析:可以先将第一个数组元素送40H单元内,然后将数组中的其它数依次与其比较,若大于40H中的值,则取代它再比较下一位。直到所有元素都比较完。此时40H单元中即为最大值。程序:ORG2000HMOVR0,#42HMOV40H,R0DEC41HLOOP:INCR0MOVA,R0CJNEA,40H,COMPCOMP:JCNEXTMOV40H,ANEXT:DJNZ41H,LOOPSJMP$END程序3:编写程序实现延时1min分析:可利用CPU中每执行一条指令都有固定的时序这一特征,令其重复执行某些指令从而达到延时的目的。程序:DELAY:MOVR7,#0E6H1LOOP1:MOV R6,#0FFH1LOOP2:MOVR5,#0FFH1LOOP3:NOP1NOP1DJNZR6,LOOP32DJNZR6,LOOP22DJNZ R7,LOOP12RET2程序中:内循环一次所需机器周期数=(1+1+2)个=4个。内循环共循环255次的机器周期数=4255个=1020个。次外循环一次所需机器周期数=(4255+1+2)个=1023个。次外循环共循环255次,所以该子程序总的机器周期数=(2551023+1+2)个=260868个。外循环一次所需机器周期数=(260868+1+2)个=260871个。外循环共循环255次,所以该子程序总的机器周期数=(230260871+1+2)个=60,000,033个。因为一个机器周期为12个时钟周期,所以该子程序延时间=26086812/。程序4:编写一个循环闪烁灯程序,用P1口的P1.0P1.7分别控制8个发光二极管的阴极,每次其中某个灯闪烁点亮2次,依次进行,循环不止。程序:MOVA,#0FEHSHIFT:LCALLFLASHRRASJMPSHIFTFLASH:MOVR2,#02HFLASH1:MOVP1,ALCALLDELAYMOVP1,#00HLCALLDELAYDJNZR2,FLASH1RET思考题:题1:编写一个循环闪烁灯程序,用P1口的P1.0P1.7分别控制8个发光二极管的阴极,每次其中两个点亮,依次进行,循环不止。题2:编写一个循环闪烁灯程序,用P1口的P1.0P1.7分别控制8个发光二极管的阴极,由两边向中间的灯依次点亮,循环不止。题3:在内部RAM的42H开始的连续单元中存放一组8位无符号数,该数组长度n(n3DH)存放在41H中,找出这组数中的最小数,并将其存入内部RAM的40H单元中。第三章 C51及程序设计3.1 C语言的重要知识点3.1.1 C的数据类型C语言中数据有常量和变量之分,它们分别属于以下这些类型。常量:在程序运行过程中,其值不能改变的量。如3、-1、a、经#define PRICE 30后,PRICE为一常量,其值为30。变量:其值可以改变的量。一个变量应该有一个名字,在内存中占据一定的存储单元,如图。 3a变量名变量值存储单元C语言规定变量必须先定义后使用。标识符只能由字母、数字和下划线三种字符组成。且第一个字符必须为字母或下划线。习惯上,符号常量名用大写,变量名用小写,以示区别。数据类型定义如基本类型整型整形常量:即整常数。12、0x12整形变量:定义符为int、signed int、Unsigned int、signed short int、Unsigned short int、long int、Unsigned long int字符型字符型常量:用单撇号括起来的一个字符。a、?字符串型常量:用双撇号括起来的一个字符。“china”、“ 123.2”字符型变量:定义符为char实型实型常量:分为十进制小数形式和指数形式12345、123e3实型变量:定义符为float、double、long double枚举类型构造类型数组类型结构体类型共用体类型指针类型空类型一、 算术运算符和算术表达式C的运算符有以下几类:1算术运算符: (+ - * / %)2关系运算符: ( = = = = !=)3逻辑运算符: (! & |)4.位运算符: ( | (异或) &)5赋值运算符: ( = )6条件运算符: (? :)7逗号运算符: ( , )8指针运算符: (* &)9.自增、自减运算符: (+ -)二、逗号运算符和逗号表达式逗号表达式形式:表达式1,表达式23.1.2 C语句一、C语句可以分为以下5类1控制语句:C语言有9种控制语句,它们是:(表示内嵌的语句)(1).ifelse(2).for()(3).while()(4).dowhile()(5).continue (6).break 结束整个循环(7).switch 结束本次循环(8).goto(9).return2函数调用语句 如:printf(“This is a C statement”)3表达式语句 如:赋值语句4空语句 如: ; 二、数据的输入输出C语言函数库中有一批“标准输入输出函数”,它们是:putchar(输出字符),getchar(输入字符),printf(格式输出),scanf(格式输入),puts(输出字符串),gets(输入字符串。三、选择结构程序设计1If语句有三种形式If(表达式)语句 如:if(xy)printf(“%d”,x);If(表达式) 语句1 else 语句2 如:if(xy)printf(“%d”,x); else printf(“%d”,y);If(表达式1) 语句1 else if(表达式2) 语句2else if(表达式3) 语句3else 语句n2条件运算符:格式: 表达式1?表达式2:表达式3如:max=( a b )? a : b 3.switch语句格式:switch(表达式)case 常量表达式1:语句1 case 常量表达式2:语句2case 常量表达式n:语句ndefault :语句n+1四、循环控制语句构成循环语句的语句有:1Goto语句和if语句构成循环;P1072.while语句格式:while(表达式) 语句 P1073.do-while语句格式:do 循环体语句 While (表达式);P1094.for语句格式:for(循环变量赋值初值;循环条件;循环变量增值)语句 如:for(i=1;i=100;i+) sum=sum+i;五、数组一维数组定义方式:类型说明符 数组名常量表达式;如:int a10二维数组定义方式:类型说明符 数组名常量表达式 常量表达式; 如: float a23,b33六、函数一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由函数完成的。一个C程序可由一个主函数和若干个函数构成。由主函数调用其它函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。、一个源程序文件由一个或多个函数组成。、一个C程序由一个或多个源程序文件组成。、C程序的执行从main函数开始。、所有函数都是平行的,即在定义函数时是互相独立,一个函数并不从属于另一个函数。、调用库函数的方式为:#include #include 、函数的调用方式为:把函数语句作为一个语句,如:float add(float x, float y);3.2 C51与C的区别一、如何调用单片机内部资源#include二、存储区的描述变量的声明中还包括了对存储类型的指定,即指定变量存放的位置。存储区描述DATARAM的低128字节,可在一个周期内直接寻址。由于为寻址最快,所以应该把经常使用的变量放在DATA区。例:unsigned char data system_status=0;char data inp16;BDATADATA区可字节,位混合寻址的16字节区。IDATARAM区的高128字节,必须采用间接寻址。XDATA外部存储区,使用DPTR间接寻址PDATA外部存储区的256字节,通过P0口的地址对其寻址,使用指令MOVX Rn,需要两个指令周期。CODE程序存储区使用DPTR寻址,程序存储区的数据是不可改变的。如固化表格的声明会表示为:uc code moto_back=0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11;三、如何定义字#define uc unsigned char#define ui unsigned int#define hi (65536-1500)/256)#define lo (65536-1500)%256)四、如何定义位sbit RS=P20;sbit RW=P21;sbit E=P22;五、如何定义表格uc code moto_back=0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11;六、如何进入中断中断函数的完整语法及示例如下:返回值 函数名 interrupt n using n如:void timer0() interrupt 1 using2 五、汇编与C51的混合编程#pragma asm汇编行#pragma endasm同时还需进行以下设置:这种方法是通过asm与endasm告诉C51编译器,中间行不用编译为汇编行,例如:#include sbit LED=P10;void delay();void main()LED=0;while(1)LED=LED;delay();LED=LED;delay();void delay()#pragma asmMOVR7,#0E6HLOOP1:MOV R6,#0FFHLOOP2:NOPNOPDJNZR6,LOOP2DJNZ R7,LOOP1#pragma endasm六、C51使用规范为了增强程序的可读性,便于源程序的交流,减少合作开发中的障碍,应当在编写C51程序时遵循一定的规范。1、开始的注释。/*/*公司名称*/*模块名:LCD模块,LCD型号:LCM1602*/*创建人:刘二,日期:2010-9-25*/*修改人:王五,日期:2010-9-25*/*功能描述:*/*其他说明:*/*版本:*/*/2、函数开头的注释内容/*/*函数名:*/*功能描述:LCD初始化*/*调用函数:*/*全局变量:*/*输入:*/*输出:*/*返回:*/*创建人:刘二,日期:2010-9-25*/*修改人:王五,日期:2010-9-25*/*/3、程序中的注释内容一般为方便理解的注释等。3.3 C51程序设计实例第四章 MCS-51单片机的中断系统4.1 中断的概念中断是指在CPU正在处理某项事务的时候,如果外界或内部发生了紧急事件,要求CPU暂停正在运行的工作转而去处理这个紧急事件,待处理完后再回到原来被中断的地方,继续原来被打断了的工作过程。如图4-1所示。实现这种功能的机构称为中断系统,产生中断的请求源叫中断源。MCS-51单片机允许有多个中断源,当有多个中断源同时请求中断时,通过设置优先级来处理出现的问题。处理完优先级高的中断请求后再来处理优先级低的中断。MCS-51单片机内部有五个中断源。主程序高级中断低级中断返回返回中断中断图4-1 中断嵌套流程图4.2 MCS-51中断系统结构及中断控制MCS-51系列单片机有5个中断源,包括2个外部中断源和3个内部中断源。2个外部中断源是外部中断点0(INT0)和外部中断1(INT1),3个内部中断源是定时器/计数器0溢出中断、定时器/计数器1溢出中断、串行口的发送和接收中断(TI和RI)。8051单片机的中断系统如图4-2所示。图4-2 8051单片机的中断系统图1,入口地址最高最低外中断0矢量(/INT0):0003H定时器0(T0): 000BH外中断1矢量(/INT1):0013H定时器1(T1): 001BH2、与之有关的几个寄存器IE,IP,TCON,TMOD,、中断允许寄存器IEEA:总允许位EA0 禁止一切中断EA1 各中断分别由各自允许位控制EXO:INTO中断允许位EX00 禁止外部中断0中断EX01 允许外部中断0中断ETO:T0中断允许位EX1:INT1中断允许位ET1:T1中断允许位ES:串行口的中断允许位 以上各种均为“0”:禁止中断“1”:允许中断。当CPU复位时,IE被清零。、中断优先极寄存器IP置1为高优先级,清0为低优先级。、定时/计数器控制寄存器TCONTR0:定时器/计数器0运行控制位,TR0可由软件可清0,置1。TR01 计数器接通工作。TR1=0 计数器停止工作。TF0:定时器/计数器0溢出中断请求标志。当T0溢出时,由硬件置TF0为1,申请中断。当CPU相应中断后,由硬件将TF0置0。ITO:外中断0(/INT0)触发类型控制位。由软件置位或复位。IT0=0,外中断0为电平触发方式(低电平触发)。IT1=1,外中断0为边缘触发方式(下降沿触发)。IEO:外部中断0请求标志位。当引脚INT0上出现中断请求信号时,由硬件将IE0置1向CPU申请中断。当CPU响应中断后,由硬件将IE0清0(指边沿触发方式控制位,电平触发方式时IE0不能由硬件清0)。、SCON寄存器SCON为串行口控制寄存器,其中的低两位用作串行口中断请求标志。格式如下:TIRIRI:串行口接收中断请求标志。在串行口方式0中,每当接收到第8位数据时,由硬件置位RI;其它方式中,当接收到停止位的中间位置时置位RI。注意当CPU执行串行口中断服务程序时RI不复位,必须由软件将RI清0。TI:串行口发送中断请求标志位。4.3 MCS-51中断响应过程在下列任何一种情况存在时,中断请求将被封锁。1CPU正在处理同级的或高一级的中断。2当前周期不是执行当前指令的最后一个周期,即要保证把当前的一条指令执行完才会响应。(有些指令需要多个机器周期才能执行完)3当前正在执行的指令是返回(RETI)指令或对IE、IP寄存器访问的指令,执行指令后至少再执行一条指令才会响应中断。CPU执行中断报务程序之前,自动将程序计数器PC内容(断点地址)压入堆栈保护,然后将对应的中断矢量地址装入PC中,使程序转向该中断矢量地址单元中,开始执行中断服务程序。通常在中断矢量地址单元放一条跳转指令,以转到真正的中断服务程序的起始地址。中断服务程序的最后一条指令必须是中断返回指令RETI,CPU在执行这条指令后,就可以再响应同级的中断请求。另外在中断服务程序中,应该注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器中的内容。4.4中断响应后中断请求的撤除中断源提出中断请求后,在CPU响应此中断请求后,该中断源的中断请求在中断返回之前应当撤除,以免引起重复中断,被再次响应。对于边沿触发的外部中断,CPU在响应中断后由硬件自动清除相应的中断请求标志IE0和IE1。(即不需要人为的清除请求标志位)对于电平触发的外部中断,CPU在响应中断后其中断请求标志IE0和IE1是随外部引脚INT0和INT1的电平变化的,CPU无法直接控制,因此需要在引脚处外加硬件,使其及时撤消外部中断请求。对于定时器溢出中断,CPU在响应中断后就由硬件消除了相应的中断请求标志TF0和TF1。(即不需要人为的清除请求标志位)对于串行口中断,CPU在响应中断后并不自动清除中断请求标志RI或TI,因此必须在中断服务程序中用软件来清除。(即需要人为的清除请求标志位)4.5 中断系统应用实例例:通过P1.7口点亮发光二极管,然后外部输入一信号,则发光二极管亮、暗交替。1、汇编形式LED BIT P1.7ORG0000HSJMPSTARTORG 0003HSJMPINT0ORG 0050HSTART:MOVSP,#68HSETBEA/开外部中断SETBIT0/外部中断0低电平触发SETB EX0CLR LEDSJMP $INT0:DPLLED/取反
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 任务书类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!