《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20
图 10-3 项目设置 首先要在你要仿真的程序项目设置仿真器所使用的驱动,在 Debug 页中选择对应本仿真器的 KeilMon51 驱 动,如图 10 中 1 所示。图 10-3 的 3 是选择在仿真时能使用的工具窗口,如内存显示,断点等等。按 2 进 行图 10-4 中的仿真器设置。设置好串行口号,波特率,晶体震荡器为 11.0592M 时选 38400。Cache Options 为仿真 缓选取后会加快仿真的运行的速度。设好后编译运行程序就能连接仿真器了,连接成功会出现如图 10-
5 的画面。如连接不成功就出现图 10-6 的图,这个时候能先复位电路再按\,还不成功连接的话则 应检查软件设置和硬件电路。图 10-5 中 1 是指示仿真器的固件版本为 F-MON51V3.4 版。点击 3 中小红 点位置时为设置和取消断点,点击 2 则运行到下一个断点。图 10-7 则是变量和存储器的查看。仿真器在 软件大概的使用方法和软件仿真相差不多。
- 46 -
《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20
图 10-4 仿真器设置
图 10-5 仿真器连接成功
- 47 -
《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20
图 10-6 连接不成功提示
图 10-7 变量及内存查看
第八课 语 句(2)-复合语句
曾经在BBS上有朋友问过我{}是什么意思?什么作用?在C中是有不少的括号,如{},[],()等,确实会让一些初入门的朋友不解。在VB等一些语言中同一个()号会有不同的作用,它可以用于组合若干条语句形成功能块,可以用做数组的下标等,而在C中括号的分工较为明显,{}号是用于将若干条语句组合在一起形成一种功能块,这种由若干条语句组合而成的语句就叫复合语句。复合语句之间用{}分隔,而它内部的各条语句还是需要以分号\结束。复合语句是允许嵌套的,也是就是在{}中的{}也是复合语句。复合语句在程序运行时,{}中的各行单语句是依次顺序执行的。以C语言中可以将复合语句视为一条单语句,也就是说在语法上等同于一条单语句。对于一个函数而言,函数体就是一个复合语句,也许大家会因此知道复合语句中不单可以用可执行语句组成,还可以用变量定义语句组成。要注意的是在复合语句中所定义的变量,称为局部变量,所谓局部变量就是指它的有效范围只在复合语句中,而函数也算是复合语句,所以函数内定义的变量有效范围也只在函数内部。关于局部变量和全局变量的具体用法会在说到函数时具体说明。下面用一段简单的例子简单说明复合语句和局部变量的使用。 #include
- 48 -
《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20
unsigned int a,b,c,d; //这个定义会在整个main函数中? SCON = 0x50; //串口方式1,允许接收 TMOD = 0x20; //定时器1定时方式2 TH1 = 0xE8; //11.0592MHz 1200波特率 TL1 = 0xE8; TI = 1;
TR1 = 1; //启动定时器 a = 5;
b = 6; c = 7;
d = 8; //这会在整个函数有效
printf(\{ //复合语句1
unsigned int a,e; //只在复合语句1中有效 a = 10,e = 100;
printf(\{ //复合语句2
unsigned int b,f; //只在复合语句2中有效 b = 11,f = 200;
printf(\}//复合语句2结束
printf(\}//复合语句1结束
printf(\while(1); }
运行结果: 0:5,6,7,8 1: 10,6,7,8,100
2: 10,11,7,8,100,200 1: 10,6,7,8,100 0:5,6,7,8
结合以上的说明想想为何结果会是这样。
- 49 -
《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20
第八课 语 句(3)-条件语句
看到题目后相信大家都会大概对条件语句这个概念有所认识。是的,就如学习语文中的条件语句一样,C语言也一样是\如果XX就XX\或是\如果XX就XX否则XX\。也就是当条件符合时就执行语句。条件语句又被称为分支语句,其关键字是由if构成。C语言提供了3种形式的条件语句: 1: if (条件表达式) 语句
当条件表达式的结果为真时,就执行语句,否则就跳过。 如 if (a= =b) a++; 当a等于b时,a就加1 2: if (条件表达式) 语句1
else 语句2
当条件表达式成立时,就执行语句1,否则就执行语句2 如 if (a= =b) a++; else a--;
当a等于b时,a加1,否则a-1。 3:if (条件表达式1) 语句1 else if (条件表达式2) 语句2 else if (条件表达式3) 语句3 else if (条件表达式m) 语句n else 语句m
这是由if else语句组成的嵌套,用来实现多方向条件分支,使用时因注意if和else的配对使用,要是少了一个就会语法出错,记住else总是与最临近的if相配对。一般条件 语句只会用作单一条件或少数量的分支,如果多数量的分支时则更多的会用到下一篇中的开 关语句。如果使用条件语句来编写超过 3 个以上的分支程序的话,会使程序变得不是那么清晰易读。
第八课 语 句(4)-开关语句
我们学习了条件语句,用多个条件语句可以实现多方向条件分支,但是可以发现使用过多的条件语句实现多方向分支会使条件语句嵌套过多,程序冗长,这样读起来也很不好读。这时使用开关语句同样可以达到处理多分支选择的目的,又可以使程序结构清晰。它的语法为下:
switch (表达式) {
case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; case 常量表达式3: 语句3; break;
- 50 -