当前位置:文档之家› 单片机外部RA扩展

单片机外部RA扩展

单片机外部RA扩展
单片机外部RA扩展

单片机外部RAM扩展模块

MCS-51系列单片机外部RAM为64K,在一些特殊场合下,远不能满足需要,本文就AT89C51讨论MCS-51系列单片机大容量RAM的扩

展方法。

首先介绍128K随机读取RAM HM628128。HM628128

是32脚双列直插式128K静态随机读取RAM,它具有容

量大、功耗低、价格便宜、集成度高、速度快、设计和

使用方便等特点。如若在系统中加入掉电保护电路,保

护数据有很高的可靠性,可以和EEPROM相媲美。

技术特性:

(1)最大存取时间为120ns;

(2)典型选通功耗75mW;典型未选通功耗10uW;

(3)使用单一5V电源供电;

(4)全静态存储器,不需要时钟及时序选通信号;

(5)周期时间与存取时间相等;

(6)采用三态输出电路,数据输入和输出端公用;

图6 HM628128外部引脚(7)所有输入和输出引脚均与TTL电平直接兼

容;

(8)有两个片选端,适合于低功耗使用,即为了保存信息,用电池作为后备电源。保存信息的最低电源电压Vcc=2V。

引脚安排及功能表:

图6是HM628128的外部引脚排列图,各引脚名称及功用分别如下:

A0~A16是17条地址线;I/O0~I/O7是8条双向数据线;CS1是片选1,低电平有效,CS2是片选2,高电平有效;WR是写控制线,当CS1为低电平,CS2为高电平时,WR的上升沿将I/O0~I/O7上的数据写到A0~A16选中的存储单元中;OE是读出允许端,低电平有效。

HM628128的功能表如表3所示。

WR CS1 CS2 OE 工作方式

X H X X未选中

X X L X未选中

H L H H 输出禁止

H L H L 读

L L H H 写

其中,H表示高电平,L表示低电平,X表示任意状态由于AT89C51直接外部RAM容量为64K,地址线为16条,其中低8位地址和数据分时复用,因此需要外部地址锁存器和ALE锁存信号来锁存低8位地址。又由于AT89C51的外部数据和外设地址通用,若扩展外设必然占用数据地址。因此本系统采用P2.7(A15)口来区分数据和外设:当P2.7(A15)口为高电平时,

选择外部数据;P2.7(A15)口为低电平时,则为外设。因此,直接外部数据容量和外设数量都为32K ,可用地址线为15条。本系统外部扩展RAM 为256K ,地址线18条。要达到18条地址线,则必须扩展。理论上可行方法很多,如以P1口的某几位作为最高位地址输出、外加锁存器锁存高位地址等。本系统采用后者,以保留P1口,况且外设空间充裕。扩展电路如图7所示:

图7 RAM 地址扩展电路

当读写外部数据时,首先应往高位地址锁存器中送入高位地址,然后再以DPTR 为间接地址访问外部数据,注意最高位地址应为1,即数据区最低地址为8000H 。

以下程序段演示了外部数据的读写。

……

MOV DPTR ,#0020H ;0020H 为高位地址锁存器的地址

MOV A ,#00H ;00H 表示第一个32K 空间

MOVX @DPTR ,A ;写入地址数据

MOV DPTR ,#8000H ;8000H 为每个32K 的第一个字节地址

MOVX A ,@DPTR ;从地址单元读取数据

……

若最后一句换为:

MOVX @DPTR ,A

则为向RAM 中写数据。

同时作者还利用HM628128的数据保持特性为其加入了掉电保护电路。当主电源关闭时,备用电源发挥作用,这样RAM 内的数据就不会丢失。其特性如表4所示。

译码器

地址总线

CS1 0V

图8 CS2控制数据保持时序

根据表4和图8可知,只要在系统上电或断电期间保证使HM628128的CS2立即变为低电平(CS2≤0.2V )或WR 立即变为高电平就可使其中的数据维持不变,图9可实现这一功能。

≥Vcc-0.2V

图9掉电保护电路

其原理如下:当系统正常时,电流通过D1向HM628128供电,同时向电池BT 充电,当系统电源切断时,将由电池供电。

