单片机IO及外部中断实验

合集下载

单片机实验报告

单片机实验报告

单片机实验报告实验一:存储器块清零或赋值一、实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。

2 熟悉循环结构程序的编写。

3 熟悉编程环境和程序的调试。

二、实验内容指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。

例如将4000H开始的10个字节内容清零或全部赋值为33H。

注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。

2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。

5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。

三、实验仪器微机、VW,WA VE6000编程环境软件,(单片机实验箱)Lab6000/Lab6000通用微控制器MCS51实验四、实验步骤1、新建工程文件。

(注意:文件不要用中文名称保存时不要用中文路径)2、编写程序。

3、运行和调试过程。

外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH):单步执行程序,观察SFR中外部地址指针的变化;全速执行程序,可以看到外部数据存储器已赋值33H:五、实验结果可以看到外部数据存储器已赋值33H:六、问题讨论本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。

同时,学习掌握汇编程序的编写和调试过程。

实验二:存储块移动一、实验目的1 熟悉51汇编语言程序结构。

2 熟悉循环结构程序的编写,进一步熟悉指令系统。

3 熟悉编程环境和程序的调试。

二、实验内容将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。

单片机实验指导书

单片机实验指导书

目录实验一系统认识实验 (2)实验二端口I/O输入输出实验 (14)实验三外部中断实验 (17)实验四定时器实验 (21)实验五串行口通信实验 (25)实验六串行通信的调试实验 (29)实验七数码管静态显示实验 (34)实验八数码管动态显示实验 (39)实验一系统认识实验一、实验目的1.学习Keil C51编译环境的使用;2.学习STC单片机的下载软件STC-ISP的使用;3.掌握51单片机输出端口的使用方法。

二、实验内容任选单片机的一组I/O端口,连接LED发光二极管,编写程序实现8个LED按二进制加1点亮。

三、接线方案单片机P10~P17/C51单片机接L0~L7/LED显示,如下图:图1-1实验线路四、实验原理51单片机有4个8位的并行I/O端口:P0、P1、P2、P3,在不扩展存储器、I/O端口,在不使用定时器、中断、串行口时,4个并行端口,32根口线均可用作输入或输出。

作为输出时,除P0口要加上拉电阻外,其余端口与一般的并行输出接口用法相同,但作为输入端口时,必须先向该端口写“1”。

例如P0接有一个输入设备,从P0口输入数据至累加器A中,程序为:MOV P0, #0FFHMOV A, P0若将P0.0位的数据传送至C中,程序为:SETB P0.0MOV C, P0.0五、实验步骤1、连接串行通信电缆和电源线;2、根据图1-1实验线路进行电路连接;3、将C51单片机核心板上的三个开关分别拨到“独立”、“运行”“单片机”;4、打开实验箱上的电源开关。

5、利用Keil C51创建实验程序,并进行编译生成后缀为.HEX的文件;6、利用STC-ISP软件将后缀为.HEX的文件下载到单片机ROM中;7、观察实验现象,并记录。

若实验现象有误请重复第5、6步。

六、参考程序ORG 0000H ;程序的开始LJMP MAIN ;转入主程序ORG 0200H ;主程序的开始MAIN: MOV P1,#00H ;P1口做准备M1: INC P1 ;P1口连接输出计数,LCALL DELAY ;转入延时子程序LJMP M1 ;循环DELAY: MOV R5,#255 ;延时子程序D1: MOV R6,#255DJNZ R6,$DJNZ R5,D1RETEND ;程序体结束七、思考题1、利用其他I/O口实现LED加1点亮功能;2、利用P1端口实现流水灯(左移或右移)功能;3、实现LED其他点亮功能。

用 单片机的外部中断来测频率

用 单片机的外部中断来测频率

