单片机的语言编程_第1页
单片机的语言编程_第2页
单片机的语言编程_第3页
单片机的语言编程_第4页
单片机的语言编程_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机的语言编程第1页,课件共19页,创作于2023年2月3.1C及C51语言概述

语言简洁,使用方便灵活。可移植性好。表达能力强。表达方式灵活。可进行结构化程序设计。可以直接操作计算机硬件。生成的目标代码质量高。第2页,课件共19页,创作于2023年2月3.1C51的数据类型关键字:关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键字相同。在C51中的关键字除了有ANSIC标准的32个关键字外还根据51单片机的特点扩展了相关的关键字,见表中的C51编译器的扩展关键字。第3页,课件共19页,创作于2023年2月关键字用途说明bit位标量声明声明一个位标量或位类型的函数sbit位标量声明声明一个可位寻址变量sfr特殊功能寄存器声明声明一个特殊功能寄存器sfr16特殊功能寄存器声明声明一个16位的特殊功能寄存器data存储器类型说明直接寻址的内部数据存储器bdata存储器类型说明可位寻址的内部数据存储器idata存储器类型说明间接寻址的内部数据存储器pdata存储器类型说明分页寻址的外部数据存储器xdata存储器类型说明外部数据存储器code存储器类型说明程序存储器interrupt中断函数说明定义一个中断函数reentrant再入函数说明定义一个再入函数using寄存器组选择选择单片机的工作寄存器组_at_绝对地址说明为非位变量指定存储空间绝对地址small存储模式选择参数及局部变量放入可直接寻址的内部RAMcompact存储模式选择参数及局部变量放入分页外部数据存储区large存储模式选择参数及局部变量放入分页外部数据存储区关键字:第4页,课件共19页,创作于2023年2月数据类型的具体定义:数据类型说明长度值域unsignedchar无符号字符型单字节0~255signedchar带符号字符型单字节-128~+127unsignedint无符号整型双字节0~65535signedint带符号整型双字节-32768~+32767unsignedlong无符号长整型四字节0~4294967295signedlong带符号长整型四字节-2147483648~+2147483647float单精度型四字节±1.175494E-38~±3.402823E+38*指针1~3字节对象的地址bit位变量位0或1sfr8位特殊功能寄存器单字节0~255sfr1616位特殊功能寄存器双字节0~65535sbit可位寻址定义位0或1第5页,课件共19页,创作于2023年2月 #include“reg51.h” sbitP0_0=P0^0; voidmain() { P0_0=0; while(1); }例1:利用MCS-51单片机的P0引脚P0.0引接一只LED,送“0”点亮,送“1”灭。则要求点亮,程序如下:第6页,课件共19页,创作于2023年2月#include代表的是加载头文件,头文件是C编译器中带的已经定义的函数的集合或自定义的一个函数的集合。程序中加载一个reg51.h的文件,那么打开reg51.h里边的内容是什么呢?如编码器在C盘下C51文件夹内,则REG51.h文件的路径是C:\keil\C51\INC\reg51.h。例如:P1定义为

sfrP1=0x90;累加器A定义为

sfrACC=0xE0;定时模式TMOD定义为sfrTMOD=0x89;第7页,课件共19页,创作于2023年2月main()函数也称为主函数C语言都是从main()函数开始执行的。前面加了一个void是说明该函数是没有返回值的。如果点量8个灯,可P0=0x00对引脚送0,则点亮单色灯,0x00对应二进制数值00000000,所以该条语句是同时点亮了8只单色灯。整个程序用{}括起来,形成了一个完整的C51程序。上例中,符号P0(代表P0锁存器)已经在头文件“reg51.h”中有定义。P0_0表示P0.0引脚,它没有被事先定义好,所以需要使用sbit进行定义。第8页,课件共19页,创作于2023年2月例2:P3.2引脚接一个按键,P1口接8只单色灯,单色灯0亮1灭,当有按键按下时8只单色灯高低4位交替闪亮一次。按键按下接收到0,否则为1。#include“reg51.h”sbitkey=P3^2;voidmain(){unsignedcharT1=0x0F,T2=0xF0,keyT;unsignedinti;for(;;){keyT=key;第9页,课件共19页,创作于2023年2月if(~keyT) { P1=T1;//高4位亮低4位灭

for(i=0;i<10000;i++);//延时作用

P1=T2;//高4位灭低4位亮

for(i=0;i<10000;i++);//延时作用

}}}例2:P3.2引脚接一个按键,P1口接8只单色灯,单色灯0亮1灭,当有按键按下时8只单色灯高低4位交替闪亮一次。按键按下接收到0,否则为1。第10页,课件共19页,创作于2023年2月3.2函数3.2.1函数定义通常C语言的编译器会自带标准的函数库,这些都是一些常用的函数。标准函数已由编译器软件商编写定义,使用者直接调用就可以了,而无需定义。同时C语言允许使用者根据需要编写特定功能的函数,要调用它必须要先对其进行定义。定义的模式如下:函数类型函数名称(形式参数表){ 函数体}第11页,课件共19页,创作于2023年2月3.2.2函数的调用调用就是指一个函数体中引用另一个已定义的函数来实现所需要的功能,这时函数体称为主调用函数,函数体中所引用的函数称为被调用函数。一个函数体中可以调用数个其它的函数,这些被调用的函数同样也可以调用其它函数,也可以嵌套调用。在C51语言中主函数main是不能被其它函数所调用的。第12页,课件共19页,创作于2023年2月调用函数的一般形式如下:函数名(实际参数表)“函数名”就是指被调用的函数。实际参数表可以为零或多个参数,多个参数时要用逗号隔开,每个参数的类型、位置应与函数定义时所的形式参数一一对应,它的作用就是把参数传到被调用函数中的形式参数,如果类型不对应就会产生一些错误。调用的函数是无参函数时不写参数,但不能省后面的括号。第13页,课件共19页,创作于2023年2月3.2.3中断函数中断服务函数只有在CPU响应中断时才会被执行,这在处理突发事件和实时控制是十分有效的。

关键字是interrupt,是函数定义时的一个必选项,只要在某个函数定义后面加上这个选项,这个函数就变成了中断服务函数。第14页,课件共19页,创作于2023年2月定义中断服务函数时可以用如下的形式。函数类型函数名(形式参数)interruptn[usingn]interrupt缺省关键字是不可的,由它告诉编译器该函数是中断服务函数,并由后面的n指明所使用的中断号。n的取值范围为0-31,但具体的中断号要取决于芯片的型号,像AT89C51实际上就使用0-4号中断。每个中断号都对应一个中断向量,具体地址为8n+3,中断源响应后处理器会跳转到中断向量所处的地址执行程序编译器会在这地址上产生一个无条件跳转语句,转到中断服务函数所在的地址执行程序。第15页,课件共19页,创作于2023年2月下表是8051的中断向量和中断号。注意:函数不能直接调用中断函数;不能通过形参传递参数;但中断函数允许调用其它函数,两者所使用的寄存器组应相同。

第16页,课件共19页,创作于2023年2月#include<reg51.h>sbitP1_0=P1^0;voidtimer0(void)interrupt1using1{

/*T0中断服务程序入口*/P1_0=!P1_0;TH0=-(1000/256);

/*计数初值重装*/TL0=-(1000%256);}例3设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。第17页,课件共19页,创作于2023年2月voidmain(void){TMOD=0x01;

/*T0工作在定时器方式1*/P1_0=0;TH0=-(1000/256);

/*预置计数初值*/TL0=-(1000%256);EA=1;

/*CPU开中断*/ET0=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论