上电时,系统电源对C1充电,在此期间CS2是输入要经过一定的延时后才能变为高电平,同时,由于U1、U2的电源是由系统电源对C2充电来建立的,这就保证了在上电时HM628128处于写静止状态。

在系统掉电瞬间,由于U1、U2由Vs供电,仍处于工作状态,电源掉电致使U1的输入立即变低,WR端变为低电平,从而禁止对HM628128的写入。同时C1也通过D2和R2放电,从而使CS2变为低电平。因此在掉电瞬间和掉电后,HM628128也处于写禁止状态。

经实践证明,本电路工作可靠,RAM中数据保存完整。

实验四单片机中断优先级实验

实验四单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 1.从 ① ②RES、 ③ ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。 2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计

通过菜单“source→Add/Remove Source Files…”新建源程序文件:。 通过菜单“source→”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件。 3.源程序编译汇编、生成目标代码文件 通过菜单“source→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。

51单片机中断扩展

51单片机扩展中断的四种方法 MCS—51系列单片机内部只有两个外部中断源输入端,当外部中断源多于两个时 ,就必须进行扩展,下面介绍两种简单的扩展方法: 一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这 样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通 过软件查询,进而转相应的中断服务程序。显然,这种方法的中断优先级取决于 软件查询的次序。其硬件连接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //中断函数 { EX0=0;//关中断 If(P0_0=1) { *****}//中断查询 If(P0_1=1) { *****}//中断查询 If(P0_2=1) { *****}//中断查询 EX0=1;开中断 } 二、用普通二极管构成中断选择

扩展的8个外部中断源均通过二极管向I N T(x=0或I)请求中断。当某个外部中断源请求中断服务时输出低电平电平,单片机满足响应外部中断(I N T)请求条件,响应中断,程序立即转向I NT 对应的中断入口地址处开始执PI.0~P1.7口外中断源的状态,以识别提出请求的外扩中断源,并转向中断服务程序为其服务,其查询顺序即顺序。在图中,是选用PI.0~PI.7作为外扩中断源请求的状态信息输入端口。 有点类似第一种方法。 三、用定时器/计数器作外部中断 单片机的定时器/计数器是一个加一计数器,每当计数输入端有一个“1—0”的负 跳变时,计数器加一,当加一计数器溢出时,就向CPU发出中断,利用这个特性 来扩展中断的方法是:首先把定时器/计数器设置成计数方式,并预置满值,把 外部中断源输入到P3口第4引脚或第5引脚(计数器输入端),这样就可以利用 定时器/计数器作为单片机外部中断了。注意这种方法的中断服务的入口地址应 在000BH或001BH。 四、用专用中断扩展芯片8259A 8259A是可编程中断控制接口,单片机控制八级中断。在系统中还可采用级联方式,一个主片可级联8个从片,这样在程序小于8K的情况,就可以用一片单片机实现了,而不需要用两片单片机控制,还要进行单片机点对点

单片机外部RA扩展

单片机外部RAM扩展模块 MCS-51系列单片机外部RAM为64K,在一些特殊场合下,远不能满足需要,本文就AT89C51讨论MCS-51系列单片机大容量RAM的扩 展方法。 首先介绍128K随机读取RAM HM628128。HM628128 是32脚双列直插式128K静态随机读取RAM,它具有容 量大、功耗低、价格便宜、集成度高、速度快、设计和 使用方便等特点。如若在系统中加入掉电保护电路,保 护数据有很高的可靠性,可以和EEPROM相媲美。 技术特性: (1)最大存取时间为120ns; (2)典型选通功耗75mW;典型未选通功耗10uW; (3)使用单一5V电源供电; (4)全静态存储器,不需要时钟及时序选通信号; (5)周期时间与存取时间相等; (6)采用三态输出电路,数据输入和输出端公用; 图6 HM628128外部引脚(7)所有输入和输出引脚均与TTL电平直接兼 容; (8)有两个片选端,适合于低功耗使用,即为了保存信息,用电池作为后备电源。保存信息的最低电源电压Vcc=2V。 引脚安排及功能表: 图6是HM628128的外部引脚排列图,各引脚名称及功用分别如下: A0~A16是17条地址线;I/O0~I/O7是8条双向数据线;CS1是片选1,低电平有效,CS2是片选2,高电平有效;WR是写控制线,当CS1为低电平,CS2为高电平时,WR的上升沿将I/O0~I/O7上的数据写到A0~A16选中的存储单元中;OE是读出允许端,低电平有效。 HM628128的功能表如表3所示。 WR CS1 CS2 OE 工作方式 X H X X未选中 X X L X未选中 H L H H 输出禁止 H L H L 读 L L H H 写 其中,H表示高电平,L表示低电平,X表示任意状态由于AT89C51直接外部RAM容量为64K,地址线为16条,其中低8位地址和数据分时复用,因此需要外部地址锁存器和ALE锁存信号来锁存低8位地址。又由于AT89C51的外部数据和外设地址通用,若扩展外设必然占用数据地址。因此本系统采用P2.7(A15)口来区分数据和外设:当P2.7(A15)口为高电平时,

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

