微机原理-06-单片机c语言设计
单片机的C语言程序设计
单片机应用系统的程序设计,除了可采用汇编语言完成外,还可以采用C语言实现。目前已有多种可以对51系列单片机硬件进行操作的C语言,它们通常统称为C51。
C51在标准C(ANSI C)的基础上,针对单片机的硬件资源,扩展了相应的数据类型和变量,而C51在语法规定、程序结构与设计方法上都与标准C相同。本章重点介绍 C51对标准C所扩展的部分,并结合几个简单实例讲解单片机C51的程序设计方法。
为什么使用C51
- C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程 序结构,适用于各种应用的程序设计,是目前使用最广的单片机编程语言,使用 C51编译器。
- 由C51产生的目标代码其运行速度高,所需存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混和使用
程序结构
全局变量说明 /*可被各函数引用*/
main( ) /*主函数*/
{
局部变量说明 /* 只在本函数引用 */
执行语句 (包括函数调用语句);
}
Fun1(形式参数表) /*函数1*/
形式参数说明
{
局部变量说明
执行语句(包括调用其他函数语句);
}
…
Funn(形式参数表) /*函数n*/
形式参数说明
{
局部变量说明
执行语句 (包括调用其他函数语句)
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
数据类型
存储器模式
data char var; //字符变量var定位在片内RAM区
char code MSG[]=″ENTER PARAMETER:″ //字符数组定位在程序存储区
unsigned long xdata array[100]; /* 无符号长型数组定位在片外RAM区,每元素占4bytes*/
float idata x,y,z; /*实型变量x,y,z,定位在片内用 间址访问的内部RAM区*/
bit lock; /*位变量Lock定位在片内RAM可位寻址区*/
unsigned int pdata dimension; /* 无符号整型变量 dimension定位
在分页的外部RAM区 */
unsigned char xdata vector [10][4][4]; /* 无符号字符型三维数组,定位在片外RAM区*/
sfr P0=0x80; /*定义P0口,地址为80H*/
char bdata flags; /*字符变量flags定位在可位寻址内部RAM区*/
sbit flag0=flags^0; /*定义flag0为flags.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
指针变量
指针就是存储单元地址,存储这个地址的变量称为指针变量。
习题
2. C51与汇编语言的特点各有哪些?怎样实现两者的优势互补?
答:采用C51进行程序设计,对系统硬件资源的分配比用汇编语言简单,且程序的阅读和修改比较容易,适于编写较大一点的程序。
汇编语言生成的目标程序占存储空间少、运行速度快,具有效率高、实时性强的优点,适于编写短小高效的程序。
7.中断函数是如何定义的?各种选项的意义如何?
答:interrupt n 用于定义中断函数,n为中断号,可以为0~31,通过中断号可以决定中断服务程序的入口地址。
常用的中断源对应的中断号
中断源 | 外中断0 | 定时器0 | 外中断1 | 定时器1 | 串行口 |
---|---|---|---|---|---|
中断号 | 0 | 1 | 2 | 3 | 4 |
9.一般指针与基于存储器的指针有何区别?
答:定义时未指定它所指向的对象的存储器类型时,该指针变量就被认为是一般指针。
一般指针占用3个字节:第一个字节存放该指针的存储器类型编码(由编译模式的默认值确定),第二和第三个字节分别存放该指针的**高位和低位地址偏移量。**定义时就指定了它所指向的对象的存储类型时,该指针变量就属于基于存储器的指针。
基于存储器的指针可以高效访问对象,类型由C51源代码中存储器类型决定,且在编译时确定。
12.改正下列程序的错误。
#include<reg51.h>
main ()
{a = c;
int a = 7,c;
delay (10)
void delay( );
{
char i;
for (i = 0;i< = 255;i++);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
答:本程序有如下错误:
变量必须先定义后引用。
第5句调用函数后面应该加分号。
Main()函数结束处漏写了反大括号。
被调用函数delay()在main()后面,必须在前面先声明。
第6句函数说明语句后的分号应该去掉。
13.试说明为什么xdata型的指针长度要用2个字节。
答:因为xdata是外部数据存储器,最大可有64KB 的存储单元,xdata指针是表示外部数据存储单元的地址,要表示64KB个单元地址,所以必须用2字节共16位表示。
64KB=65536B=2^16B
文章来源: hiszm.blog.csdn.net,作者:孙中明,版权归原作者所有,如需转载,请联系作者。
原文链接:hiszm.blog.csdn.net/article/details/105402750
- 点赞
- 收藏
- 关注作者
评论(0)