从单片机基础到程序框架(全集 2019pdf版).pdf - 第43页

源代码如下 : #include " REG52.H" //进入主程序 前的区域:头 文件包含 sbit beep_ dr=P3^4; //进入主程序 前的区域:宏 定义 sbit led_d r=P1^6; //进入主程序 前的区域:宏 定义 unsigned l ong i; //进入主程序 前的区域:内 存分配 void main( ) //主程序入口 ,即将进入初 始化区域 { beep_dr=0; //第一…

100%1 / 836
第十节:程序从哪里开始,要到哪里去?
程序从哪里开始,要到哪里去?为了让初学者了 C 语言程序的执行顺序,我把程序分成三个区域
入主程序前的区域,主程序的初始化区域,主程序的循环区域当然,这里三个区的分类暂时没有把中断程
序的情况考虑进去,中断程序的内容我会在后面相关的章节中再详细介绍,这里暂时不考虑中断。
进入主程序前的区域。这是上电后,在单片机执行主程序代码之前就已经完成了的工作包括头文件的
包含,宏定义,内存分配这些工作。这部分的内容可以暂时不用去了解,我会在后面的一些章节中陆续深入
讲解。
主程序的初始化区域。这是上电后,单片机进入主程序后马上就要执行的程序代码,这部分区域的代码
有一个特点,大家也必须记住的就是单片机只执行一次只要单片机不重启不复位,那么上电后这部
的代码只被执行一次。
主程序的循环区域。单片机在主程序中执行完了初始化区域的代码,紧接着就进入这片循环区域的代码。
单片机一直在逐行循环执行这些代码,执行到末尾时又返回到循环区域的开始处继续开始新一轮的执行,
而复始,往复循环,这就是上电后单片机的最终归宿,一直处在循环的状态。
下面我跟大家分析一个程序源代码的三个区域和执行顺序大家先看中文解释部分的内容暂时不用理
解每行指令的语法,有个整体的认识就可以了。此源代码实现的功能是上电后,蜂鸣器鸣叫一声就停止(初
始化区域),然后看到一 LED 灯一直在不停的闪烁(循环区域)
10.1 本节示例程序匹配的单片机驱动电路原理图
源代码如下
#include "REG52.H" //进入主程序前的区域:头文件包含
sbit beep_dr=P3^4; //进入主程序前的区域:宏定义
sbit led_dr=P1^6; //进入主程序前的区域:宏定义
unsigned long i; //进入主程序前的区域:内存分配
void main() //主程序入口,即将进入初始化区域
{
beep_dr=0; //第一步:初始化区域:蜂鸣器开始鸣叫
for(i=0;i<6250;i++); //第二步:初始化区域:延时 0.5 秒左右。也就是蜂鸣器鸣叫的持续时间。
beep_dr=1; //第三步:初始化区域:蜂鸣器停止鸣叫
while(1) //执行完上面的初始化区域,即将进入循环区域
{
led_dr=0; //第四步:循环区域:LED 开始点亮。
for(i=0;i<6250;i++); //第五步:循环区域:延时 0.5 秒左右。也就是 LED 点亮的持续时间。
led_dr=1; //第六步:循环区域:LED 开始熄灭。
for(i=0;i<6250;i++); //第七步:循环区域:延时 0.5 秒左右。也就是 LED 熄灭的持续时间。
} //执行完上面第七步后,单片机又马上返回到上面第四步继续往下执行。
}
上述代码执行顺序分析:
单片机进入主程序后,从第一步到第三步是属于初始化区域,只被执行一次。然后进入循环区域从第
四步执行到第七步,执行完第七步之后,马上又返回上面第四步继续循环往下执行,单片机一直处于第四步
到第七步的往复循环中。可以很清晰的看到,上面 main while(1)关键词就是三个区域的边界分割线。
经过以上的分析,可以看出这三个区域的大概分布如下:
//...进入主程序前的区
void main()
{
//...初始化区域
while(1)
{
//...循环区域
}
}
第十一节:一个在单片机上练习
C
语言的模板程序。
【11.1 一套完整的模板源代码。
先给大家附上一套完整的模板源代码,后面章节练习 C 言的模板程序就直接复制此完整的源代,此
源代码适合的单片机型号是 STC89C52RC,晶振是 11.0592MHz,串口波特率是 9600,初学者只需修改代码
从“C 言学习区域的开始”到“C 语言学习区域的结束”的区域,其它部分不要更改。可复制的源代码
到网上论坛原贴处直接下载本教程的文件压缩包,压文件压缩包后,直接用 WPS 办公软件打可编辑
WPS 文档教程”这个文档,就可以复制里面相关章节的源代码。在网上搜索“从单片机基础到程序框架”就
可以找到论坛原贴的出处,也可以直接到我的个人网站那里下载(www.dumenmen.com)。一套完整的模板
代码如下:
#include "REG52.H"
void View(unsigned long u32ViewData);
void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type);
void SendString(unsigned char *pu8String);
/*---C 语言学习区域的开始。-----------------------------------------------*/
void main() //主函
{
unsigned char a; //定义一个变 a。
unsigned int b; //定义一个变量 b。
unsigned long c; //定义一个变 c。
a=100; //给变量 a 赋值
b=10000; //给变量 b 赋值
c=1000000000; //给变量 c 赋值
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
void View(unsigned long u32ViewData)
{
static unsigned char Su8ViewBuffer[43];
code unsigned char Cu8_0D_0A[]={0x0d,0x0a,0x00};
code unsigned char Cu8Start[]={"开始..."};
static unsigned char Su8FirstFlag=0;
static unsigned int Su16FirstDelay;