为此,出现了用代表指令意义的助记符表示指令。后面的字节称为“操作数”,表示端口的编号是00。将助记符表示的程序变换为包括地址和机器码在内的可执行程序的过程,称为“汇编”。对“宏”助记符指令进行的“汇编”,称为“简易汇编”。利用“宏”作为学习8051汇编语言和C语言的入门阶梯,对初学者是较好的一种选择。......
2023-11-07
本书为避免一开始就进入大量概念性文字的叙述,从而影响读者学习兴趣,所以必需的基础知识读者可自行查阅C语言编程的书籍,我们尽量按照边做边学的特点开始C语言的学习。
【例4-1】 计算a+b的和并输出到P1口
(1)编程 (因为对Keil μVision2的操作在汇编语言学习中已练习过,在此不再重复)
1)创建文件夹D:\c51\exam_ 1c(要求每一个文件夹只放一个项目)。
2)进入Keil C51界面。
3)在文件夹内创建项目exam_1c,与文件夹同名,以方便查找。
4)选择器件Atmel AT89C51。
5)单击主菜单“项目/目标”,进入目标窗口,将晶体振荡频率改为6MHz。
6)单击“输出”,进入输出窗口。将hex项写“√”,表示hex文件输出有效,单击“确定”按钮返回。
7)单击“文件/新建”,进入编辑窗口。单击“文件/另存为”,输入新文件名exam_ 1c.c,所有C源文件名后缀必须为“.c”。
8)在编辑窗口键盘输入C源程序,具体如下:
程序左侧的行号(1、2、3…)是为了解释的方便而设,不用输入。
9)单击工作区Target1(目标),选择Source Group 1(源文件组),单击鼠标右键,在弹出的菜单中选择“Add Files to Group’Source Group 1”,在文件窗口中选源文件exam_ 1c.c,单击“Add”按钮,再单击“Close”按钮关闭窗口。在工作区即显示源文件exam_ 1c.c,表示源文件已加入目标工作区。
10)单击“文件→保存”,保存源文件。
11)在目标工作区选源文件ex-am_ 1c.c,单击鼠标右键,选目标编译,如果源文件无语法错误,则在窗口下方信息栏会显示编译完成,无错误,无警告,并生成HEX文件,如图4-1所示。
图4-1 编译结果信息
若源文件内有语法错误,必须根据信息栏的指示修改源程序,直到文件编译通过为止。程序编译通过是进入仿真运行的必要条件,请注意C语言程序的编辑格式,C语言程序对大小写的编译是有区别的,一般均用英语小写字符。
(2)程序解释
1)第1行,说明程序所用的头文件是<reg51.h>。C语言程序为什么能与8051系列单片机的硬件联系起来呢?就是这个头文件的作用。
在头文件中,对8051的各端口及SFR地址都进行了定义。其中P1必须用大写。对于8051兼容的芯片,第1行的头文件<reg51.h>是必要的。否则C语言编译器将编译出错。
2)第2行,是为了对变量的数据类型unsignedchar进行简化而重新定义了一个uchar,这样输入会简化不少。当然,如果你不用这个新定义直接输入unsigned char也可以。
3)第3行,一般在主程序开始前要空出一行,可以加强注意。
4)第4行,主程序名要用main表示。前面的void表示主函数无返回值。后面的(void)表示无形式参数(简称形参)。关于形参与实际参数(简称实参)后面还要介绍。
5)大括号“{”表示函数的开始,第8条语句的大括号“}”表示函数的结束。对于每一个函数必须成对出现大括号。(www.chuimin.cn)
6)第6行,声明常量a、b的数据类型是uchar型。C语言中规定可连续定义常量和变量,中间可用逗号隔开。每条语句最后必须有分号,表示本语句被执行。
7)第7行,执行a+b并将结果赋予端口P1。“+”号与普通算术符号相同。“=”号在这里并不是等号,而是赋值号。其意义是将a+b的结果赋予P1。赋值号与等号不同,使用时要注意。赋值的意义是将运算结果的值赋予端口P1或赋予一个变量。变量的原有内容被改变为新内容。而数学中的等号是两个量相等,并不改变原有值。P1必须大写。
8)第8行,作为C语言,到第7行语句就已经结束了。与主函数开始的大括号成对出现,结束也必须有“}”作为结束。
(3)编译前检查
程序编辑结束后,必须进行编译,生成hex文件,才能下载到目标机中被执行。由于C语言书写格式要求严格,若不注意,往往会导致编译不能通过。为此,程序编辑结束后,应审查以下几点:
1)数据类型如无特别需要,变量类型应尽量采用unsigned char,其范围为0~255。它只占用一个字节,存取速度快。
2)尽量采用局部变量。
3)主函数放在最后。
4)一般变量用小写英文字符。单片机内部SFR要用大写英文字符。
5)检查所有标识符,关键字是否正确。
6)所有字符除中文注释外,均用ASCII码编辑。
7)函数如无返回值,前面应加void。如无形参,后面应加(void)。
8)变量使用前,必须先声明,并注意不要超出变量范围。
(4)执行
1)软仿真。我们利用Keil C51的软仿真能力,可以很方便地在编辑平台上进行程序的调试,检验程序的执行结果。它无需连接硬件目标系统,因而称为“软仿真”。这为程序的设计者带来了很大方便。
在主菜单中单击“调试→开始”,进入调试状态。
单击“外围端口/I/O-Ports/Port1”,显示P1状态窗口。
单击“W监视&调用堆栈窗口”,在信息栏显示变量表内容,如图4-2所示。
双击变量a的0x00,输入80,系统将自动变为0x50。双击变量b的0x00,输入60,系统自动变为0x3C,如图4-3所示。
单击“跟踪”(调试工具栏),执行到语句8停止。P1=1000 1100=0x8C。“0x”表示十六进制数,转换为十进制数为8×16+12=140,结果正确,如图4-4所示。
图4-2 变量a、b的内容
图4-3 变量a、b的赋值
2)下载到目标机 操作方法与第一章中提到的下载方法相同。可以用串行接口,也可以用USB转换器。执行后,“1”灯灭,“0”灯亮。可由灯的状态得到P1=1000 1100,即灯的状态为●○○○●●○○。
有关零起点学习单片机多语言编程的文章
为此,出现了用代表指令意义的助记符表示指令。后面的字节称为“操作数”,表示端口的编号是00。将助记符表示的程序变换为包括地址和机器码在内的可执行程序的过程,称为“汇编”。对“宏”助记符指令进行的“汇编”,称为“简易汇编”。利用“宏”作为学习8051汇编语言和C语言的入门阶梯,对初学者是较好的一种选择。......
2023-11-07
尽管单片机有许多特点,但仍然属于计算机的范围。这种特殊的语言就是程序设计语言,也就是由一系列语句组成的程序。程序设计语言从原理上可分为机器语言、汇编语言和高级语言三种类型,单片机也不例外。由于汇编语言指令具有直接对应机器语言指令的特点,因而生成的机器代码效率高,执行速度快,至今在单片机程序设计中仍被采用。在众多高级语言中,只有C语言成了应用于单片机系统的高级语言。......
2023-11-07
一种良好的程序设计规则和方法是结构化程序设计。结构化程序设计的基本思想是基于这样的考虑,即任何程序都可以用三种基本结构的组合来实现。这三种基本结构为顺序结构、分支结构和循环结构。在本章的程序讲解和编程练习中较多地使用了“延时程序”子程序,其程序结构常用的有单循环和双循环。由于前文所介绍的程序并没有对“延时程序”子程序延时时间的计算进行讲解,因此,在此结合程序的循环结构讲解延时程序的延时时间计算。......
2023-11-07
以上几方面导致了在嵌入式系统中应用高级语言变得非常必要。如何让读者较容易的具备嵌入式C语言的基本应用技能,从而为大量学习应用实例创造条件是本书的一个特点。嵌入式C语言与被控对象结合紧密,编程除具有标准C语言的特点外,与标准C语言相比,还有如下一些要求:1)对一些关键字进行了一定的扩展。......
2023-11-07
第二行程序的开始地址是02,第二条机器码程序有两个指令有分别是“0B”、“05”,其中02地址单元中存放“0B”指令,03地址单元中存放“05”数据。第三条程序的开始地址是04,第三条机器码程序有三个指令有分别是“12”、“05”、“02”。......
2023-11-07
调试的目的是发现程序的错误。主要是观察工作寄存器、片内RAM单元、SFR及转移的地址位置是否正确,软仿真调试窗口如图3-8所示。2)单击调试菜单上的“外围设备→I/O→Port→Port 1”,I/O接口图标显示P1口状态。经过指令“CPL P1.0”,I/O接口图标显示P1口状态可看到P1.0=0。图3-8软仿真调试窗口4)在调试菜单中单击“单步”按钮,再一下下按动键盘上的“F10”键,程序则一条条执行。......
2023-11-07
单片机是将CPU+ROM+RAM+I/O集成在一块小小的芯片上,这种结构使用非常灵活,可以“嵌入”任何控制对象内,组成嵌入式系统。单片机中的片内程序存储器是一种可编程可擦除的只读存储器。通用计算机的CPU主要是进行高速数据处理。单片机体积很小,可以直接“嵌入”到机器的控制板上,实际上就是将计算机系统嵌入到机器内,组成所谓的“嵌入式系统”。......
2023-11-07
4)单片机C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本身并不依赖于机器硬件系统,基本上不作修改就可根据单片机的不同较快地移植过来。C语言更新维护方便、可移植性强,但实践证明,单独使用C语言开发单片机程序也存在诸多不足,如占用存储空间大、对硬件控制不灵活等。与硬件关系密切的程序或对性能有特殊要求的程序往往用汇编语言设计,上层应用软件则往往用C语言来设计。......
2023-10-28
相关推荐