第五章单片机C语言程序设计和仿真调试
SR 无关,但一般予与相中断相符合的名称。 无输入参数无返回参数 61 5.3.2KeilC51函数-2、指定工作寄存器区 当需要指定函数中使用的工作寄存器区,使用关 字using后跟一个0到3 其他中断函数的定与此似。中断函数具体是哪个中 断的函数,与中断号有关,而与函数名如UART1_I指明是串行口1的中断,using1指明采用工作 寄存器区1区,using1在中括号中,明部分可省略。的数, 着工作寄存器0 到3区。 例如,在下面的函数中使用了工作寄存器1区(相当 于PSW.40sing1 /*中断服程序的代*/ 上述代声明了串行口1中断服函数。其中, interrupt41的中断函数4号中断可以声明如下 voidUART1_ISRvoidinterrupt4u2KeilC51函数1、中断函数声明 5.3.2KeilC51函数1、中断函数声明 例如,串行口,PSW.31) unsignedcharGetKeyvoidusing1 /*用程序代*存器中的 一个。Using是一个可 ,可以不用。不用,由 器自 一个寄存器。 60/78 5.3.与中断函数的名字无关。 其中usingn用于 片机不同的寄存器,n 03的常整型数,分 中4个不同寄中断号来声 明。中断号告 器中断服程序的入口地址。 也就是,C51通中断号来区分各个不同的中断 ,而/ 指定工作寄存器区 62 程序状态标志寄存器PSW8位 RS1,RS0(PSW.4PSWoid函数名(void)interrupt中断号usingn 中断函数通使用interrupt关字和23PWM异常检测中断00BBH 10外部中断INT20053H 59 中断服函数的一般形式 v器中断00ABH 8串行口UART2中断 0043H22PWM中断00B3H 9SPI中断004BH.3)工作寄存器 控 制位,其 介后内容。 OV(PSW.2)溢出志位。指示运算程中是否 生了9T3溢出中断009BH 6LVD中断0033H20T4溢出中断3H 7PCA中断003BH21比较中断008BH 4串行口UART1中断 0023H18串口4中断0093H 5ADC中断002BH13H 2外部中断INT10013H16外部中断INT40083H 3T1溢出中断001BH17串口3溢出,在行指令程中自形成。 位号D7D6D5D4D3D2D1D0 符号 CYACF0RS1 RS0O中断INT00003H11外部中断INT3005BH 1T0溢出中断000BH12T2溢出中断006单片机的中断号及 中断服务程序入口地址如表5-3 中断号中断源入口地址中断号中断源入口地址 0外部rrupt关字和中断号031来声明。 中断号告 器中断服程序入口地址。 IAP15W4K58S4VF1P RS1 RS0OV P(PSW.0)奇偶志位 累加器ACC中1的个数为偶数,P0;C51函数 C51的函数声明ANSIC作了展,具体包括 1、中断函数声明 中断函数通使用inte式参数表 局部量定 函数体句 函数用的一般形式 量函数名 参数表 5.3.2Keil函数 。 5.3.1 函数的定义与调用 5.3函数 58 函数定的一般形式 函数返回 型函数名形否则P1。每个指 令周期都由硬件来置“1”或清“0”。在具有奇偶校 验的串行数据通信中,可根据P设、break、continue和return语句 57 两种函数KeilC51定的准函数和用自定函数的位置。一般形式 1 return表达式; 2 return; 5.2.5goto置奇偶校验位。 P 63 工作寄存器组的选择 PSW寄存器中的RS1和RS0两位合决定当前使用的循, 下一次循,一般形式 continue; return句用于止函数的行,并控制程序返回到 用句也可以用于跳出循 句,其一般形式 break; continue是一种中断句,其功能是中断本次 5.2.4 循环语句 56 goto句是一个无条件向句,其一般形式 goto句号; break工 作寄存器。可通位操作指令修改RS1和RS0的内容 , 不同的工作寄存器。 RS1 PSW.4 采用for句构成循 构的一般形式如下 for初 定表达式;循条件表达式;更新表达式 句体; while句构成循 构的一般形式如下 do 句体; while(条件表达式); 3for句 while(条件表达式) 句体; 5.2.4 循环语句 55 2do-while句 采用do- RS0 PSW.3 工作寄 存器 工作寄存器地址 000R7R0 的地址07H00H 01常量表达式2 句体2; break; 1while句 利用while句构成循 构的一般形式如下 开关语句 54 switch(表达式) case常量表达式1 句体1; break; case的句。 case常量表达式n 语句体n; break; default 语句体d 5.2.31R7R0 的地址0FH08H 102R7R0 的地址17H10H 113R7R0 的地址1FH18语句体m; Else 语句体n; 5.2.2 条件语句 53 开关句也是一种用来 多条件分支式1) 句体1; elseif(条件表达式2) 句体2; elseif(条件表达式m) 2 条件语句 52 2if(条件表达式) 句体1; else 句体2; 3.if(条件表达H 表3-1工作寄存器组选择 18H1FH 10H17H 08H0FH 00H07H 3区R7R0,使用关字“if”构成。 C51提供了三种形式的条件句。 1if(条件表达式) 句体; 5.2.可以使用空句。 5.2 Keil C51程序的语句 5.2.1 表达式语句 51 条件句又称分支句;”构成, 种句称空句。空句不行具体的作。程 序 ,有需要用到空句。例如,使用循 句延程序中的循体内 2区R7R0 1区R7R0 0区R7R0 64 5.3.2KeilC51函数2、指式句是最基本的一种句。在表达式的 后面加一个分号“;”就构成了表达式句。 表达式句也可以由一个分号“a在xdata中定的char型指 量 5.1.4运算符和表达式 10强制类型转换运算符 50 表达定存储模式 用可以使用small,compact及large明存模式 。 例如 voidfun形式 量(型)表达式 如pxdatacharxdata*0 x3000; //pxdat运算符 强制型 运算符的作用是将表达式或 量的型强制 成括号内所指定的型。 强制型 运算符的一般使用的中括号内的 值0 x7ff0,指出了定义数组 XBYTE首地址的偏移地址 49 10强制型 1voidsmall 提示small明的函数内部量全部使用内部RAM 。关的、常性的、耗的地H aPORTA;//端口7ff0H到量a 定XBYTE数的首地址是0 XBYTE0 x7ff0 voidmainvoid chara; PORTA0 x81;//*出81H到端口7ff00 x7ff0 //其中,PORTA程序定的I/O端口名称,内的内容 //7ff0HPORTA的地址方可以 声明, 以提高运行速度。 2、指定存储模式 65 u用compact明,函数参数和局部量位于C51预定义指针访问外部扩展I/O口 例如 include definePORTAXBYTEata*0 以XBYTE例介上述宏定使用方法,XBYTE使用格式 XBYTE地址 方法2使用问外部扩展I/O口 48 defineXBYTEunsignedcharvolatilexdpdata定 的展数据RAM中。 u用large明,函数参数和局部量位于xdata定 的展数据RAM volatile修饰了的变量随程序的执行其值会被改变, “易变” 方法2使用C51预定义指针访ata*0 defineXBYTEunsignedcharvolatilexdata*0atiledata*0 definePBYTEunsignedcharvolatilepd中。 5.3.2KeilC51函数3、函数的重入 一个可重入函数,来,就是可以被中断的函数,即 可charvolatilecode*0 defineDBYTEunsignedcharvol 文件做了如下定,利用些定可以方便地 外部I/O端口。 defineCBYTEunsigned.4 运算符和表达式 9指针和地址运算符 了方便 外部存器及I/O端口,在C51的absacc.h以在个函数行的任何刻中断它,可重入函数可 以被 用。 或可重入函数在片机系中容易生 ,因 片机和使指指向8255的PA口地址7FF0H i*com8255;//PA端口内容到量i 47 5.1 charxdata*com8255;//定指 chari; com82550 x7FF0; //PC不同,PC使用用堆 参数,且静 量以外的内部量都在堆中; 而片机一般使用寄存器 参数,内部行接口扩展方法,309页图8-52 46 方法1使用自定义指针访问外部扩展I/O口 端口程序PTR,7FF3H MOVA,81H MOVXDPTR,A 具体命令介绍见见第1版8.3节 并//81HPA,PB口都是模式0,直接出,PC口直接入 以上C程序相当于下面的 言程序 MOVD量一般在固 定的RAM中,函数重入会破坏覆盖上次用的数据 。 可在函数前声明函数的不可重入性不它所指向的 量地址之的关系,C言有运算符取内容*和取地 址//出命令字81H到命令口寄存器 条件运算符 43 9指和地址运算符 量的指就是 量的地址,而存放量地址的 量称指 量。表示指 量和表达式的;当 表达式的假(0), 将表达式2的作整个条件表达式的。 5.1.4 运算符和表达式 8可中断性。若声 明不可重入中断的, 函数用程中将不可被 中断。 typedefunsigned表达式1表达式2 其功能是,首先算 表达式的,当 表 达式的真(非0),将表达式1的作整个 条件。它要求有三个运算象,使用它可以将三个表达式 接构成一个条件表达式。条件表达式的一般形式 表达式算符和表达式 7逗号运算符 42 8条件运算符 条件运算符()是一个三目运算符,用于条件求 charuchar; pragmadisable/*DisableInterrupts*/ uchd3;//第2行,a1的8 a2b,c--,d3;//第3行,a2的4 5.1.4 运符和表达式 3关系运算符 34 4 运算符 运算符包括与(//第1行 a1b,c--,的先;但前四种的先高 于后两种。用关系运算符将两个表达式接起来即构 成关系表达式。 5.1.4 运算ardfuncucharp1,ucharp2 returnp1*p2p2*p1; 66 )、等于 ()和不等于()六种。 前四种关系运算符具有相同的先,后两种关 系运算符也具有相同2算术运算符 33 3关系运算符 关系运算符用于比运算。包括大于()、小 于()、小于等于(用i之后再使i加1。在 用中,尽可能使用后者的 方式,即i的形式。 5.1.4 运算符和表达式 pragma的作用是设定编译器的状态或 者指示编译器完成一些特定的动作 5.3.2KeilC5,要注意运算符的位置。例如,i和i的意完全 不同,前者在使用i之前先使i加1,而后者是在使 表达式中必要的地方采用 括号来改 先,括号的先最高。 在使用自增()运算符和自减(--)运算符 次是乘法(*)、除法(/)和取余( )运算符,加法()和减法(-)运算符的先 最低。需要,可在算1函数3、函数的重入 可用以下两种方法解决函数的重入及不可中断 第一种方法 在相的函数前使用运算符 32 算一个算表达式的 ,要按照运算符的 先高低序行。算运算符中,取 (-)的 先最高,其,舍去小数部分。 用算运算符将运算象接起来的式子就是算 表达式。 5.1.4 运算符和表达式 2算术“pragmadisable”声明,即只允主程 序或中断之一用函数函数用后不再被中断。 第二种或称模 运算,)、自增()、自减(--)共七种。 在除法运算中,如果是两个整数相除,其果 整数31 2算运算符 算运算符用于各数运算。包括加()、 减或取 (-)、乘(*)、除(/)、取余(表达式,在 表达式的后面 加一个分号“;”便构成了 句。 5.1.4 运算符和表达式 1赋值运算符 方法 将函数明可重入的。如下 voidfuncparam...reentrant...; 因符,它的作用是将一 个数据的或表达式的 一个量。利用 运算符将一个量与一个表达式接起来 的式子成 和地址运算符、强 制型 运算符等。 5.1.4 运算符和表达式 30 1 运算符 符号“” 运算以分 运算符、算运算符、关 系运算符、 运算符、位运算符、复合 运算符 、逗号运算符、条件运算符、指为单片机内部堆栈空间的限制,C51没有像大系统那样使 用调用堆栈 一般在C语言中调用过程时,会把过的后面加一个分号“;”就构成 了一个表达式句。C51程序就是由多个表达式句 构成的句集合。 运算符可序行特定算或 操 作的符号,表达式是由运算符及运算象所成的 具有特定含的一个式子。 在任意一个表达式unsigned char数据的指,但pt本身的保存位置却不同。 存储器指针 29 运算符是告 程程的参数 和过程中使用的局部变量入栈。 Keil C51编译后将生成一个可重入变量堆栈,然后就可以 xdata*xdatapt; //pt被保存在外部RAM中 上面的句都声明pt指向保存在外部RAM中ignedcharxdata*datapt; //pt被保存在内部RAM中 unsignedchar前加存 型 符,例如 unsignedcharxdata*pt; //pt本身依存模式存放 uns模拟通过调用堆栈传递变量的方法。 67 这样函数重入时,不 用担心变量数据被覆盖的问题。 5.3.8 5.1.3 数据类型 4.关于指针数据类型 象一般指一可指定一个存器指的保存存区 ,即在指声明x51CompilerUsersGuideLanguage ExtensionsPointers 2型 存储器类型是在编译时 需要的,既已指出,所以 指针只需存偏移量即可, 参考KeilHelpC2KeilC51函数3、函数的重入 了提高效率,C51没有提供种用堆,而是提供一种 。每个程被定ata pdataxdataCode 编码值0 x000 xFE0 x010 xFF 存放数据的存器, 说明时即指定了存储类型, 例如 4.关于指针数据类型 存储类型 Idata/data/bd同一个空,用于存放局部量。 程中的每个量都存放在个空的固定位置。当 用个程,会致量被覆盖。 在某些存放,只需1或2个字就了,因只需存放偏移 量。 存储器指针指定存储区指针ata区中char型数据 intxdata*pow; //pow指向外部RAM的int型整数 种指字存放存器型,存器地址高8 位偏移量和低8位偏移量。 chardata*str; //str指向d 用中,非重入函数是不可取的。因,函数 用可能会被中断程序中断,而在中断程序中可能再次用 个函数,所data、data和idata中。 5.1.3 数据类型 4关于指针数据类型 27 一般指用3个nericptrstoredinidata*/ 些例子指向可能保存在任何存区中的量但是 指分保存在xr;/*genericptrstoredindata*/ long*idatavarptr;/*ge以C51允将函数定成重入函数。 重入函数可被 用和多重用,而不用担心量被覆盖, 因C51可模生成一tastrptr;/*genericptrstoredinxdata*/ int*datanumptint*numptr;/*intptr*/ 可用存 型 符指定一个通用指的存区如 char*xda 一般指的声明和使用均与准C相同,同可以 明指的存 型。 char*s;/*stringptr*/ 个可重入量堆随存模式small, compact,large不同,堆可在不同的存器区idatar*/ int*numptr;/*intptr*/ 5.1.3 数据类型 4关于指针数据类型 26 。 一般指的声明和使用均与准C相同,同可 以明指的存 型(下)。 char*s;/*stringptGenericPointer和存器指MemorySpecific Pointer,指定存区指,pdata, xdata,每次函数用的局部量都会被独保存。因 些堆是模的,重入函数一般都比大,运址,个地址不可以是 量的地址,也可以是其他数据构的地址。 KeilC51 器支持两种指 型一般指 Small, Compact, large 的存储模式。 25 4关于指数据型 指 量的是一个地下面设置参数 在此置使用 晶振的率 针对目标硬件设置工具选项 MemoryModel右侧下拉 选择行起来也比 慢。 不常使用 68 5.3.2KeilC51函数3、函数的重入 由于一般可重入函数sforTargetTarget1对话框界面。在该界面中, 点击Target标签。在该标签界面中,按并 右,出浮菜 。浮菜中中OptionsforTargetTarget1... 。n出现Optionz右侧框输入6, 其余按默认设置。 4-3汇编语言程序调试 Project窗口,中Target1,由主程序和中断用即 用 ,所以通常中断程序使用与主程序不同的工作寄存器 。 另外,可重入函数,MOVXDPTR 数据 存模式Small,large,Compact 24 在XtalMH 用MOVXRi。 u在large模式下,函数参数和局部量位于xdata定 的展数据RAM中 用在相的函数前面加上开关 pragmanoaregs,以禁止 器使用 寄存器址 ,可生成不依于寄存器M007FH中; u在compact模式下,函数参数和局部量位于pdata 定的展数据RAM中. 指定 缺省存 型; u在small模式下,函数参数和局部量位于由data定 的片机片内数据RA模式Small,large, CompactOptionsforTargetTarget1..的代。 所以不依于寄存器的函数可被其他使用了不同 的寄存器的多个函数用。 externcharfu量名表; 23 5.1.3 数据类型 3.存储器类型 数据存型的指定 变量或函数参数存 型可由存edcharxdataarr1044; 5.1.3 数据类型 3存储器类型 量定格式数据型存器型83,0 xC6,0 xA1,0 x86, 0 x8E;//定LED示字模参137 unsignnc; pragmaNOAREGS noaregfunc kfuncfunc;xB0, 0 x99,0 x92,0 x82,0 xFB,0 x80,0 x90,0 x88,0 xint型 unsignedcharcodenumtab160 xC0,0 xF9,0 xA4,0 例如unsignedchardatabuffer; databuffer;//没有指定数据型,默 pragmaAREGS aregfuncusing3 knoaregfuncfunc模式指定缺省型,也 可由关字code、data、idata、xdata、pdata直接声明 指定。 如unsignedchardatabuffer; 22 存 型的指定 量或参数的存 型可由存l C51 器支持的存器型 量定格式数据型存器型量名表; 5.1.3 数据类型 3存储器类型 例; 不常使用 69 本征函数是指 直接将固定的代插入到 当前行,而不是用 言中的ACALL和L区,CODE区(0000HFFFFH地址空间) ,用MOVCADPTR指令访问。 表5-2 KeiM,XDATA区(0000HFFFFH地址空间) ,用MOVXDPTR指令访问。 code 程序存储AM,PDATA区(0000HFFFFH地 址空间),用MOVXRi指令访问。 xdata 外部RACALL指 令 用,从而大大提高函数的 效率。非本征 函数必由ACALL和LCALL指令 用。 Ke部RAM,IDATA区(00HFFH地址空间 ),允许访问全部内部单元。 pdata 分页寻址外部R内部RAM,BDATA区(20H2FH地址空 间),允许位和字节混合访问。 idata 256字节内ilC51提供了9个本征函数,如表5-4所示。使 用本征函数,在源程序中包含文件含有函数 原型声明,低128字节内部RAM,DATA区 00H7FH地址空间,访问速度最快。 bdata 可位寻址型 5.1.3 数据类型 2数据类型 21 3存器型 存储器类型取值范围 data 默认存储器类型80或1 sfr810255 sfr16162065535 表5-1KeilC51编译器支持的数据类,即用 理命令include。 5.4.1 本征库函数 5.4KeilC51库函数 70 函数4967295 float324 1.175494E383.402823E38 sbit11/dlong324-21474836482147483647 unsignedlong3240429ignedint162-3276832767 unsignedint162065535 signe名及定功能明 unsigned char_crol_unsigned char val,unsigignedshort162-3276832767 unsignedshort162065535 sedchar810255 enum8/161or2-128127or- 3276832767 s数byte取值范围 bit11/80或1 signedchar81-128127 unsignnedcharn 将字符型数据val循左移n 位,相当于RL指令。 unsigned int_ir类型 2数据类型 20 KeilC51 器支持的数据型如表5-1所示。 数据类型位数bit字节t_address是位地址。 如sbitEA0 xAF;//第0 xAF位EA 5.1.3 数据02;//定PSW中的OV位 方法3sbitbitnamebit_address; 其中,biol_unsigned int val, unsignedcharn 将整型数据val循左移n位在的地址(0 x800 xff), bit_number是位号(07)。 如sbitOV0 xDbitnamesfr_addressbit_number; 其中,sfr_address是SFR所ber是位号(07)。 如sbitCYPSW7;//定CYPSW的第7位 。 方法2sbit ,相当于RL指令。 unsignedlong_lrol_unsignedlongval, unsfr_namebit_number; 其中,sfr_name必是已定的SFR的名字, bit_num0.0口的名称是P00 19 sbit可以有下面声明方法 n方法1sbitbitnamesase的第15位 sbitCYPSW7;//定CYPSW的第7位 sbitP00P00;//定Pignedcharn 将整型数据val循左移n 位,相当于RL指令。 unsigned char_0;//定flag0flag的第0位 sbitmybit15ibase15;//mybit15ibbase;//定ibasebdata整型量 使用sbit可位址量如下 sbitflag0flagcror_unsigned char val,unsignedcharn 将字符型数据val循右unsignedcharbdataflag;//flagbdata型无符号字符量 intbdatai型,char和SFR而 言是07,int型而言是015,long型而言是031 。如 r; 其中,sfr_name是已定SFR的名字,bit_number是位号 ,其数取决于基址象的数据移n 位,相当于RR指令。 unsigned int_iror_unsigned int val,类型 sbit声明方法 sbitbitnamebdata型量或sfr_namebit_numbe07,int型而言是015,long型而言是031。 18 5.1.3 数据类型 2数据已定SFR的名字,bit_number是位号,其 数取决于基址象的数据型,char和SFR而言是 unsignedcharn 将整型数据val循右移n位 ,相当于RR指令。 unsigned litbitnamebdata型量或sfr_namebit_number; 其中,sfr_name是sbit定位址量要求基址象的存器 型必 bdata特殊功能寄存器除外。 sbit声明方法 sb可用sbit指定其中任意位可位址 量。 需注意使用bdata和sbit定的量必是全局量, 并且用ong_lror_unsigned long val,unsignedcharn 将整型数据va 型bdata,bdata存 型量 位于片内RAM的可位址区,可字 址,或位址, 因此bdata型量sbit位址。定可位址量。定片内RAM 的可址位,或特殊功能寄存器的可址位。 C51 器提供了存片内RAM的可址位,或特殊功能寄存器的可 址位。 17 5.1.3 数据类型 2数据类型 4l循右移n 位,相当于RR指令。 bit_testbit_bitx相当于JBCbit指令 uns地址DPL0 x82,DPH0 x83。 (4)sbit位址。用于定可位址量。可定 8051数据类型 2数据类型 (3)sfr16字址 如sfr16DPTR0 x82; 指定DPTR的址,“”后常数,且个常数必 在特殊功能寄存器的地址范内,即0 x80到0 xFF之。 5.1.3 ignedchar_chkfloat_floatval 并返回浮点数状。 void_nop_vfrsfr_nameint_constant; 如sfrP00 x80; 0 x80P0口的地,共16个字,所以最多只能声明128个 bit型位量。 16 (2)sfr字 址。法如下 soid生一个NOP指令。 表5-4 Keil C51编译器提供的本征库函数 5.4.1本征库函数 .1.3 数据类型 2数据类型 所有bit型量的都被定位在8051片内RAM的可位 址区20H2FH; bittestfuncbitvar1,bitvar2 ... return0; ; 5,也不能定位数。 C51程序中,函数参数和返回也可以是位量。 例 bitfinish_flag071 _chkfloat_函数返回一个unsigned char值包含下面的状态信息 返回值 意址然后用其位的位置来得到一个 的位地址。 15 (1)bit位型。可以定一个位量,但不能定位 指位地址在 00H7FH之,具体地址不定,由 器随机分配。 sbit位址数据型用一个指定的量作基地 (4)sbit位址。 5.1.3 数据类型 2数据类型 bit与sbit的用法区定的bit型量的义 0 标准浮点数 1 浮点数0 2 INF 正溢出 3 -INF 负溢出 4 器,用来控制中断、定 器、数器、串口、I/O及其他部件。 (3)sfr1616位特殊功能寄存器。 以下 几种充数据型 (1)bit位型。bit型量的位地址由 器分配。 (2)sfr特殊功能寄存回函数,种 函数可以定 “空型”。其型明符void 。 14 C51 器除了支持上述数据型外,支持 NaN不是一个数错误状态 5.4KeilC51库函数5.4.2字符判断转换库函数表5-5来表示某个量在内存中的地址。 5.1.3 数据类型 2数据类型 (4)空型 函数用后并不需要向用者返下几种 数 型 构型 合型 13 (3)指 型 指是一种特殊的,具有重要作用的数据型。用 定的一个或多个数据 型用构造的方法来定的。 5.1.3 数据类型 2数据类型 在C言中,构造型有以 72 u字符判断 函数的原型声明在文件CTYPE.H中定。 函数名及定义功能说明 bitisalplong整型、float 浮点型等。 12 2数据型 (2)构造数据型 构造数据型是根据已 (1)基本数据型 基本数据型是不可以再分解其他型的数据型 。如char字符型、int整型、在程序行程中其不断化的量。 使用一个量之前,必先行定。 5.1.3 数据类型 1常量和变量 2数据型hacharc 检查参数字符是否为英文字母,是则返回1,否 则返回0 bitisalnumch、字符型常量如a 引号字符及字符串常量双引号个或多个字符, 如a,Happy)等。 量是一种..*/”之内。 5.1.2 C51程序的一般结构 11 1常量和量 常量包括整形常量、浮点型常量那个程序 文件中的函数都可以使用。 (4)程序句的注放在双斜杠“//”之后,或者放在 “/*....arc 检查参数字符是否为英文字母或数字字符,是 则返回1,否则返回0 bitiscntrlch的量局部量,又称内部量,只有定 它的那个函数才能使用。在函数外部定的量 全局量,又称外部量,在定它的 (2)建一行写一条句,每条句最后必以一 个分号“;”尾。 (3)每个量必先定后引用。在函数内部定 arc 检查参数字符是否为控制字符(值在0 x000 x1f 之间或等于0 x7f)是则返回1,否体的范。了增加程序的可性,采用 方式写。 5.1.2 C51程序的一般结构 10 注意如下几点号“”束,包 含在“”内的部分称函数体。花括号必成出 ,如果一个函数内有多花括号,最外的花括 号函数uptn//n中断号 局部量声明 可行句 注意如下几点 (1)所有函数以花括号“”开始,以花括则返回0 bitisdigitcharc 检查参数字符是否为十进制数字09,是则返回 1,否则返.1.2 C51程序的一般结构 9 //中断函数的 voidISRnamevoidinterr参数声明) 局部量声明 可行句 ...... 函数n(形式参数声明) 局部量声明 可行句 5用 可行句 函数用 无限循 5.1.2 C51程序的一般结构 8 //一般函数的定 函数1(形式回0 bitisgraphcharc 检查参数字符是否为可打印字符不包括空格 ,值域0 x2 函数n的声明 voidmainvoid//主函数 局部量声明//局部量只能在所定的函数内部引命令,用于包含文件、定常数等 全局量声明//全局量然方便 参数,但不宜多 函数1的声明 ......xdata、code、interrupt、reentrant、using 7 理命令//以开的10 x7e,是则返回1,否则返回0 bitisprintcharc 检查参数字符是否为可打印字器支持的关字 bit、sbit、sfr、sfr16、data、bdata、idata、pdata、 e、switch、case、default 3)循 构 for、do、while 2KeilC51 控制关字 1)跳 构 return、continue、break、goto 2)分支构 if、els符(包括空格) ,值域0 x200 x7e,是则返回1,否则返回0 bitispunctcharcextern、const、volatile 5.1.1 关键字 6 5.1.1 关键字 (2)流程n、enum、typedef、sizeof 4)存 关字 auto、static、register、修关字 short、long、signed、unsigned 3)复 型关字 struct、unio 检查参数字符是否为标点、空格或格式字符, 是则返回1,否则返回0 bitislowerchar关字 1数据型关字 1)基本数据型 void、char、int、float、double 2)型,用C言写 的程序具有很好的可移植性。 5 5.1 C51程序的基本语法 1准C言(ANSIC)的c 检查参数字符是否为小写英文字母,是则返回1 ,否则返回0 bitisuppercharc 用C言程,写 、直易、便于 、通用性好。 在控制任比复或者具有大量运算的系中 ,C言 明。由于模化 当程序比复,且没有很好的注 ,使用 言写的程序,可性和可 性会很差, 代的可重用性也比低。 使框架 4 汇编语言和C语言的选择问题 模小的嵌入式用系 ,可以使用 言。因代一般不,且 。 检查参数字符是否为大写英文字母,是则返回1 ,否则返回0 bitisspacecharc 检查参 Keil C51函数 5.4 Keil C51库函数 5.5 预处理命令 5.6 单片机C语言程序ak、continue和return语句 5.3 函数 5.3.1 函数的定义与调用 5.3.2语句 5.2.3 开关语句 5.2.4 循 环语句 5.2.5 goto、bre数字符是否为空格、制表符、回车、换 行、垂直制表符和送纸(值为0 x090 x0d,或 为0 x20式 5.2 Keil C51程序的语句 5.2.1 表达式语句 5.2.2 条件 5.1.2 C51程序的 一般结构 5.1.3 数据类型 5.1.4 运算符和表达 第五章单片机的C语言程序设计及仿真调试 5.1 C51程序的基本语法 5.1.1 关键字 ),是则返回1,否则返回0 bitisxdigitcharc 检查参数字符是否为十六进制数字字符机C言程序中的常用功能 掌握KeilC的程序 掌握IAP15W4K58S4片机C言程序 程 3 微处理器的优化的C 编译器和库参考 2 第五章单片机的C语言程序设计及仿真调试 本章学目 掌握片elp KeilSoftwareCx51编译器用户手册Cx51编译 器--对传统和扩展的8051,是则 返回1,否则返回0 chartointcharc 将ASCII字符的09、af(大小写无书;stc15系列单片机器件手册等 keilvision软件下载及指导手册Helpvision H大学课程中心网站 宏晶官方网站 STC单片机编译汇编/编程烧录/仿真工具说 明C语言程序设 计及仿真调试 disable 任课教师刘忠刘忠国国 山东大学课程中心网站山东84192192 山东大学生物医学工程山东大学生物医学工程 微机原理及单片机接口技术 第五章单片机的关)转换为 十六进制数字,返回值为0H9H,0AH0FH chartolowercharc 将大刘忠国刘忠国 电话电话1876417119718764171197 Tel84Tel