微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机快速入门实验:控制LED闪烁发光

单片机快速入门实验:控制LED闪烁发光

时间:12-29 来源:互联网 点击:
如果说初学计算机编程,最简单的入门程序是在屏幕上显示“Hello world!”的话,那么学习单片机最简单的入门实验就是控制发光二极管(LED)闪烁发光。
P89LPC900系列单片机是近几年出现的新一代80C51内核单片机,许多人都想学习,并希望应用到自己的产品设计中。下面我就以控制LED闪烁发光这个最简单的实验为例,带领大家入门。


●LPC900系列单片机简介
LPC900系列单片机是国际著名半导体厂商Philips公司(http://www.scn.semiconductors.philips.com/)推出的新一代80C51内核单片机。LPC900兼容标准80C51的指令系统和特殊功能寄存器(SFR),如果学过80C51单片机,则很容易入门。LPC900对80C51原有的CPU内核进行了重新设计,在相同的时钟频率下,指令执行速度达到标准80C51的6倍。LPC900内部集成有多种外围功能部件,如I2C总线、SPI接口、增强型UART、实时时钟、模拟比较器、A/D和D/A转换、EEPROM、CCU等等。这些功能部件都可以通过SFR寄存器方便地进行操控。片内Flash容量有1KB到16KB,可以进行ISP/IAP操作。LPC900系列单片机可谓是功能强大,性价比极高。


●电路原理图及电路说明

在电路中是以28引脚的P89LPC932A1单片机为例的,但是类似的电路还可以应用于其它型号上。
LPC900系列单片机属于低电压器件,正常的电源电压范围通常是2.4~3.6V。在这里,电源部分省略不画了,直接取VCC=3.3V。
按照一般的电路设计常识,芯片的电源引脚对地要加上10~100nF的电容(见图中的C1),以消除可能通过电源线串进来的高频干扰。
LPC900系列单片机具有“内部复位”功能。因此可以不使用额外的复位电路。如果选择了内部复位(在烧写程序时设置)功能,那么“P1.5/RST”引脚可以作为一个I/O口使用,但是只能用作输入,不能用作输出。
LPC900系列单片机片内都有一个高精度的RC振荡器。RC振荡器的频率标称是7.3728MHz,这是适合于UART通信的频率点,在整个工作温度范围内精度可达±2.5%。LPC900系列单片机同时也支持外部晶振。外部晶振可以是低频、中频或高频晶振。低频晶振中常见的是32.768KHz的手表晶振。高频晶振可以支持到12MHz,部分型号可以支持到18MHz。用编程器烧写程序时可以选择使用哪种类型的振荡器。在这里,我们选用片内RC振荡器,所以在图中是没有晶振电路的。
发光二极管电路由1只LED和1只电阻串联而成。当P0.4引脚输出低电平时,点亮LED。在LPC900系列单片机中所有型号都拥有P0.4口。


●LPC900系列单片机I/O口特性说明
LPC900系列单片机仍然使用P0、P1、P2、P3这4组I/O口,它们的SFR地址仍然与标准80C51相同。目前LPC900系列单片机已有数十种不同的型号,引脚从8个到28个,将来还会有更多引脚的产品。每种型号配置的I/O数目有多有少,但都是P0~P3口的一部分。
从I/O口的特性上看,标准80C51的P0口在作为I/O口使用时,是开漏结构,在实际应用中通常要添加上拉电阻;P1、P2、P3都是准双向I/O,内部有上拉电阻,既可作为输入又可以作为输出。而LPC900系列单片机的I/O口特性有一定的不同,它们可以被配置成4种不同的工作模式:准双向I/O、推挽输出、高阻输入、开漏。
准双向I/O模式与标准80C51相比,虽然在内部结构上是不同的,但在用法上类同,比如要作为输入时都必须先写“1”置成高电平,然后才能去读引脚的电平状态。推挽输出的特点是不论输出高电平还是低电平都能驱动较大的电流,比如输出高电平时可以直接点亮LED(要串联几百欧限流电阻),而在准双向I/O模式下很难办到。高阻输入模式的特点是只能作为输入使用,但是可以获得比较高的输入阻抗,这在模拟比较器和ADC应用中是必需的。开漏模式与准双向模式相似,但是没有内部上拉电阻。开漏模式的优点是电气兼容性好,外部上拉电阻接3V电源,就能和3V逻辑器件接口,如果上拉电阻接5V电源,又可以与5V逻辑器件接口。此外,开漏模式还可以方便地实现“线与”逻辑功能。
I/O口配置寄存器共有8个,P0口的配置寄存器是P0M1和P0M2,P1口是P1M1和P1M2,P2口是P2M1和P2M2,P3口是P3M1和P3M2。他们决定每根I/O口线的工作模式。具体的配置方法,请参考相关的数据资料。例外情况是P1.5/RST、P1.2/SCL/T0、P1.3/SDA/INT0这3个I/O引脚。P1.5只能被配置成高阻输入,P1.2和P1.3引脚只能被配置成高阻输入或开漏方式。


●程序设计
从电路图中可以知道,当P0.4输出低电平时可以点亮LED,输出高电平时,LED不亮。在程序中要设置一个定时器,这样就能方便地交替点亮和熄灭LED。在LPC900系列单片机中,定时器T0的用法与标准80C51中的T0是相兼容的。程序比较简单,下面列出A51源程序和C51源程序。


●A51源程序

;LPC900实验程序:控制简单的LED闪烁发光
;作者:21icbbs LPC900,2005年5月
;程序说明:
;用P0.4控制LED闪烁发光,亮0.1秒,灭0.9秒
;采用片内RC振荡器,CPU时钟CCLK=7.3728MHz
;本程序适用于所有LPC900系列单片机



;定义本程序所用到的LPC900内部SFR寄存器
P0M1DATA84H;P0M1和P0M2是P0口的模式寄存器
P0M2DATA85H;它们共同决定P0口的4种工作模式:准双向、推挽输出、高阻输入、开漏


;定义LED控制引脚
pin_LEDBITP0.4;所有的LPC900系列单片机都有P0.4引脚


;复位入口
ORG0000H
AJMP_main;跳到主程序



;函数: void Delay(unsigned char t)
;功能: t>0时,延时(0.01*t)秒
;t=0时,延时2.56秒
;参数: t=R7

_Delay:
MOVTH0, #70H;(TH0,TL0)=65536-0.01*PCLK
MOVTL0, #00H;PCLK是外围器件时钟,等于CPU时钟CCLK的一半
SETBTR0
_Delay_10:
JBCTF0, _Delay_20
SJMP_Delay_10
_Delay_20:
CLRTR0
DJNZR7, _Delay
RET



;函数:void SysInit()
;功能:系统初始化

_SysInit:
;定时器T0设置成16位定时器模式,T1的设置不变
ANLTMOD, #0F0H
ORLTMOD, #01H
;将P0.4设置成开漏输出方式,其它I/O的设置不变
ORLP0M1, #00010000B
ORLP0M2, #00010000B
RET


;函数:void main()
_main:
MOVSP, #30H
ACALL_SysInit
_main_10:

CLRpin_LED;点亮LED

MOVR7, #10;延时100ms
ACALL_Delay

SETBpin_LED;熄灭LED

MOVR7, #90;延时900ms
ACALL_Delay

SJMP_main_10


END


●C51源程序

/*
LPC900实验程序:控制简单的LED闪烁发光
作者:21icbbs LPC900,2005年5月
程序说明:
用P0.4控制LED闪烁发光,亮0.1秒,灭0.9秒
采用片内RC振荡器,CPU时钟CCLK=7.3728MHz
本程序适用于所有LPC900系列单片机
*/



//包含标准80C51的头文件
#include //LPC900系列单片机的SFR与标准80C51兼容


//定义本程序所用到的LPC900内部SFR寄存器
sfr P0M1 = 0x84;//P0M1和P0M2是P0口的模式寄存器
sfr P0M2 = 0x85;//它们共同决定P0口的4种工作模式:准双向、推挽输出、高阻输入、开漏


//定义LED控制引脚
sbit pin_LED = P0^4;



//延时函数
//t>0时,延时(t*0.01)秒
//t=0时,延时2.56秒

void Delay(unsigned char t)
{
do
{
TH0 = 0x70;//(TH0,TL0)=65536-0.01*PCLK
TL0 = 0x00;//PCLK是外围器件时钟,等于CPU时钟CCLK的一半
TR0 = 1;
for (;;)
{
if ( TF0 )
{
TF0 = 0;
break;
}
}
TR0 = 0;
} while (--t);
}


//系统初始化
void SysInit()
{
//定时器T0设置成16位定时器模式,T1的设置不变
TMOD = 0xF0;
TMOD |= 0x01;
//将P0.4设置成开漏输出方式,其它I/O的设置不变
P0M1 |= 0x10;
P0M2 |= 0x10;
}


//主函数
void main()
{
SysInit();
for (;;)
{
pin_LED = 0;//点亮LED
Delay(10);//延时100ms
pin_LED = 1;//熄灭LED
Delay(90);//延时900ms
}
}


●用户配置字、引导向量和状态字简介
用户配置字寄存器UCFG1位于Flash存储器,此寄存器非常重要,在烧写程序时必须正确配置。UCFG1寄存器决定单片机在开机运行时采用哪种振荡器、复位选择、掉电检测是否使能以及对看门狗的设置。UCFG1寄存器各位的详细解释请参考相关资料,具体配置时只需在编程器操作界面中选择就可以了。
引导向量和状态字用于支持ISP(在系统可编程)操作。在本实验中,暂不使用ISP功能。对于LPC932A1来说,引导向量默认为1FH,引导状态字默认为01H,但要正常运行程序必须要把引导状态字设置成00H。
本实验非常简单,以LPC PRO编程器为例,在配置界面中,我们选择:WDT禁止,内部复位,掉电检测禁止,WDSE禁止,内部RC振荡器;引导向量不使用。在编程界面中,“ISP Memory”和“EEPROM Memory”项暂时不要选中。




●如何调试运行
程序写完了,接下来要进行运行调试,大致分为两个步骤:编译源程序,生成HEX文件;将HEX文件下载到单片机中运行或者用仿真器调试。
德国Keil软件公司(http://www.keil.com)开发的 Keil C51 是一种专门为8051单片机设计的高效率C语言编译器,符合ANSI C标准,同时还集成有宏汇编器。LPC900系列单片机也属于8051家族,Keil C51可以很好地支持对LPC900的开发。如何使用Keil C51是个很大的课题,限于篇幅不再做介绍。如果没有用过Keil C51,又想快速入门,可以从网上找一个免费的8051汇编器。
周立功单片机公司(http://www.zlgmcu.com)开发的 LPC PRO 编程器是一款全面支持LPC900系列单片机烧写程序的专业编程器产品。用这款编程器烧写LPC900的程序非常方便。目前我用的正是LPC PRO。

周立功单片机公司开发的 MiniICP 下载线专门用于对LPC900系列单片机进行在电路编程(In Circuit Programming,ICP)。用ICP方式下载程序时只需使用单片机的5个引脚:VDD、VSS、RST、P0.4(PDA)和P0.5(PCL)。实际应用中,通常的做法是:在电路板上留出ICP接口,相关的信号线设计成跳线方式,下载程序时,跳线设置成ICP编程方式,下载完毕再跳回去,使用非常方便。

周立功单片机公司开发的 TKS-936 实时在线仿真器是专业的LPC900系列单片机仿真器,支持Keil C51的硬件仿真环境,支持TKStudio集成调试环境,使用Philips公司授权的专用BondOut芯片,仿真更加真实。



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top