作者:佚名来源:本站原创点击数: 302 更新时间:2010年08月08日【字体:大中小】//晶振:12M//实验方法:首先要把51hei单片机开发板上的ne555的方波输出信号J7的第一脚用杜邦线// 引入P3.2口,数码管即可显示ne555震荡电路当前的频率值,旋动PR1电位器可// 发现数字有变化.//原理:1秒钟内计数外部脉冲个数,如计数1000次,则表示频率为1000Hz//1秒钟定时采用51单片机定时器0实现,外部脉冲由外部中断0引脚接入#include<reg51.h>#include"51hei.h"#define uchar unsigned charuchar counter1;sbit duan=P2^6; //74HC573的LE端 U5 LED的段选端sbit wei=P2^7; //74HC573的LE端 U4 LED的位选端unsigned int counter2,tmp;uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阳型数码管0—9显示unsigned int dis[6];uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阳型数码管控制端init();delay(uchar);display();jishu();void main(){guandz();init();while(1){jishu();}}//定时器0和外部中断0的初始化init(){EA=1;EX0=1;ET0=1;IT0=1;TMOD=0x01;TH0=0x3c;TL0=0xaf;TR0=1;}//延时程序delay(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=20;b>0;b--);}//外部中断0中断程序void external0() interrupt 0{tmp ;}//定时器0中断程序void timer0() interrupt 1{TH0=0x3c;TL0=0xaf;counter1 ;}//显示程序display(){uchar i;dis[0]=counter2/10000; //获取计数值的万位 dis[5]=counter2000;dis[1]=dis[5]/1000; // 获取计数值的千位 dis[5]=dis[5]00;dis[2]=dis[5]/100; // 获取计数值的百位dis[5]=dis[5]0;dis[3]=dis[5]/10; // 获取计数值的十位dis[4]=dis[5]; // 获取计数值的个位for(i=0;i<5;i ) //依次显示万、千、百、十、个位,动态显示{// P0=0xff;P0=con[i];wei=1;wei=0;P0=table[dis[i]];duan=1;duan=0;delay(1);P0=0;duan=1;duan=0;}}jishu(){if(counter1==20) //定时器定时50ms,故20次中断就表示1秒钟到达{counter2=tmp;display();tmp=0;counter1=0;}elsedisplay();}/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。

实验五 单片机IO口实验

实验五   单片机IO口实验

七、实验报告要求 1、实验内容1、2为必做; 实验内容1 为必做; 每个内容要求有程序框图与程序清单( 2、每个内容要求有程序框图与程序清单(指令 注释) 注释); 4、实验报告应包括实验目的、实验内容、实验 实验报告应包括实验目的、实验内容、 步骤、记录观察现象、实验体会等。 步骤、记录观察现象、实验体会等。
实验
一、 实验目的
定时/ 定时/计数器应用实验
பைடு நூலகம்
1、学习51单片机内部定时计数器的工作原理、基本性能; 学习51单片机内部定时计数器的工作原理、基本性能; 51单片机内部定时计数器的工作原理 2、学习51单片机内部定时计数器的使用和编程方法; 学习51单片机内部定时计数器的使用和编程方法; 51单片机内部定时计数器的使用和编程方法 3、学习定时扩展的编程方法 。 二、实验仪器和设备 PC机 WAVE仿真软件、 6000/S仿真器+POD8 PC机、WAVE仿真软件、E6000/S仿真器+POD8X5X仿真头、 仿真软件 /S仿真器+POD 仿真头、 单片机应用与仿真开发实验台、开关电源等。 单片机应用与仿真开发实验台、开关电源等。 三、实验内容 内容1 用单片机内部定时器T 中断定时,实现每1 口控制的8 LED指 内容1:用单片机内部定时器T1中断定时,实现每1s使P1口控制的8个LED指 示灯循环点亮. 示灯循环点亮. 内容2 利用内部定时计数器T1,按计数器模式工作于方式2 内容2:利用内部定时计数器T1,按计数器模式工作于方式2,对P3 .5(T1) T1 引脚进行计数,每计数5个脉冲P1.5反转一次。 P1.5反转一次 引脚进行计数,每计数5个脉冲P1.5反转一次。
MOV TH0,#0FFH MOV TL0,#0FFH SETB ET0 SETB EA SETB TR0 SJMP $

汇编外部中断及NE555计数实验实验报告

汇编外部中断及NE555计数实验实验报告

