汇编GPIO实验实验报告

更新时间:2023-05-19 21:11:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

汇编GPIO实验实验报告

GPIO实验

实验1 LED闪烁

一.实验任务

P0,P1端口的LED亮300ms,灭300ms,如此循环。发光二极管在不停地一亮一灭,时间间隔为300ms。形成闪烁的效果。

二、实验步骤

1.用keil软件在电脑上编写和编译源程序。

2、在ME850实验开发仪上,将JP1(MCU类型选择跳线)的跳线帽 短接在“51”的位置,JP9的跳线帽全部插上;

3、将AT89S51单片机芯片放入ME850的锁紧插座,芯片缺口方向在上;

4、启动MEFlash软件,正常打开候后右下角会显示实验仪的型号和连接状态。如不能联机,强检查USB驱动是否正常安装,供电电压是否为正常的5V;

5、在软件中点击“器件”按钮,选择型号“AT89S52”;

6、在软件中点击“加载”按钮,定位到产品光盘Examples_A51\EX1_LED\LED.HEX,点击“打开”,弹出“加载文件”对话框,安默认点击确定即可;

7、在软件中点击“擦除”按钮,再点击“编程”按钮,编程完毕,即可看到16个发光二极管都在闪烁了。

三、汇编源程序:

ORG 0000H ;汇编起始地址为0000H

AJMP MAIN ;跳转到主程序

ORG 0050H ;汇编起始地址为0050H

MAIN:

MOV P0,#0FFH ;将端口P0初始化高电平 MOV P2,#0FFH ;将端口P2初始化高电平 LOOP:

MOV P0,#00H ;将端口P0设置为低电平,LED显示 MOV P2,#00H ;将端口P2设置为低电平,LED显示 ACALL DELAY ;调用子程序DELAY,延时300ms

MOV P0,#0FFH ;将端口P0设置为高电平关闭LED 显示 MOV P2,#0FFH ;将端口P2设置为高电平关闭LED 显示 ACALL DELAY ;跳转到延时子程序DELAY,延时300ms

AJMP LOOP ;跳转到LOOP子程序

汇编GPIO实验实验报告

;------------------------------------------------

; 延时子程序

; 延时300ms (11.0592MHz)

;------------------------------------------------ DELAY: ;用R5、R6、R7控制循环

MOV R5,#3 ;R5赋值为3

DEL1:

MOV R6,#200 ;R6赋值为200

DEL2:

MOV R7,#230 ;R7赋值为230

DEL3:

DJNZ R7,DEL3 ;第一层循环

DJNZ R6,DEL2 ;第二层循环

DJNZ R5,DEL1 ;第三层循环

RET

END ;结束,返回主程序

四.程序流程图

延时300ms后,程序返回,继续执行。

注意事项:

1)是否正确加载了烧写文件(必须先选芯片再加载文件)

2)检查是否正确放置了芯片(现房芯片,再压下锁紧座手柄锁紧)

3)检查单片机芯片是否已经损坏;如已损坏,需更换器件

五.实验现象

P0、P2 端口的 LED亮 300ms,灭300ms,如此循环。发光二极管在不停地一亮

汇编GPIO实验实验报告

一灭,间隔时间为 300ms,形成闪烁效果。

实验2 LED流水灯

一 实验任务

P0、P2端口的LED先从从右至左方向依次点亮,再从左至右方向依次点亮,如此循环形成流水灯效果。

二、实验步骤

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.下面依序是存储模式、程序空间大小等设置,均用默认值即可。点击Output选项,选中“Create Hex File”,

10、单击编译按钮,编译当前源程序;

11、运行,查看效果。

三、汇编源程序

ORG 0000H ;汇编起始地址为0000H

AJMP MAIN ;跳转到主程序

ORG 0050H ;汇编起始地址为0050H ;------------------------------------------------

MAIN:

MOV P0,#0FFH ;将端口P0初始化为高电平

MOV P2,#0FFH ;将端口P2初始化为高电平

LOOP:

MOV A,#0FEH ;赋初始值

汇编GPIO实验实验报告

MOV R0,#08H ;移动次数8次

LOOPL: ;左移显示

MOV P0,A ;送数显示

MOV P2,A ;送数显示

RL A ;左移一位

ACALL DELAY ;延时300ms

DJNZ R0,LOOPL ;是否左移8次? 控制循环8次

MOV P0,#0FFH ;关闭LED显示

MOV P2,#0FFH ;关闭LED显示

ACALL DELAY ;延时300ms

MOV A,#7FH ;赋初始值

MOV R0,#08H ;移动次数