关于51单片机外部中断响应

关于51单片机外部中断响应 外部中断方式最好设为下降沿方式,特别是中断引 脚接按键的情况。 外部下降沿中断:SETB IT0。每个机器周期都由硬 件对引脚自动采样,若连续在2个周期采样到电平从高 到低,则认定有中断请求,IE0=1。IE0会一直保持到该 中断请求被CPU响应,响应前都不会自动清零,只有在 响应后硬件才自动将IE0清零IE0=0。 外部低电平中断:CLR IT0。当中断引脚为低电平时,并保持一个机器周期,硬件自动置IE0=1。如果在下一个 周期采样到中断引脚为高电平时,硬件自动将IE0清0。中断标志位自动清0条件:下降沿中断只有CPU响应中断同时才会清0,否则一直保持。低电平中断:任何时候 当外部中断引脚为低电平时,IE0=1;为高电平时, IE0=0,所以不需要响应中断才会清0,与引脚状态有关。注意:当EA=0时,中断引脚为低电平也不会将IE0自动置1,只有EA=1时才会自动置1 单片机设计中有两个CPU时,主CPU控制副CPU中断时应注意:主CPU发出中断信号的时候,副CPU能够及时接收到,也就是副CPU工作状态不允许在关中断CLR EA的程序中运行。只要副CPU不工作在关中断的程序中运行,

主CPU发出的中断信号副CPU都能够及时响应中断。还有就是如果采用下降沿方式,主CPU发出的高低电平之间间隔时间只需一条NOP指令。所以应该尽可能考虑这个时差问题。有时候就是副CPU还没有运行完屏蔽中断的程序的时候,主CPU就发出了中断信号,造成副CPU无法中断或时好时坏。 键盘中断到今天为止终于可以告一段落了。 现在才知道,程序架构有了并不代表程序就容易完成,更多的时间在于调试,防真,再调试,如此循环。所以遇到问题要有耐心,信心,细心。做到这三点,不行也得行!!!!

51单片机外部ram扩展c程序及硬件结构

c程序 #include #include #define uchar unsigned char #define uint unsigned int int n,m; void main() { unsigned int i; while(1) { for(i=0x0000;i<=0x7fff;i++) { XBYTE[i]=n;//写入ram } for(i=0x7fff;i>0x0000;i--) { m=XBYTE[i];//读外部存储器 } }

} 62256外部ram芯片 相关知识: XBYTE是一个地址指针(可当成一个数组名或数组的首地址),它在文件absacc.h中由系统定义,指向外部RAM(包括I/O口)的0000H单元,XBYTE后面的中括号[ ]0x2000H 是指数组首地址0000H的偏移地址,即用XBYTE[0x2000]可访问偏移地址为0x2000的I/O端口。 这个主要是在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应于地址低位。一般P2口用于控制信号,P0口作为数据通道。 比如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可