外部中断及NE555计数实验11103070315 李青【实验内容】1、利用外部按键中断计数并用数码管显示计数值2、用51单片机T0、T1定时计数器对NE555产生的脉冲信号进行频率计数,频率送LCD显示(或数码管显示)【需要了解的知识】1、GPIO设定2、LCD显示原理,输入与输出及其原理3、定时计数器工作原理及频率测量4、NE555工作原理【实验预习】预读实验指导电子文档的实验十六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一外部中断实验任务:利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。

K5键—计数值加1(外部中断0)K6键—计数值加1(外部中断1)3位数码管显示,最大计数值255实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL 的AT89S52的CPU。

选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。

单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file (*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

单片机外部中断详解及程序

单片机外部中断详解及程序

单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。

比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。

在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。

如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。

但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。

因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。

实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。

下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。

电路结构和接线不变,仅把程序改为下面的形式。

#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。

实验一IO控制实验

实验一 I/O控制实验1.实验目的① 掌握基本IO输入输出操作指令;② 熟练运用keil环境对硬件接口进行调试。

2.预习要求① 理解51单片机IO的输入、输出控制方式;理解P0、P1、P2、P3口做为普通的IO口有何区别。

② 理解实现软件延时程序设计的延时时间估算;③ 认真预习本节实验内容,设计出器件之间的实验连接线,自行编写程序,填写实验报告。

3.实验设备计算机1台;ZDGDTH-1型80C51实验开发系统1套;2号导线4条;8P数据线1条。

4.基础型实验内容① 8位逻辑电平显示的接口电路设计如图1-1所示,用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。

用8P数据线将D2区80C51/C8051F020MCU模块的 JD1(P1口)与A5区8位逻辑电平显示模块JD1A5相连。

在Keil环境运行该程序,观察发光二极管显示情况。

图1-1 8位八位逻辑电平显示接口电路LOOP: MOV A, #0FEHMOV R2,#8OUTPUT: MOV P1,ARL AACALL DELAYDJNZ R2,OUTPUTLJMP LOOPDELAY: MOV R6,#0 ;延时程序MOV R7,#0DELAYLOOP: DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRETEND② 8位拨动开关的接口电路设计如图1-2所示,假设采用P1口控制LED显示,P2口接收拨码开关的输入值,用8P数据线将D2区80C51/C8051F020MCU模块的 JD1(P1口)、JD1(P2口)分别与A5区八位逻辑电平显示模块JD1A5、C6区8位拨动开关模块JD1 C6相连。

在Keil环境运行该程序,观察实验结果。

图1-2 拨码开关接口电路ORG 0000HLL: MOV P2,#0FFHNOPMOV A, P2NOPMOV P1,ALJMP LLEND③ 如图1-3所示,假设采用P1.0口控制外部LED,拨动开关控制外部中断,用二号导线将D2区80C51/C8051F020MCU模块的 P1.0、P3.2口分别与A5区八位逻辑电平显示模块的L0、C8区单次脉冲输出相连。

单片机原理及其应用实验报告

硬件连接:
用导线将实验箱中的P1.0~P1.7分别与LED发光二极管L1~L8相连。INT0
与负脉冲相连(硬件在实验箱的具体位置可以参照文档最后面的附图)。
程序:
C语言程序
# include<regx51.h>
unsigned char STATE;
unsigned char s0;
/*---延时子程序(有参函数),t=n*10ms---*/
/*---定时器0中断程序---*/
ET0P:DEC A ;A减1
MOV TH0,#4CH
MOV TL0,#00H
RETI
END
实验现象:
可以看到用P1口所接的8路LED表示的二进制数每隔0.5s加1。
P1=P1<<1;
if(P0_1!=0|P0_0!=0)
break;
}
}
if(P0_1==0&P0_0==1)
{
P1=0x80;
for(i=1;i<=8;i++)
{delay(100);
P1=P1>>1;
if(P0_1!=0|P0_0!=1)
break;
}
}
if(P0_1==1&P0_0==0)
{
P1=0x01;
END
实验现象:
可以看到LED1大致亮1s后灭1s,如此循环。
(2)实验内容:
I/O口做输入口,一个I/O口接一个拨动开关,另一个I/O口接一个LED发光二极管,单片机读取开关的状态并通过LED显示出来。
有关说明:P0口是一组漏极开路型双向I/O口,也即地址/数据总线复用口。
对端口写“1”可作为高阻抗输入端用。

PIC单片机实验报告

实验一循环点亮LED灯一、实验内容:将RE0-RE5配置为输出,连接6个LED灯;编写程序,调试并运行,下载到实验板上,实现循环点亮。

二、实验目的:学习PIC单片机I/O端口功能及特点,了解I/O端口引脚及连线,控制寄存器。

在开发板上实现循环点亮LED灯。

三、实验要求1.了解掌握PIC单片机的结构和功能。

2.应熟练掌握MPLAB开发环境的使用方法。

3.熟练掌握PIC单片机的程序编写方法。

4.掌握MPLAB IDE硬件调试的技巧。

四、实验准备:1、I/O引脚及连线:I/O端口特点:1、所有I/O 输入端口都是施密特触发器输入,以便增强抗干扰性。

2、外设复用:所有的器件引脚(除VDD、VSS、MCLR 和OSC1/CLKI之外),均为外设与I/O端口所共用。

3、如果外设使能,并且外设正在使用相关引脚时,该引脚将不再作为通用I/O 引脚使用。

4、优先级:I/O 与多个外设复用时I/O 引脚的名称定义了与该引脚相关的各个功能的优先级,如:I/O 引脚与两个外设复用(“外设A”和“外设B”)外设A 对引脚的控制具有最高优先权,若外设A 和外设B 同时使能,外设A将控制I/O 引脚5、电平变化通知引脚:电平变化通知引脚(CN)内接输入电平变化通知模块,使得dsPIC30F器件能够向处理器发出中断请求,以响应所选输入引脚上的状态变化。

I/O端口控制寄存器:所有的端口引脚,都有三个与端口引脚的操作直接相关的寄存器。

①TRISx:数据方向寄存器。

决定各个引脚是输入引脚还是输出引脚。

–若某个I/O 引脚的TRIS 位为“1”,则该引脚是输入引脚。

–某个I/O 引脚的TRIS 位为“0”,则该引脚被配置为输出引脚。

–复位以后,所有端口引脚被定义为输入。

②PORTx:I/O端口寄存器。

访问的是I/O引脚上的数据。

读的是端口引脚值;写端口引脚,写的是端口数据锁存器(LATx )。

③LATx:I/O端口锁存寄存器。

读的是数据锁存器里锁存的值;写锁存值,写的是端口数据锁存器(LATx )五、实验过程及结果:实验源程序:#include "p30f4011.h”int main(void){int led=0x01;unsigned long int i=0;TRISE =0x100;PORTE=led;while(1){PORTE =led;for (i=0;i<65000;i++){}; //延时led = led<<1; //当第6个LED灯亮后,重新从第1个LED灯点亮if (led == 0x40)led = 0x01;}return 0;}先编写程序,检验正确后,下载到实验板上并运行,实验板上6个LED灯开始循环点亮,通过修改程序,还可以改变延迟时间,即可控制LED灯点亮时间。

单片机实验实验指导书

目录实验一P1口输入、输出实验 (1)实验二P3口输出控制继电器实验 (4)实验三简单I/O实验(交通灯控制) (6)实验四外部中断实验(急救车与交通灯实验) (8)实验五定时器实验 (11)实验六8155输入输出实验 (13)实验七矩阵键盘实验 (15)实验八8279显示实验 (17)实验九串并转换实验 (20)实验十A/D转换实验 (22)实验十一步进电机控制实验 (24)实验十二D/A转换实验 (27)实验十三传送带控制系统综合实验 (29)实验十四机械手控制实验 (32)实验一 P1口输入、输出实验一.实验要求1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

延时时间500ms。

2.P1口做输入口,接八个开关,以74LS273作输出口,编写程序读取开关状态,将状态写入P0口,在发光二极管上显示出来。

二.实验目的1.学习P1口的使用方法。

2.学习延时子程序的编写和使用。

三.实验电路及连接实验1-1电路图如下:图1.1实验1-2中:P1.0-P1.7接八个按钮K1-K8,P0.0-P0.7接八个发光二极管L1-L8。

四.实验说明1.P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止,因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响,若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

2.延时子程序的延时计算问题对延时子程序DELAY: MOV R0,#00HDELAY1: MOV R1,#0B3HDJNZ R1,$DJNZ R0,DELAY1查指令表可知MOV,DJNZ指令均需要两个机器周期,而一个机器周期时间长度为12/12MHZ(假设晶振频率是12MHZ),所以该段程序执行时间为:((0B3+1)*256+1)*2*12/12000000=100ms五.实验程序流程图实验要求1的程序框图:实验要求2的程序框图:图1.2 图1.3六、调试方法第一步:打开位于d:\单片机实验\实验一\1_1.uv2,进行实验1_1打开位于d:\单片机实验\实验一\1_2.uv2,进行实验1_2第二步:在资源管理器中如打开.src文件,在程序窗口中输入已编好的程序,保存。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机I/O及外部中断实验 一、实验目的 1.学习P1、P3口作为基本I/O口的使用方法,掌握对发光二极管和继电器的程序控制方法; 2.学习在单片机系统中扩展简单I/O接口的方法,学习模拟交通灯控制的方法; 3.掌握外部中断技术的基本使用方法和中断处理程序的编程方法。

二.实验仪器:

1.仿真教学实验机(5196ET) 一台 2.直流稳压电源(DF 1731 SB 3A) 一台 3.PC机 一台 三、实验内容 1、 P1口做输出口实验 (1)实验要求:P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。 (2)电路及连线如下:

(3)实验说明 1.延时子程序的延时计算问题 对于程序 DELAY: MOV R0,#00H DELAY1: MOV R1,#0B3H DJNZ R1,$ DJNZ R0,DELAY1 查指令表可知 MOV,DJNZ 指令均需用两个机器周期,而一个机器周期时间长度为12/11.0592MHz,所以该段程序执行时间为: ((0B3+1)×256+1)×2×12÷11059200=100.002mS (4)实验框图(见TP1A.ASM主程序框图): (5)P1.0~P1.7接DL1.~DL8,运行程序TP1A,观察现象。 TP1A程序: ORG 0000H LJMP START ORG 0040H START: MOV SP,#60H MOV A,#01H ROTATE: MOV P1,A ;点亮一个LED RL A ;循环右移 LCALL DELAY ;延时 NOP SJMP ROTATE DELAY: ;延时子程序(1秒) MOV R0,#0AH DELAY1: MOV R1,#00H DELAY2: MOV R2,#0B2H DJNZ R2,$ DJNZ R1,DELAY2 DJNZ R0,DELAY1 RET END (6)修改程序TP1A,使指示灯左循环。 * (7)修改程序TP1A,使指示灯两两右循环。 * (8)修改程序TP1A,使指示灯从两边向中间循环。 * (9)修改程序TP1A,使指示灯右循环间隔时间为0.1秒。

2、 P1口做输入口实验 (1)实验要求:P1口做输入口,接八个纽子开关,以实验机上74LS273做输出口,编写程序读取开关状态,将此状态在发光二极管上显示出来。 (2)电路及连线如下: (3)实验说明:P1口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。若不对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。 (4)实验框图(见TP1B.ASM主程序框图): (5)P1.0~P1.7接K1~K8,PO0~PO7接DL1~DL8,273CS/接8300H,运行程序TP1B,观察现象。 TP1B程序: ORG 0000H LJMP START ORG 0040H START: MOV DPTR,#08300H ;并行输出口地址 READ: MOV P1,#0FFH ; 因P1是准双向口,所以把P1口 作为输入口时,应先置高电平. MOV A,P1 ;读开关状态 MOVX @DPTR,A ;把读入的数据输出 AJMP READ END

3. 交通灯控制 (1)实验要求:编写程序模拟一个时序控制装置,具体为以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。

(2)实验电路及连线 (3)实验说明 因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。 双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。 (4)实验框图 TRLED1.ASM主程序框图 (5)PO0~PO3接DG1~DG4,PO4~PO7接DR1~DR4,D16的/CS接8300H。运行程序TRLED1,观察现象。 ORG 0000H LJMP START ORG 0040H START: MOV SP,#60H LCALL STATUS0 ;初始状态(都是红灯) CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯 LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATUS3 ;南北红灯,东西绿灯 LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLE STATUS0: ;南北红灯,东西红灯 MOV DPTR,#8300H MOV A,#0FH MOVX @DPTR,A MOV R2,#10 ;延时1秒 LCALL DELAY RET STATUS1: ;南北绿灯,东西红灯 MOV DPTR,#08300H MOV A,#96H ;南北绿灯,东西红灯 MOVX @DPTR,A MOV R2,#200 ;延时20秒 LCALL DELAY RET STATUS2: ;南北绿灯闪转黄灯,东西红灯 MOV DPTR,#8300H MOV R3,#03H ;绿灯闪3次 FLASH: MOV A,#9FH MOVX @DPTR,A MOV R2,#03H LCALL DELAY MOV A,#96H MOVX @DPTR,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH MOV A,#06H ;南北黄灯,东西红灯 MOVX @DPTR,A MOV R2,#10 ;延时1秒 LCALL DELAY RET STATUS3: ;南北红灯,东西绿灯 MOV DPTR,#8300H MOV A,#69H MOVX @DPTR,A MOV R2,#200 ;延时20秒 LCALL DELAY RET STATUS4: ;南北红灯,东西绿灯闪转黄灯 MOV DPTR,#8300H MOV R3,#03H ;绿灯闪3次 FLASH1: MOV A,#6FH MOVX @DPTR,A MOV R2,#03H LCALL DELAY MOV A,#69H MOVX @DPTR,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH1 MOV A,#09H ;南北红灯,东西黄灯 MOVX @DPTR,A MOV R2,#10 ;延时1秒 LCALL DELAY NOP RET DELAY: ;延时子程序 PUSH 2 PUSH 1 PUSH 0 DELAY1: MOV 1,#00H DELAY2: MOV 0,#0B2H DJNZ 0,$ DJNZ 1,DELAY2 ;延时 100 mS DJNZ 2,DELAY1 POP 0 POP 1 POP 2 RET END

*(6)编写程序,使东西南北四个灯均闪烁黄灯(闪烁时间为1秒)。

4. 外部中断实验(急救车与交通灯) (1)实验要求:在交通灯实验内容的基础上增加允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过。 (2)实验电路及连线 (3)实验说明 中断服务程序的关键是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EX0位。 本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。 实验开始时K8应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。 (4)实验框图

INT0中断程序框图 TRLED2.ASM主程序框图 (5)PO0~PO3接DG1~DG4,PO4~PO7接DR1~DR4,D16的/CS接8300H,K8接P3.2。运行程序TRLED2,观察现象。 ORG 0000H LJMP START ORG 0003H ;INT 0 中断入口地址 LJMP INT0 ORG 0040H START: MOV SP,#60H SETB EX0 ;INT 0 中断有效 SETB IT0 SETB EA LCALL STATUS0 ;初始状态(都是红灯) CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯 LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATUS3 ;南北红灯,东西绿灯 LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLE INT0: PUSH PSW ;保护现场 PUSH 2 PUSH ACC MOV DPTR,#8300H MOV A,#0FH ;南北,东西都亮红灯 MOVX @DPTR,A MOV R2,#100 ;延时10秒 LCALL DELAY POP ACC ;恢复现场 MOVX @DPTR,A POP 2 POP PSW RETI STATUS0: ;南北红灯,东西红灯 MOV DPTR,#8300H MOV A,#0FH MOVX @DPTR,A MOV R2,#10 ;延时1秒 LCALL DELAY RET STATUS1: ;南北绿灯,东西红灯 MOV DPTR,#8300H MOV A,#96H ;南北绿灯,东西红灯 MOVX @DPTR,A MOV R2,#200 ;延时20秒 LCALL DELAY RET STATUS2: ;南北绿灯闪转黄灯,东西红灯 MOV DPTR,#8300H MOV R3,#03H ;绿灯闪3次 FLASH: MOV A,#9FH MOVX @DPTR,A MOV R2,#03H LCALL DELAY MOV A,#96H MOVX @DPTR,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH MOV A,#06H ;南北黄灯,东西红灯 MOVX @DPTR,A MOV R2,#10 ;延时1秒 LCALL DELAY RET STATUS3: ;南北红灯,东西绿灯

相关文档
最新文档