单片机原理与应用技术第3章单片机C语言编程技术.ppt

单片机原理与应用技术第3章单片机C语言编程技术.ppt

  【例3-13】 设x位于片内RAM 30H单元,y位于片内RAM 40H单元。编程实现 y=   解: main(){ char x,*R0,*y; R0=0×30; y=0×40; { x=* R0; if(x0) *y=1 if(x= =0) *y=x/2 if(x0) *y=x } }   【例3-14】 采用递归调用求正数n的阶乘程序如下: int factorial(n) int n; { int result; if(n= =0) result=1, else result=n*factorial(n--1); result(result); } main() { int x; for (x=0;xb;++x) printf(%d !=%d\n,x,factorial(x)); }   程序运行结果: 0!=1 1!=1 2!=2 3!=3 4!=24 5!=120   【例3-15】 使用switch语句的分支程序。 switch (n){ case 0; vr0 ();break; case 1; vr1 ();break; case2; vr2 ();break; case m vrm ();break; default; break; }   相应汇编分支程序为: MOV A,#data MOV DPTR,#TABLE JMP @A+DPTR ;AJMP是2字节指令,A中内容为偶数 TABLE: AJMP V0 ;A=0转 AJMP V1 ;A=2转 AJMP V2 AJMP V n 3.5.3 循环结构设计   C51提供的循环语句有三种:while语句、do_while语句和for语句。   1.while语句   while语句的格式为: while(表达式) { 语句 /*循环体*/ } 表达式是能够继续循环的条件,用大括号括起来的语句是循环体。如果表达式的值为“真”,就重复执行循环体语句;如果表达式的值为“假”,则退出循环体,执行下一条语句。while语句的流程图如图3-3所示。   头文件absacc.h中的函数有: CBYTE (访问code区,字符型,char) DBYTE (访问data区,字符型) PBYTE (访问pdata区或I/O口,字符型) XBYTE (访问xdata区或I/O口,字符型) CWORD (访问code区,整型,int) DWORD (访问data区,整型) PWORD (访问pdata区或I/O口,整型) XWORD (访问xdata区或I/O口,整型) 3.3.3 位寻址变量的C51定义   Franklin C51编译器对位寻址变量的定义方法有3种。   第一种,支持“bit”数据类型,例如: bit lock; /*将lock定义为位变量,位地址由C51安排在可位寻址的bdata区*/ bit number_pointer; /*将number_pointer定义为位变量*/   第二种,先定义变量的数据类型,再用“sbit”定义其中的位,例如: bdata int ibase;   /*将ibase定义成bdata整型变量*/ sbit my9=ibase^9; /*my9定义为ibase的第9位*/ sbit my14=ibase^14; /*my14定义为ibase的第14位*/   第三种,使用头文件reg51.h和sbit定义符,这种方法用于定义特殊功能寄存器SFR中没有位名字的可寻址位。头文件reg51.h由C51建立,该文件中不仅对所有可寻址位进行了sbit定义,还对所有SFR进行了sfr定义。例如: #includereg51.h sbit P0_3=P0^3; /*定义P0_3是P0口的第3位*/ sbit ac=ACC^7; /*定义ac是A的第7位*/   也可以在头文件reg51.h后直接用位名,例如: #includereg51.h EA=1; /*IE.7赋值为1*/ EX0=1; /*IE.0赋值为0*/   也可以不用头文件reg51.h,先用sfr定义寄存器的地址,再用sbit定义位。例如: sfr PSW=0×d0; /*定义PSW地址D0H*/ sfr RS1=PSW^4; /*定义RS1是PSW的D4位*/ sfr RS0=PSW^3; /*定义RS0是PSW的D3位*/ 3.3.4 C51的运算符定义   1.C51的基本算术运算符   C51的基本算术运算符有5种:+(加或

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档