以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE [0x4000],其中WR,CS为低,RD为高,那就是高位的4,当然其余的可以根据情况自己定,然后通过 XBYTE [0x4000] = 57; 这赋值语句,就可以把57写到外部RAM的0x4000处了,此地址对应一个字节。 XBYTE 的作用,可以用来定义绝对地址,是P0口和P2口的,其中P2口对应的是高位,P0口对应的是低位 如XBYTE[0x1234] = 0x56; 则等价于 mov dptr,#1234h mov @dptr,#56h 谢谢大家

单片机实验四报告材料_外中断实验

大学实验报告 学生:学号:专业班级: 实验类型:?验证?综合■设计?创新实验日期:2018.05.29 实验成绩: 实验四外中断实验 (一)实验目的 1.掌握单片机外部中断原理; 2.掌握数码管动态显示原理。 (二)设计要求 1.使用外部中断0和外部中断1; 2.在动态数码管上显示中断0次数,中断1用作次数清0,数码管采用74HC595驱动。 (三)实验原理 1.中断 所谓中断是指程序执行过程中,允许外部或部时间通过硬件打断程序的执行,使其转向为处理外部或部事件的中断服务程序中去,完成中断服务程序后,CPU返回继续执行被打断的程序。如下图所示,一个完整的中断过程包括四个步骤:中断请求、中断响应、中断服务与中断返回。 当中断请求源发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断处理程序处理中断服务请求。中断服务请求处理完后,再回到原来被中止的程序之处(断电),继续执行被中断的主程序。 如果单片机没有终端系统,单片机的大量时间可能会浪费在是否有服务请求发生的查询操作上,即不论是否有服务请求发生,都必须去查询。因此,采用中断技术大大地提高了单片机的工作效率和实时性。

2.IAP15W4K58S4单片机的中断请求 IAP15W4K58S4单片机的中断系统有21个中断请求源,2个优先级,可实现二级中断服务嵌套。由IE、IE2、INT_CLKO等特殊功能寄存器控制CPU是否相应中断请求;由中断优先级高存器IP、IP2安排各中断源的优先级;同优先级2个以中断同时提出中断请求时,由部的查询逻辑确定其响应次序。 中断请求源中的外部中断0(INT0)和外部中断1(INT1)详述如下: (1)外部中断0(INT0):中断请求信号由P3.2引脚输入。通过IT0来设置中断请求的触发方式。当IT0为“1”时,外部中断0为下降沿触发;当IT0为“0”时,无论是上升沿还是下降沿,都会引发外部中断0。一旦输入信号有效,则置位IE0标志,向CPU申请中断。 (2)外部中断1(INT1):中断请求信号由P3.3引脚输入。通过IT1来设置中断请求的触发方式。当IT1为“1”时,外部中断1为下降沿触发;当IT1为“0”时,无论是上升沿还是下降沿,都会引发外部中断1。一旦输入信号有效,则置位E1标志,向CPU申请中断。 中断源是否有中断请求,是由中断请求标志来表示的。在IAP15W4K58S4单片机中,外部中断 0、外部中断1等请求源的中断请求标志分别由特殊功能寄存器TCON和SCON控制,格式如下: (1)TCON寄存器中的中断请求标志。TCON为定时器T0与T1的控制寄存器,同时也锁存T0和T1的溢出中断请求标志及外部中断0和外部中断1的中断请求标志等。格式如下图所示: D7 D6 D5 D4 D3 D2 D1 D0 88H 与中断有关的各标志位功能如下: ①TF1:T1的溢出中断请求标志。T1被启动计数后,从初值做加1计数,计满溢出后由硬件 置位TFI,同时向CPU发出中断请求,此标志一直保持到CPU 响应中断后才由硬件自动清0。 也可由软件查询该标志,并由软件清0。 ②TF0:T0的溢出中断请求标志。T0被启动计数后,从初值做加1计数,计满溢出后由硬件 置位TF0,同时向CPU发出中断请求,此标志一直保持到CPU响应中断后才由硬件自动清 0。也可由软件查询该标志,并由软件清0。 ③IE1:外部中断1的中断请求标志。当INT1(P3.3)引脚的输入信号满足中断触发要求时,置 位IE1,外部中断1向CPU申请中断。中断响应后中断请求标志自动清0。 ④IT1:外部中断1(INT1)中断触发方式控制位。当(IT1)=1时,外部中断1为下降沿触发方式。 在这种方式下,若CPU检测到INT1出现下降沿信号,则认为有中断申请,随即使IE1标志 置位。中断响应后中断请求标志会自动清0,无须做其他处理。当(T1)=0时,外部中断1为