LOOPR: ;右移显示

MOV P0,A ;送数显示

MOV P2,A ;送数显示

RR A ;右移一位

ACALL DELAY ;延时300ms

DJNZ R0,LOOPR ;是否右移8次?控制循环8次

MOV P0,#0FFH ;关闭显示

MOV P2,#0FFH ;关闭显示

ACALL DELAY ;延时300ms

AJMP LOOP ;跳转到LOOP

;------------------------------------------------

; 延时子程序

; 延时300ms (11.0592MHz)

;------------------------------------------------ DELAY: ;R5、R6、R7控制循环

MOV R5,#3 ;R5赋值为3

DEL1:

MOV R6,#200 ;R6赋值为200

DEL2:

MOV R7,#230 ;R7赋值为230

DEL3:

DJNZ R7,DEL3 ;第一层循环

DJNZ R6,DEL2 ;第二层循环

DJNZ R5,DEL1 ;第三层循环

RET

;------------------------------------------------

END ;结束

汇编GPIO实验实验报告

四、流程图

五、实验现象

LED灯从右至左依次点亮,然后又从左向右依次点亮。可按F10或F11控制。

实验3 继电器控制

一.实验任务

用按键控制继电器的工作状态:

K1-吸和键,K2-释放键

按K1键,继电器吸合,DL11灯亮

按K2键,继电器释放,DL11灯灭

二.实验步骤

首先短接JP16短接子,使继电器借口电路使能,并将JP8的8个短接子全部

汇编GPIO实验实验报告

用短接帽短接,使独立按键与相应的端口接通。

其余步骤仿照实验2 的步骤

三.程序流程图

四.汇编源程序

KEY_NEW EQU 40H

KEY_OLD EQU 41H

K1 BIT P1.4 ;

K2 BIT P1.5 ;

RELAY BIT P3.6 ;继电器控制线

;---------------------------------------------------------- ORG 0000H ;汇编起始地址为0000H

AJMP MAIN ;跳转到主程序

ORG 0050H ;汇编起始地址为0050H

MAIN: ;主程序

MOV SP,#60H ;设置栈指针

MOV P0,#0FFH ;将P0端口初始化为高电平 MOV P2,#0FFH ;将P2端口初始化为高电平 MOV KEY_OLD,#03H ;初始键比较值

KEY_CHK: ;循环检测按键是否按下 ACALL SCAN_KEY ;输入按键状态

汇编GPIO实验实验报告

XRL A,KEY_OLD ;查按键值是否改变

JZ KEY_CHK ;若无键被按,则跳回KEY_CHK

ACALL DELAY ;延时去抖

ACALL SCAN_KEY ;再次检查按键值

XRL A,KEY_OLD ;查按键值是否改变

JZ KEY_CHK ;若无键被按,则跳回KEY_CHK

MOV KEY_OLD,KEY_NEW ;保存按键状态

ACALL PROC_KEY ;转移到子程序PROC_KEY

AJMP KEY_CHK ;跳转到子程序KEY_CHK

;---------------------------------------------------------

; 扫描按键子程序

; 返回值: A --- 按键状态

;--------------------------------------------------------- SCAN_KEY:

CLR A ;清零

MOV C,K1

MOV ACC.0,C ;把K1赋给ACC.0

MOV C,K2

MOV ACC.1,C ;把K2赋给ACC.1

MOV KEY_NEW,A ;无键按下 key_new=03H

RET ;返回

;---------------------------------------------------------

; 按键处理子程序

;--------------------------------------------------------- PROC_KEY:

MOV A,KEY_NEW

JNB ACC.0,PROC_K1 ;K1键按下

JNB ACC.1,PROC_K2 ;K2键按下

RET

PROC_K1: ;按键K1处理程序

CLR RELAY ;继电器吸合

RET ;返回

PROC_K2: ;按键K2处理程序

SETB RELAY ;继电器释放

RET ;返回

汇编GPIO实验实验报告

;---------------------------------------------------------

; 延时子程序(10MS)

;--------------------------------------------------------- DELAY: ;R6、R7控制循环

MOV R6,#10 ;R6赋值为10

DEL1:

MOV R7,#185 ;R7赋值为185

DEL2:

NOP ;空操作,延迟一个机器周期 NOP

NOP

DJNZ R7,DEL2 ;第一层循环

DJNZ R6,DEL1 ;第二层循环

RET ;返回

;---------------------------------------------------------

END ;结束

五.实验现象

按K1键,DL11亮;按K2键,DL11灭。

本文来源:https://www.bwwdw.com/article/niq4.html

Top