第3章51单片机P0P3口的C51编程
- 格式:ppt
- 大小:380.50 KB
- 文档页数:33
附录2 C51编程简介Keil的C51是支持51单片机最成功的C语言,它功能强大且代码效率极高,其应用最为广泛。
但是,C51和标准C有一定的区别,主要体现在数据类型和数据存储结构上的差别,下面主要介绍C51和标准C有区别的内容。
一、C51的数据类型C语言的基本数据类型有char、int、short、long、float、double。
对于C51来说,short 和int类型相同,float和double类型相同。
也就是说,C51不支持双精度浮点运算。
C51的数据类型1、char、int、long三种类型均分无符号型(unsigned)和有符号型(signed,缺省),有符号型的数据采用补码表示,与标准C的定义相同,其数据长度和取值范围见上表。
2、float也与标准C一样,符合IEEE-754标准,数据长度和取值范围见上表。
float的使用和运算,需要数学库“math.h”的支持。
3、指针型(*),它本身就是一个变量,只是这个变量存放的不是普通的数据,而是指向一个数据的地址。
指针变量本身也要占据一定的内存,在C51中,指针变量的长度一般为1~3个字节。
如char * dat表示dat是一个字符型的指针变量,float * dat1表示dat1是一个浮点型指针变量。
指针变量直接指示硬件的物理地址,因此用它可以方便对8051的各部分物理地址直接操作。
以上数据类型在标准C中都有定义,以下4种类型是C51的扩充数据类型。
4、位类型:bit布尔处理器是8051单片机的特色,使用它可以方便进行逻辑操作。
位类型(bit)可以定义一个位变量,由C51编译器在8051内部RAM区20H~2FH的128个位地址中分配一个位地址。
需要注意的是,位类型不能定义指针和数组。
5、特殊功能寄存器:sfr8051及其兼容产品的特殊功能寄存器必须采用直接寻址的方式来访问,8051的特殊功能寄存器离散地分布在80H~FFH的地址空间里。
单片机C51编程规范1单片机C51编程规范-前言为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。
2 单片机C51编程规范-范围本标准规定了程序设计人员进行程序设计时必须遵循的规范。
本规范主要针对C51编程语言和keil编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。
3 单片机C51编程规范-总则l 格式清晰l 注释简明扼要l 命名规范易懂l 函数模块化l 程序易读易维护l 功能准确实现l 代码空间效率和时间效率高l 适度的可扩展性4 单片机C51编程规范-数据类型定义编程时统一采用下述新类型名的方式定义数据类型。
建立一个datatype.h文件,在该文件中进行如下定义:typedef bit BOOL; // 位变量//typedef unsigned char INT8U; // 无符号8位整型变量//typedef signed char INT8S; // 有符号8位整型变量//typedef unsigned int INT16U; // 无符号16位整型变量//typedef signed int INT16S; // 有符号16位整型变量//typedef unsigned long INT32U; // 无符号32位整型变量//typedef signed long INT32S; // 有符号32位整型变量//typedef float FP32; // 单精度浮点数(32位长度) //typedef double FP64; // 双精度浮点数(64位长度) //5 单片机C51编程规范-标识符命名5.1 命名基本原则l 命名要清晰明了,有明确含义,使用完整单词或约定俗成的缩写。
通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。
即"见名知意"。
l 命名风格要自始至终保持一致。
51单片机外部中断的C51编程相关知识:1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;2、中断源的编号:串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0;3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高;4、使用外部中断0和1,必须TCON寄存器设置其触发方式是低电平触发(0)还是下降沿触发(1);5、使用前必须通过IE寄存器打开总中断和自己的中断;//外部中断基本例程-1(未使用中断,键盘扫描为一般端口扫描)//这是特意安排的一个例程,以便和使用外部中断的例程2进行对比//用一个按键控制一个灯的亮灭,开始不亮,按一下则点亮,再按一下灭掉,再按又亮........#include <reg52.h>sbit k1=P3^2;sbit led=P2^7;void delay_ms(unsigned int xms); //ms级延时子程序void key_scan(); //声明键盘扫描子函数//=================================================void main(){led=1; //上电初始化,led灯不亮while(1){key_scan();delay_ms(3000);}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void key_scan() //键盘扫描子函数{ if(k1==0) //有键按下吗?(k1=0 ?){ delay_ms(10); //延时消抖if(k1==0) //确实是有键按下,则:{led=!led; //翻转灯的状态while(!k1);} //等待按键放开}}//-------------------------------------------------//外部中断基本例程-2 (单个键盘的外部中断0扫描处理)//用一个按键控制一个灯的亮灭//开始不亮,按一下则点亮,再按一下灭掉,再按又亮........#include <reg52.h>sbit k1=P3^2;sbit led=P2^7;void delay_ms(unsigned int xms); //ms级延时子程序void key_scan() interrupt 0 //使用了外部中断0的键盘扫描子函数。
单片机c51程序设计单片机C51程序设计是一门结合了硬件知识和软件编程技能的学科,它广泛应用于自动化控制、智能设备、嵌入式系统等领域。
C51单片机是指使用C语言进行编程的8051系列单片机,它具备丰富的指令集和灵活的编程方式。
下面将从单片机的基本概念、C51编程基础、程序设计步骤以及实例分析等方面进行介绍。
单片机的基本概念单片机,又称微控制器,是一种集成了处理器核心、存储器、输入/输出接口等的微型计算机系统。
它具有体积小、功耗低、成本低、可靠性高等特点。
C51单片机是基于Intel 8051微控制器架构的,具有8位数据总线和16位地址总线,支持多种外设接口。
C51编程基础1. C语言基础:熟悉C语言的基本语法,如变量声明、条件语句、循环语句、函数等。
2. 数据类型:了解C51单片机支持的数据类型,包括特有寄存器位操作。
3. 内存结构:掌握C51单片机的内存结构,包括内部RAM、外部RAM、程序存储器等。
4. 中断系统:理解中断的概念和中断服务程序的编写。
5. 定时器/计数器:了解如何使用单片机的定时器/计数器进行时间控制和事件计数。
程序设计步骤1. 需求分析:明确程序设计的目标和功能需求。
2. 系统设计:设计系统的整体架构,包括硬件连接和软件模块划分。
3. 编写代码:根据设计编写C51程序代码,包括初始化代码、主函数、中断服务程序等。
4. 调试:使用仿真软件或实际硬件对程序进行调试,确保程序正确运行。
5. 优化:根据调试结果对程序进行优化,提高效率和稳定性。
6. 测试:进行全面的测试,确保程序在各种条件下都能稳定运行。
实例分析以一个简单的LED闪烁程序为例,介绍C51程序设计的基本流程:```c#include <reg51.h>// 定义LED连接的端口#define LED_PORT P1void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);}void main() {while (1) {LED_PORT = 0xFF; // 关闭所有LED灯delay(500); // 延时500msLED_PORT = 0x00; // 打开所有LED灯delay(500); // 延时500ms}}```在这个例子中,我们首先包含了8051单片机的寄存器定义文件`reg51.h`,定义了LED灯连接的端口为P1。
C51单片机汇编语言程序设计一、二进制数与十六进制数之间的转换1、数的表达方法为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数后加B十六进制数后加H。
2、二进制数与十六进制数对应表二进制十六进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足4位部分用0补齐。
例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再写出对应的十六进制数即可。
0101000011011000111150D8F答案:(1010000110110001111)2=(50D8F)16例:将1001101B转化为十六进制数解:把10011110B从右向左每4位分为1组,再写出对应的十六进制数即可。
100111109E答案:10011110B=9EH4、十六进制数转换为二进制数转换方法为:将每1位十六进制数转换为4位二进制数。
例:将(8A)16转化为二进制数解:将每位十六进制数写成4位二进制数即可。
8A10001010答案:(8A)16=(10001010)2例:将6BH转化为二进制数解:将每位十六进制数写成4位二进制数即可。
6B01101011答案:6BH=01101011B二、计算机中常用的基本术语1、位(bit)计算机中最小的数据单位。
由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。
2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(Word)和字长两个字节构成一个字,2B=1Word。
字长是指单片机一次能处理的二进制数的位数。
如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。