习题5答案单片机系统扩展与接口技术

习题5答案单片机系统扩展与接口技术 一、选择题 1、地址空间3000H~37FFH共有 B 存储单元。 A.1K B.2K C.4K D.8K 2、在生产过程中完成程序写入的只读存储器称为 A 。 A.掩膜ROM B.PROM C.EPROM D.E2PROM 3、805l单片机系统扩展时使用的锁存器用于锁存B 。 A.高8位地址 B.低8位地址 C.8位数据. D.ALE信号 4、使用线选法扩展3片2732作外部程序存储器,需要使用 C 位地址线。 A.13 B.14 C.15 D.16 5、8155中的定时器/计数器是 D 。 A.16位加法计数器 B.16位减法计数器 C.14位加法计数器

D.14位减法计数器 6、定时器/计时器0的初始化程序如下: MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB EA SETB ET0 执行该程序段后,把定时器/计时器0的工作状态设置成为 D A.工作方式0,定时应用,定时时间2u s,中断禁止 B.工作方式1,计数应用,计数值255,中断允许 C.工作方式2,定时应用,定时时间510 u s,中断禁止 D.工作方式2,计数应用,计数值1,中断允许 7、MCS-5 l单片机I/O编址采用的是统一编址的方法,因此 B 。 A.有专门的I/O操作指令 B.I/O寄存器与存储单元同等对待 C.地址空间与存储器空间是相互分开的 D.使用MOVX指令访问存储器,而使用MOVC指令进行I/O数据传送8、8155是一个可编程的I/O接口芯片,“可编程”是指 D 。 A.有14位可控定时器/计数器 B.芯片内包含有256字节的RAM C.只能使用中断编程的方法进行I/O数据传送 D.使用命令字以程序方法设置I/O数据传送的方式 9、访问接口,应在程序中使用 B 。 A.MOV指令 B.MOVX指令 C.MOVC指令 D.SWAP指令

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能: (1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成) C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }

Void main { EA=1; EX0=1; EX1=1; ITO=1; IT1=1; PX0=1; PX1=0; While(1); } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) { While(1) { P2_1=1; delay02s(); P2_1=0; delay02s(); } } }

单片机中断实验报告

实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer1_init() 开始 设置显示初值启动定时器 判断是否到59 继续 是 否

{ TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int

单片机外部中断(汇编)

由AT89S52内部定时器0,按方式1工作,即作为16位定时器使用每0.05秒T1溢出中断一次。P1口的P1.0~P1.8分别接8个发光二极管。要求编写程序模拟一时序控制装置。L4,L5亮→L3,L6亮→L2,L7亮→L1,L8亮→L2,L7亮→L3,L6亮→L4,L5亮→L1,L2,L3,L4亮→L5,L6,L7,L8亮→全亮→全灭,共10种状态,每种状态的持续时间为0.5秒。然后再从头循环。 由键盘生成外部中断信号,当任意键按下时,为外部中断请求信号,此时L2,L4,L6,L8亮,持续时间为5秒。 ORG 0000H LJMP MAIN ORG 000BH LJMP PIT0 ORG 003H LJMP PIINT0 ORG 0050H ASCTAB:DB 7EH,0BDH,0DBH,0E7H,0DBH,0BDH,07EH,0AAH,55H,00H,0FFH MAIN:MOV P1,#0EH MOV TMOD,#11H SETB PX0;INT0为高优先级 CLR PT0 ;T0为低优先级 SETB IT0;INT0边沿触发 SETB EX0;允许INT0中断 MOV TH0,#4CH MOV TL0,#00H MOV R3,#0BH MOV R2,#14H MOV DPTR,#ASCTAB SETB TR0 SETB ET0 SETB EA HERE:LJMP HERE PIT0:CLR TR0 MOV TH0,#4CH MOV TL0,#00H DJNZ R2,M MOV R2,#14H MOV A,#00H MOVC A,@A+DPTR MOV P0,A INC DPTR DJNZ R3,M

单片机外部中断实验

(仿真部分) 一、实验目的 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验内容 在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。P1.0~ P1.3接LED灯,以显示计数信号。 三、实验说明 编写中断处理程序需要注意的问题是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。 3.INT0和INT1分别接单次脉冲发生器。P1.0~ P1.3接LED灯,以查看计数信号. 四、硬件设计 利用以下元件:AT89C51、BOTTON、CAP、CAP-POL、CRYSTAL、RES、NOT、LED-Yellow。设计出如下的硬件电路。晶振频率为12MHz。 五、参考程序框图 中断处理程序框图

(实验箱部分) 1.实验目的 认识中断的基本概念 学会外部中断的基本用法 学会asm和C51的中断编程方法 2.实验原理 图按键中断 【硬件接法】 P1.1控制LED,低电平点亮 P3.3/INT1接按键,按下时产生低电平 【运行效果】 程序工作于中断方式,按下按键K2后,LED点亮,1.5秒后自动熄灭。 8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。 TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。 如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平,这是一个重要的技巧。 3. 实验步骤 ●参考实验例程,自己动手建立Keil C51工程。注意选择CPU类型。Philips半导体的P89V51RB2。 ●编辑源程序,编译生成HEX文件。 ●ISP下载开关扳到“00”,用Flash Magic软件下载程序HEX文件到MCU BANK1,运行。 运行Flash Magic软件。各步骤操作如下: Step 1: COM Port:选择实际使用的串行口,通常为COM1; Baud Rate:波特率不可设置得过高,推荐用9600; Device:请选择正确的型号89V51RB2; Interface:选择None(ISP)。 Step 2:请勾中“Erase blocks used by Hex File”。

51单片机外部中断

单片机技术与应用 实验报告 实验名称:外部中断(交通灯与急救车) 姓名: 学号: 班级: 指导老师: 完成时间:2012年5月5日

一.实验要求 以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理,并允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过。 二.实验目的 1.学习外部中断技术的基本使用方法。 2.学习中断处理程序的编程方法。 三.实验框图

四.实验程序 Green_NB0 BIT P1.0 Green_DX0 BIT P1.1 Green_DX1 BIT P1.2 Green_NB1 BIT P1.3 Red_NB0 BIT P1.4 Red_DX0 BIT P1.5 Red_DX1 BIT P1.6 Red_NB1 BIT P1.7 Scd EQU 30H ;秒 ORG 0000H JMP START ORG 0003H JMP INIT0 ORG 000BH JMP TIME0 START: MOV Scd, #00H MOV 31H, #00H MOV DPTR, #0F200H ; MOV P1, #69H ;初始亮灯情况:东西绿灯,南北红灯 MOV A,P1 MOVX @DPTR,A CLR 00H CLR F0 MOV TMOD, #01H ;设定定时器1 MOV IE, #83H ;设定中断使能定时器中断0、外部中断0和1 MOV SP, #60H MOV TH0, #30H MOV TL0, #0B0H SETB TR0 LOOP: JNB F0,N0 ;F0用户标志位,此处用作东西绿灯闪烁标识,1为绿灯闪烁 CPL Green_DX0 ;绿灯闪三秒 CPL Green_DX1 MOV A,P1 MOVX @DPTR,A CALL DELAY500MS JMP N1 N0: JNB 00H,N1 ;00H,值为1时,南北绿灯闪烁

单片机外部中断的使用

哈尔滨理工大学荣成学院 单片机原理及应用Protues 仿真实验 班级: 学号: 姓名: 日期:

实验三单片机外部中断的使用 一、实验名称:单片机外部中断的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4..实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 在Proteus 环境下建立如下仿真原理图,并保存为文件;

原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下:ORG 0000H

LJMP MAIN ORG H ;外部中断0程序入口地址LJMP EXINT0 ORG 0030H MAIN: MOV SP,#60H ;堆栈指针初始化 SETB ;设置外部中断 0 为边沿触发 SETB ;开外部中断0 SETB ;开CPU总中断MOV A,#01H LOOP: MOV P1,A RL A CALL DELAY SJMP LOOP DELAY: MOV R1,# ;延时250ms子程序DL1: MOV R2,# DL2: MOV R3,# DJNZ R3,$ DJNZ R2,DL2 DJNZ R1,DL1 ;延时子程序返回EXINT0: PUSH PUSH CLR RS1 SETB RS0 MOV R0,# LP: MOV P1,#0FFH CALL DELAY MOV P1,#00H CALL DELAY DJNZ R0,LP POP PSW POP ACC ;中断返回END 将以上程序补充完整,流水时间间隔,闪烁时间间隔为250ms。C51语言参考程序: #include #include #define uchar unsigned char #define uint unsigned int void delay_ms(uint x) { uint i; uchar j; for(i=0;i

单片机并口扩展

单片机IO口扩展技术 2010-05-09 18:13 0 引言 在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。 MCS-51单片机的并行口有P0、P1、P2和P3,由于P0口是地址/数据总线口,P2口是高8位地址线,P3口具有第二功能,这样,真正可以作为双向I/O口应用的就只有P1口了。这在大多数应用中是不够的,因此,大部分MCS-51单片机应用系统设计都不可避免的需要对P0口进行扩展。 由于MCS-51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机就可以像访问外部RAM存储器单元那样访问外部的P0口接口芯片,以对P0口进行读/写操作。用于P0口扩展的专用芯片很多。如8255可编程并行P0口扩展芯片、8155可编程并行P0口扩展芯片

等。本文重点介绍采用具有三态缓冲的74HC244芯片和输出带锁存的74HC377芯片对P0口进行的并行扩展的具体方法。 1 输入接口的扩展 MCS-51单片机的数据总线是一种公用总线,不能被独占使用,这就要求接在上面的芯片必须具备“三态”功能,因此扩展输入接口实际上就是要找一个能够用于控制且具备三 态输出的芯片。以便在输入设备被选通时,它能使输入设备的数据线和单片机的数据总线直接接通;而当输入设备没有被选通时,它又能隔离数据源和数据总线(即三态缓冲器为高阻抗状态)。 1.1 74HC2244芯片的功能 如果输入的数据可以保持比较长的时间(比如键盘),简单输入接口扩展通常使用的典型芯片为74HC244,由该芯片可构成三态数据缓冲器。74HC244芯片的引脚排列如图1所示。

基与89C51单片机外部中断实验

实验六外部中断实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.P1口上拉接8个LED; 3.在Keil软件中编写程序,对LED显示进行控制,显示方式有两种:(1)0、7亮,1、 6亮,2、5亮,3、4亮,0、7亮循环;(2))3、4亮,2、5亮,1、6亮,0、7亮, 3、4亮循环。 4.在P3.2连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平 5.编写程序:系统对LED显示进行控制,一开始显示方式为(1),当按下P3.2连接 的按键时,系统在(1)和(2)之间切换显示方式 二、实验目的 1.学习端口输入输出的高级应用 2.掌握LED查表显示法 3.掌握外部中断的工作原理 4.掌握外部中断程序设计 三.实验说明 (条理清晰,含程序的一些功能分析计算) 1.程序中void my_int(void) interrupt 0 using 1 { flag=!flag;} //中断子程序是中断子程序,就是按键按下中断一次。 2.以下是灯亮的方式改变,即flag取反一次就改变一次。通过i++或i—实现 变化。 while(1) { P1=LED[i]; //在P1口显示灯亮的方式 delay_ms(500); //延时0.05s if(flag) //判断P3^2开关是否按下 {i++; if(i>=4) //如果灯显示从两边到中间要在回到两边 i=0;} else{i--; if(i<0)//同上 i=3;} 四、硬件原理图及程序设计 (一)硬件原理图设计

