MCU8051 接口和外设编程举例
- 格式:ppt
- 大小:951.50 KB
- 文档页数:60
C8051F02X外部存储器接口和IO端口配置C8051F02X外部存储器接口和I/O端口配置摘要:介绍美国Cygnal公司生产的C8051F02X系列单片机的外部存储器接口、I/O端口配置方法和有关注意的问题;在此基础上列举两个关于EMIF、I/O的配置应用。
关键词:C8051F02X EMIF I/O 交叉开关美国Cygnal公司C8051F02X系列单片机是集成在一起芯片上的混合信号系统级单片机。
该单片机具有32/64位数字I/O端口(引脚)、25MIPS高速流水线式8051微控制器内核、64KB在系统可编程Flash存储器、64KB地址的外部存储器接口、4352(4096+256)B片内RAM、各自独立的SPI、SMBUS/I2C和两个UART串行接口等特点。
其最突出的优点就是,通过设置交叉开关寄存器控制片内数字资源映射到外部I/O引脚,这就允许用户根据自己的特定应用,选择通用I/O端口和所需要数字资源。
当然,在设置数字交叉开关寄存器时,应该首先考虑EMIF的配置问题。
其配置不同,将导致单片机通过不同的端口(低或高)访问片外存储器和存储器映像的I/O部件,以及数字交叉开关是否分配外部设备给P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚。
(如图EMIF设置为多路器模式。
)1 EMIF和I/O配置方法1.1 外部存储器接口(EMIF)配置C8051F02X系列MCU有4KB的RAM可以只映射在片内,也可以映射在64KB外部数据存储器地址空间,还可以同时映射到片内和片外(4KB地址以内在片内存储器空间访问,4KB以上经过EMIF访问)三种方式。
对于后两种存储器工作模式,需通过外部存储器接口使用MOVX和DPTR或MOVX和R0(R1)指令访问外部数据存储器和存储器映像的I/O设备。
但是对于高8位地址,必须由外部存储器接口寄存器(EMI0CN)提供;而EMIF可将外部数据存储器接口映射到低端口(P0~P3)(F020/2/3系列)或高端口(P4~P7)(F020/2系列),以及配置为复用模式或非复用模式等。
8051单片机教程一、认识8051单片机8051单片机是一款经典的微控制器,自1981年由英特尔公司推出以来,便广泛应用于工业控制、智能家居、嵌入式系统等领域。
本教程将带领大家了解8051单片机的结构、原理及其编程方法。
1. 8051单片机的基本结构(1)中央处理器(CPU):负责执行程序指令,进行数据处理和控制。
(2)存储器:包括程序存储器(ROM)和数据存储器(RAM)。
程序存储器用于存放程序代码,数据存储器用于存放运行过程中的数据和变量。
(3)定时器/计数器:用于实现定时或计数功能,可应用于各种场合,如延时、脉冲计数等。
(4)并行I/O口:共有4个8位的并行I/O口,可用于连接外部设备,进行数据输入输出。
(5)串行通信接口:用于与其他设备进行串行通信,可实现数据的长距离传输。
(6)中断系统:允许外部设备或内部事件打断正常的程序执行流程,提高系统的实时性。
2. 8051单片机的特点(1)指令丰富:8051单片机拥有111条指令,包括数据传送、逻辑运算、算术运算、位操作等。
(2)硬件资源丰富:具备定时器、串行通信接口、中断系统等硬件资源,易于实现各种功能。
(3)扩展性强:可通过外部总线扩展存储器、I/O口等资源。
(4)功耗低:适用于电池供电的便携式设备。
(5)成本低:8051单片机价格低廉,性价比高。
二、8051单片机的编程基础1. 汇编语言与C语言2. 开发环境搭建(1)并安装Keil软件。
(2)创建一个新项目,选择8051单片机型号。
(3)编写,并将文件添加到项目中。
(4)编译、项目,可执行文件。
(5)将可执行文件到8051单片机中,进行调试和运行。
3. 基本语法与编程规范(1)变量定义:在C语言中,使用变量前需先进行定义。
例如:unsigned char count; // 定义一个无符号字符型变量count(2)数据类型:8051单片机支持多种数据类型,如char、int、long等。
实验六8051单片机串行口实验一实验目的:理解8051单片机串行口工作原理和方式。
学习和掌握8051单片机实现通讯的环境和程序编写。
了解PC机通讯的基本要求。
二实验原理:在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式。
所以串行接口是微机应用系统常用的接口。
所谓“串行通信”是指外设和计算机间使用一根数据信号线(另外需要地线,可能还需要控制线),数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。
如图6-1所示。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,当然,其传输速度比并行传输慢。
图6-1在串行通讯时,RS-232C接口是目前最常用的一种串行通讯接口,RS-232C使用-3到-25V表示数字“1”,使用3V到25V表示数字“0”,RS-232C在空闲时处于逻辑“1”状态。
8051单片机上有UART用于串行通信,发送时由TXD端送出数据,接收时则由RXD端输入数据。
它是一个可编程的全双工串行口。
SCON是串行口控制和状态寄存器,其格式如下:表6-1其中,SM0,SM1为串行口工作方式控制位,具体的工作方式如下表(表6-2)所示:表6-2SM2为多机通信控制位,当SM2=1时,只有接受到RB8为1,RI才置位,当SM2=0时,接受到字符RI就置位。
REN为串行口接收允许位。
工作在方式2和3时,TB8为发送的第9位数据,也可以用作奇偶校验位,RB8为接受到的第9位数据,而方式1时,RB8为接受到的停止位。
TI,RI分别为发送接受中断标志位,均由硬件置位,软件清0。
PCON是电源控制寄存器,其格式如下:表6-3其中,SMOD为串行口波特率加倍位。
当SMOD=1时,方式1,3波特率=定时器1溢出率/16,方式2波特率为fosc/32;当SMOD=0时,方式1,3波特率=定时器1溢出率/32,方式2波特率为fosc/64。
第八章 8051内部资源C语言编程一、I/O口编程例1:用按键控制发光二极管。
并口是用的最多的资源,下面以P1口为例,见电路图,P1口低4位接了4个按钮,高4位接了4个指示灯,要求按下相应的按钮,对应的指示灯亮。
P10对应P14,依次类推。
指示灯是端口输出高电平亮。
源程序如下:#include<at89x51.h>void main(){unsigned char data x,i;while(1){P1=P1|0x0f; //给低4位置1,高4位不变x=P1&0x0f; //读低4位x=~x; //低4位取反P1=x<<4; //左移4位for(i=0;i<255;i++); //延时}}(端口编程)注意上面几种常见的用法。
二、中断的C语言编程C51编译器支持在C源程序中直接开发中断程序。
前面已经讲过,中断服务程序是通过按规定语法格式定义的一个函数。
(中断有关内容)Array中断服务程序的函数定义的语法格式如下:Void 函数名(void) interrupt m [using n] { 中断程序代码;}m为MCS-51中断源编号,见表using n 选项用于实现工作寄存器组的切换,n是中断服务子程序中选用的工作寄存器组号(0- 3)。
例2:设AT89C52 的时钟频率为12MHz,利用定时中断在其P1.0 引脚输出周期为4ms,占空比为1:1的方波。
确定定时器工作方式和计算定时器初值。
选用定时器T0工作方式1,每个机器周期为1μs,翻转一次电平需要2ms,则计数次数n=2000/1=2000,初值x=65536-2000=63536=F830H参考程序如下:#include<REG52.h>sbit P10 = P1^0;//定义位void clock_initial() reentrant using 0//在中断中调用,定义为重入函数{TR0=0;TH0=0XF8;//装载计数初值TL0=0X30;TR0=1;}main( ){TMOD = 0x01; //定时器T0方式1 工作P10 = 0; //初始值为低电平TF0=0;//清除中断标志位clock_initial();ET0=1;EA=1;do{ } while(1); //死循环,等价于汇编语言的SJMP $}void clk_int ( void ) interrupt 1 using 0{P10= !P10;//逻辑变量clock_initial();}(延时中断)例3:图示是利用优先权解码芯片74LS148,在单片机8031的一个外部中断INT1上扩展多个中断源的原理电路图。
实验二8051单片机I/O口输出操作实验一实验目的:通过实验了解和学习8051单片机I/O口作为输出方式使用时,CPU对I/O口的操作方法。
二实验原理:8051单片机有4个8位的并行口,记作P0、P1、P2和P3,共32根I/O线。
每个口主要由四部分组成:端口锁存器、输入缓冲器、输出驱动器和引至芯片外的端口引脚。
它们都是双向通道,每一条I/O线都能独立地用作输入或输出。
作为输出口用时,内部带锁存器,故可以直接和外设相连,不必加锁存器。
这四个接口特性上的差别主要是P0、P2和P3都还有第二功能,而P1口只能用作I/O 口。
三实验内容:实验中P1.0脚上连一个发光二极管和一个限流电阻。
端口送低电位时,发光二极管点亮,送高电位时,发光二极管熄灭。
编写程序控制发光二极管,使之每隔大约0.5秒钟点亮一次。
四实验电路图:图2-1五实验方法:1.根据如上电路图连接好实验电路。
在实验板中将P1.0的管脚和LED的管脚相连。
也可以照这个电路图用实验面包板自己搭一个电路,VCC用直流5V,也可以用三节碱性电池串联。
2.按照实验要求编写实验程序,建立新工程,保存为OUTPUT。
图2-23.调试程序,根据调试结果,调整软件延时的时间。
图2-34.图2-2是软件编译成功的窗口;图2-3是软件仿真窗口,可以拉开外设菜单观察P1口状态。
5.将keilC51产生的output.hex文件通过在线下载ISP或商用编程器写入芯片中,将芯片插入实验板(如果是在线下载就可以省略这步,因为芯片就在实验板上),复位后运行程序观察结果。
六参考程序:1.汇编源程序ORG 0000HSTART: SETB P1.0 ;P1.0口置位ACALL DLAY ;调用延时子程序DLY0.5S CLR P1.0 ;P1.0口清位ACALL DLAYSJMP START ;程序循环执行DLAY: MOV R0,#0FFH ;延时子程序,延时约0.5S D1: MOV R1,#0FFHD2: MOV R2,#6HDJNZ R2,$DJNZ R1,D2DJNZ R0,D1RETEND2.C语言源程序/*************************************************** 文件名: output.c* 描述: P1口输出,点亮发光二极管**************************************************/#include <reg51.h>sbit LED=P1^0; //引脚定义void main(void){int i;while(1){LED=1;for(i=0;i<=30000;i++); //空循环延时LED=0;for(i=0;i<=30000;i++);}}思考题:观察汇编语言和C语言控制单片机的过程,有哪些相同和不同的地方。