本篇我们将分析上一篇所写的程序代码。未来学习单片机的大部分精力,我们也将放在程序代码的编写上。但是不用担心,我会非常详细的介绍每个程序的编写思路和各种注意事项等。
之前我们写的程序如下:
#include
sbit LED = P1^0;
void main()
{
LED = 0;
while(1);
}
头文件
第一行包含头文件,这个和C语言编写HelloWorld时的#include 一样。头文件reg52.h中定义了单片机的一些寄存器,如P0~P3等。至于什么是寄存器,将在原理篇中具体介绍,现在我们只要把它想象成C语言中常说的内存就好了。有兴趣的读者可以右击reg52.h打开头文件看一看。
C51的变量类型
这里我们使用的语言是C51,和标准C语言相比,最主要的特点就是多出来两种变量类型:sfr和sbit。sfr和char一样是一个8位数据类型,表示一个8位的寄存器。例如头文件reg52.h中就有一句sfr P1 = 0x90,它定义了寄存器P1。由于P1是IO口寄存器,所以对P1赋值,则相应的, IO口P1将输出对应的高低电平。而sbit则是一个1位数据类型,只有0和1两种值,它对应寄存器中的一个位。
于是在第二行里,我们定义了sbit型变量LED,并设置LED对应P1的最低位bit0。此时变量LED就和IO口P1.0关联起来。执行赋值语句LED = 0,IO口P1.0就会输出低电平,于是我们电路中的LED就会亮起来了。是不是非常神奇呢?在原理篇中,我会一步一步讲解单片机是如何实现这种功能的。
位寻址
在其他的很多单片机中,我们只能读写整个P1寄存器,而不能直接定义类似sbit这种对应寄存器一位的数据类型,另外51单片机里面有些寄存器也只能整个8位一起读写。这种直接读写一个寄存器位的特性被叫做位寻址功能。
又是一个很难理解的概念,同样,还是需要了解原理篇才能很好的理解它,现在完全不用担心,我提这个就是想让初学者对此提前有个大体印象。毕竟很多知识都是慢慢积累的,如果把大量这样的小知识全部放在原理篇中一并介绍,反而难以接受。
主函数的特点:没有参数和返回值
读者应该已经看到了无参数且无返回值的void main()函数,以及倒数第二行的while(1)语句,并可能疑惑不解。没错,主函数没有参数也没有返回值,倒数第二行的这句是一个死循环,程序永远也不会退出。这和计算机上的程序有很大的不同。下面简单的说明一下这样做的原因何在,更深入的原因,则需要读者看完原理篇后才能理解透彻。
在计算机中,我们开机时看到的启动界面是操作系统,如Windows、Linux等,我们编写的程序则是在操作系统的环境下运行的。程序执行时,相当于系统调用main函数,所以系统可以向main函数传递参数,也可以获取main函数执行结束时的返回值,程序执行结束后,会重新回到操作系统环境下。而在这里,我们写的程序是直接运行在单片机上的,不依赖操作系统。我们程序中的main函数不会被操作系统调用,因此通常它不需要参数,也不需要返回值。事实上,main函数有些情况下是被启动代码调用的,而启动代码是汇编语言写的,还记得上一篇中提到的启动代码么?
主函数的特点:死循环,不会执行结束
在计算机中,我们写的程序执行结束会回到操作系统环境下。而在单片机中,一旦单片机上电复位,就会执行我们写的main函数,直到断电。而如果main函数执行结束,将发生不可预知的结果。
实际实验时,STC单片机会复位并重新开始执行程序,或许只是个巧合,因为官方的芯片手册中并没有明确说明这一点。本着严谨的科学态度,我们不利用这种未经官方确认的特点来开发我们的程序。程序的可靠性是非常重要的,这一点要引起重视。
试想如果你用单片机开发的是医疗相关的产品,或者是控制一些大型机器等,一旦发生意外,后果难以想象。即使你开发的是普通的产品,如果总是出现奇怪的故障,也足以让用户抓狂。因此这一点要引起读者注意。所以,单片机的程序是不应该执行结束的,因此最后必然是一个死循环,这样才能保证单片机系统的可靠性。
总结
于是我们总结出通常情况下51单片机程序的几个特点:
1、包含REG52.H,该文件中定义了P0-P3接口等信息(sfr型和sbit型)。
2、单片机主函数没有参数,没有返回值(当然写成int型也不会报错,但是没必要)。
3、单片机主函数末尾会有个死循环,不会退出。
=======================================================
关键字:单片机 LED 程序分析
引用地址:
单片机小白学步(14) 点亮第一个LED的程序分析
推荐阅读最新更新时间:2024-03-16 14:54
C51单片机串口通信之上位机交互
概述:上位机(PC机)向MCU发送指令,MCU串口接收指令并根据列表发送响应。 全局变量声明 #include E51Pro.h BYTE ComBuf ;//串口通讯数据缓存,发送和接收都使用 UINT nAddress;//ROM中地址计数 UINT nTimeOut;//超时计数 ProWork pw;//编程器一般操作 1 定时器延时 1.1 微秒级 void Delay_us(BYTE nUs)//微秒级延时 255us { TH0=0; TL0=0; TR0=1; while(TL0 nUs); //利用T0做定时计数器,循环采样,直到达到定时值 TR
[单片机]
在单片机中的浮点数编程
问题背景: 在使用8BIT单片机进行开发,不支持浮点数运算。但是开发必须用到sin,cos,arctan等浮点数函数。 苦想了两天,才发现,自己要当一回 计算机 。 单片机不支持浮点数,可是编程却一定要用到小数。这时,只好自定义 定点小数 了。 所需的浮点数范围有两个区域-1~1,-60~60。精度就按小数点后2、3位了。 如果在高级语言中,我想定义的数组是 double arctantable = { 0.0174551, 0.0349208, 0.0524078, 0.0699268, 0.0874887, 0.105104, 0.122785, 0.140541
[单片机]
51单片机(三十二)—— 串口通信实例测试
在《51单片机(三十一)—— 串口通信介绍》中,我们介绍了51单片机串口的工作原理及寄存器定义,在本文中,我们通过一个实例来熟悉51单片机的串口使用方法。本文的资源中有实例的源码。在源码中首先是串口的初始化代码,如下所示。 void init_UART(void) { SCON = 0x50; //串口工作方式1,8位数据位,使能接收 TMOD |= 0x20; //T1为方式2,8位自动重装 TH1 = 0xFD; //晶振11.0592MHz,0xFD对应波特率为9600 TR1 = 1; //打开T1定时 EA = 1;
[单片机]
安森美引领LED创新——第四种驱动技术
引言:目前LED驱动技术主要有三种即电阻式、线性稳压器式以及开关稳压器式。这几种技术均有不足。近日,安森美宣布引领LED驱动技术创新,提出第四种驱动技术…… 从目前的LED驱动技术来看,主要是三种技术,即电阻式、线性稳压器式以及开关稳压器式。各种驱动技术并存,应用于不同的环境,各有优劣势。 “电阻式驱动技术的优势是成本低、易于设计,没有电磁兼容问题。”安森美标准产品组小信号部市场及应用总监Asif Jakwanl解释道,“但是其缺点是LED灯的亮度依赖于电池电压,其亮度会随电压的变化而变化,潜在危险是可能将LED灯烧坏。此外,它的缺点还包括需要恰当的LED编码、转换效率低,以及为客户带来库存压力。”不过,由于
[手机便携]
用单片机实现低成本高精度A/D与D/A转换
目前单片机在电子产品中已得到广泛应用,许多类型的单片机内部已带有 A/D转换电路,但此类单片机会比无A/D转换功能的单片机在价格上高几元甚至很多,本文给大家提供一种实用的用普通单片机实现的A/D转换电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D转换精度可达到8位或更高,因此很具有实用价值。 其工作原理说明如下: 1、硬件说明: 图一中“RA0”和“RA1”为单片机的两个I/O脚,分别将其设置为输出与输入状态,在进行A/D转换时,在程序中通过软件产生PWM,由RA0脚送出预设占空比的PWM波形。RA
[单片机]
DS18B20数字温度计单片机接口应用
1.DS18B20基本知识 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 1、DS18B20产品的特点 (1)、只要求一个端口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55。C到+125。C之间。 (5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。 2、DS18B20的引脚介绍
[单片机]
基于51单片机控制的温湿度监控仪
1 系统硬件组成 本系统完成对温度、湿度的实时测量,配合有关控制部分即可对温度湿度进行实时控制,同时具有温度、湿度和露点显示功能,满足一般上业环境对温度、湿度和露点检测的需要。系统由STC89C51RC、RAM、键盘、温度传感器、湿度传感器、A/D转换电路、D/A转换电路等组成。如图1所示。 STC89系列是具有Flash结构的51系列单片机,因此,程序存储器(ROM)可不用外扩,为了记忆校正后的参数,需要存储各种校正参数,本系统采用具有掉电保护功能的铁电存储器,以便在校正后,将校正参数存储下来。系统以温度传感器采用AD590集成温度传感器,具有传感精度高、工作性能稳定的特点。湿度传感器采用HS11
[单片机]
PIC单片机与51系列单片机的区别
PIC单片机的型号繁多,对初学者来说实在不好应付,容易混淆,以下作一简单分类,希望有助于初学者学习: 初档8位单片机:PIC12C5XXX/16C5X系列 PIC16C5X系列是最早在市场上得到发展的系列,因其价格较低,且有较完善的开发手段,因此在国内应用最为广泛;而PIC12C5XX是世界第一个八脚低价位单片机可用于简单的智能控制等一些对单片机体积要求较高的地方,前景十分广阔。 中档8位单片机:PIC12C6XX/PIC16CXXX系列 PIC中档产品是Microchip近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达到200ns,带A/D,内部E2PROM数据存储器,双时钟
[单片机]