(二)程序流程图设计 是 开始 定义变量 i=0;flag=1; P0=LED[i]; Flag ? i++; 否 i--; P3.3按下时进行中 断 Flag=flag!;

单片机外部中断实验(附C语言程序)复习进程

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成)

C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序{ unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } Void main { EA=1; EX0=1; EX1=1 ; ITO=1 ; IT1=1 ; PX0=1; PX1=0; While(1) ; } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) {

(中断、冒泡排序、1602)单片机实验报告

本科生实验报告 实验课程单片机实验 学院名称信息科学与技术学院 专业名称物联网工程 学生姓名曹林鑫 学生学号201413060301 指导教师谢兴红 实验地点6B607 实验成绩 二〇一六年九月二〇一六年十二月

实验一冒泡排序(汇编) 一.实验目的 掌握单片机的汇编语言排序程序。 二.实验内容 将单片机内部的数据进行排序,且使用汇编语言。 三.实验要求 根据实验内容编写一个程序,数据排列顺序要求是从小到大。 四.实验说明 先在片内RAM中存储一组数据,重复地走访过要排序的数据,一次比较两块内存上的数据,如果他们的顺序错误就把他们交换过来。走访数据的工作是重复地进行直到没有再需要交换,也就是说该列数据已经排序完成。 五.算法分析 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:,。 所以,冒泡排序最好的时间复杂度为O(n)。 若初始文件是反序的,需要进行n-1 趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: 冒泡排序的最坏时间复杂度为。 综上,因此冒泡排序总的平均时间复杂度为。 六.实验程序及分析 ORG 0000H LJMP main ORG 0100H main: MOV 40H,#05H//在40H-44H中随机存放五个立即数 MOV 41H,#08H

MOV 42H,#09H MOV 43H,#07H MOV 44H,#06H MOV R7,#04H//控制比较循环的次数 MOV R6,#04H LOOP3: MOV R0,#40H//指向需要进行比较的数据的地址 MOV R1,#41H// MOV A,R6 MOV R7,A CLR A LOOP1: CLR C MOV A,@R1 MOV 49H,A //交换数据前的备份 SUBB A,@R0//用进位标志判断两数的大小 JC LOOP LJMP LOOP4 LOOP: MOV A, @R0//恢复交换前的备份数据 MOV @R1,A MOV @R0,49H LOOP4: INC R0 INC R1 DJNZ R7,LOOP1//控制比较的次数 DJNZ R6,LOOP3//控制比较的轮数 LJMP $

51单片机如何进行ROM外扩

51单片机如何进行ROM外扩 强烈建议用户尽可能不要考虑外扩程序存储器,如果非扩不可,可以仿照 下图所示电路进行扩展 图中P0 口输出外部ROM 的低8 位地址信号,P2 口输出高8 位地址信号;ALE 端输出地址锁存信号,/PSEN 输出程序存储器输出使能信号。两个模块 P89V51RD2 单片机内部有64K 用户ROM 区和8K BOOT ROM 区两个模块两个模块在物理上是分开的,尽管地址重合,但一般不会发生冲突。 用户程序存储区P89V51RD2 内部有64K Flash ROM,不需要用户再进行ROM 扩展地址范围:0000H~FFFFH 其内部分配和其他51 系列单片机是相同的Flash ROM 可以反复擦除和下载程序擦除和编程的方法并行编程器ISP (在系统编程:In-System Program)直接调用单片机BOOTROM 区的IAP 函数IAP (在应用编程:In-Application Program)一般情况下优先使用ISP 方式,更方便、更快捷 关于BOOT ROM 区存储介质:Flash Memory 容量:8K 字节存储内容:ISP 引导程序和IAP 函数这些程序出厂时已经由PHILIPS 已经写入,用户可以对其修改,但建议一般用户不要试图修改它。单片机在复位后会等待400ms,如果 在此期间用户在上位计算机上运行了FlashMagic 等类似ISP 软件,且串口通信正常,单片机将进入BOOT ROM 区运行ISP 引导程序;否则,单片机在400ms 以后将自动从用户ROM 区0000H 单元开始运行用户程序关于ISPISP 在系统编程:In-System Program,指用户不必把单片机从目标板上取下来,在特定的软件配合下直接通过串口(或其他端口)就可以对单片机进行读取、擦除、设置和程序下载等操作,从而取代了并行编程器的很多功能。现在越来越

相关主题
文本预览
相关文档 最新文档