gpio输出控制实验报告流水灯5篇gpio输出控制实验报告流水灯 实验二 IO口实现LED灯闪烁一、实验目的: 1.正确安装keil软件2.正确安装调试驱动,熟悉实验板的用法3.学习IO口的使用方法。下面是小编为大家整理的gpio输出控制实验报告流水灯5篇,供大家参考。
篇一:gpio输出控制实验报告流水灯
二IO 口实现 LED 灯闪烁 一、实验目的:
1. 正确安装 keil 软件 2. 正确安装调试驱动,熟悉实验板的用法 3. 学习 IO 口的使用方法。
二、实验设备:
单片机开发板、学生自带笔记本电脑 三、
实验内容:
利用单片机 IO 口做输出,接发光二极管,编写程序,使发光二极管按照要求点亮。
四、实验原理:
1. LPC1114 一共有 42 个 GPIO,分为 4 个端口,P0、P1、P2 口都是 12 位的宽度,引脚从 Px.0~Px.11,P3 口是 6 位的宽度,引脚从 P3.0~P3.5。引脚的内部构造如图所示。其中 Rpu 为上拉电阻、Rpd 为下拉电阻。
2. 为了节省芯片的空间和引脚的数目,LPC1100 系列微处理器的大多数引脚都采用功能复用方式,用户在使用某个外设的时候,要先设置引脚。控制引脚设置的寄存器
称之为 IO 配置寄存器,每个端口管脚 PIOn_m 都分配一个了一个 IO 配置寄存器IOCON_PIOn_m,以控制管脚功能和电气特性。
3. IOCON_PIOn_m 寄存器其位域定义如表所列。
位域 符号 描述 2:0 FUNC 选择管脚功能 000:选择功能 1 001:选择功能 2(如果未定义功能 2,则保留)
010:选择功能 3(如果未定义功能 3,则保留)
011:选择功能 4(如果未定义功能 4,则保留)
100~111:保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制)
00:无效模式(无上拉和下拉电阻被允许)
01:允许下拉电阻 10:允许上拉电阻 11:中继模式 5
HYS 滞后模式 1:禁止 0:允许 6 - 保留,复位值为 1 7 ADMODE 选择 模拟/数字模式(无 AD 功能,则保留,复位值为 1)
0:模拟输入模式 1:数字功能模式 9:8
I2CMODE 选择为 I2C 模式 00:标准 I2C 模式/快速 I2C 模式(默认)
01:标准 I/O 功能
10:FM+I2C 模式 11:保留 31:8 - 保留,复位值为 0
4. 各引脚 IOCON 寄存器的位[2:0]配置不同的值所相应功能。
5. GPIO 寄存器 GPIO数据寄存器用于读取输入管脚的状态数据,或配置输出管脚的输出状态,表5-5对GPIOnDATA寄存器位进行描述。
位 符号 访问 描述 11:0 DATA R/W 管脚PIOn_0~PIOn_11输入数据(读)或输出数据(写)
31:12 - - 保留 GPIO的数据方向的设置是通过对GPIOnDIR寄存器的位进行与或操作实现的,LPC1100微处理器和8051单片机的GPIO不同,在使用前一定要先设置数据方向才能使用, 位 符号 访问 值 描述 11:0 IO R/W 0 引脚PIOn_0~PIOn_11配置为输入 1 引脚PIOn_0~PIOn_11配置为输出 31:12 - - - 保留
6. 发光二级管的工作电压和工作电流如何? _______________________________________________________________________________________________________________________________________________________________________________________________________________________________。
7. 发光二极管的限流电阻如何计算? __________________________________________________________________________。
五、实验原理图:
六、实验步骤:
一、基本要求
1、默写发光二极管闪烁程序。
二、扩展要求
1.查找关于呼吸灯的资料,弄懂呼吸灯工作原理。
2.自行编写呼吸灯代码,在实验板子上面验证。
七、程序框图:
八、 供 参考程序:
/*************************************************************************/
#include "LPC11XX.H"
// 头文件
#define LED1_ON()
(LPC_GPIO1->DATA &= ~(1<<0))
// 点亮连接到 P1.0 的 LED #define LED1_OFF() (LPC_GPIO1->DATA |= (1<<0))
// 熄灭连接到 P1.0 的LED #define LED2_ON()
(LPC_GPIO1->DATA &= ~(1<<1))
// 点亮连接到 P1.1 的 LED #define LED2_OFF() (LPC_GPIO1->DATA |= (1<<1))
// 熄灭连接到 P1.1 的LED /************************************************************************** * FunctionName
: Delay() * Description
: 延时函数 * EntryParameter : None * ReturnValue
: None **************************************************************************/ void Delay()
{
uint16_t i,j;
for(i=0;i<5000;i++)
for(j=0;j<200;j++); } /************************************************************************** * FunctionName
: LedInit() * Description
: 初始化 LED 引脚 * EntryParameter : None * ReturnValue
: None **************************************************************************/ void LedInit(void) {
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能 IOCON 时钟
LPC_IOCON->R_PIO1_0 &= ~0x07;
LPC_IOCON->R_PIO1_0 |= 0x01; //把 P1.0 脚设置为 GPIO
LPC_IOCON->R_PIO1_1 &= ~0x07;
LPC_IOCON->R_PIO1_1 |= 0x01; //把 P1.1 脚设置为 GPIO
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能 IOCON 时钟
LPC_GPIO1->DIR |= (1<<0); // 把 P1.0 设置为输出引脚
LPC_GPIO1->DATA |= (1<<0); // 把 P1.0 设置为高电平
LPC_GPIO1->DIR |= (1<<1); // 把 P1.1 设置为输出引脚
LPC_GPIO1->DATA |= (1<<1); // 把 P1.1 设置为高电平 } /************************************************************************** * FunctionName
: main() * Description
: 主函数 * EntryParameter : None * ReturnValue
: None **********************************************************************/ int main(void)
{
LedInit();
while(1)
{
Delay();
LED1_ON();
LED2_OFF();
Delay();
LED1_OFF();
LED2_ON();
}
}
篇二:gpio输出控制实验报告流水灯
IO 输出控制实验 1 1 、实验目的(1)
掌握LPC2200专用工程模块的使用 (2)
掌握EASYJTAG仿真器的安装与使用 (3)
在开发平台上运行第一个程序 (4)
熟悉ARM7的GPIO控制 2 、实验设备
硬件:
PC 机
一台
MAGICARM2200-S教学实验开发平台
一套
软件:
Windows98/XP/2000 系统,ADS1.2 集成开发环境 3 、实验内容 控制开发平台的蜂鸣器报警。
4、原理图:
5、源代码 :
/**************************************************************************** * 文 件 名:main.c * 功
能:蜂鸣器控制。对蜂鸣器 B1 进行控制,采用软件延时方法。
*
使用 I/O 口直接控制,采用灌电流方式。
* 说
明:短接蜂鸣器跳线 JP7。断开 CF 卡跳线 JP13、GPIO 接口 J17。
****************************************************************************/ #include
"config.h" #define
BEEPCON
0x00000080
// P0.7 引脚控制 B1,低电平蜂鸣
/****************************************************************************
* 名
称:DelayNS() * 功
能:长软件延时。
* 入口参数:dly
延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void
DelayNS(uint32
dly) {
uint32
i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
} }
/**************************************************************************** * 名
称:main() * 功
能:控制蜂鸣器蜂鸣。
****************************************************************************/ int
main(void) {
PINSEL0 = 0x00000000;
// 设置管脚连接 GPIO
IO0DIR = BEEPCON;
// 设置 I/O 为输入输出模式
// 设置 P0.7 为输出
while(1)
{
IO0SET = BEEPCON;
// BEEPCON = 1
DelayNS(15);
IO0CLR = BEEPCON;
// BEEPCON = 0
DelayNS(15);
}
return(0); } /****************************************************************************** GPIO 输出控制实验 2 1 、实验目的
熟悉 ARM 的 的 GPIO 控制
2 、实验设备
硬件:
PC 机
一台
MAGICARM2200-S教学实验开发平台
一套
软件:
Windows98/XP/2000 系统,ADS1.2 集成开发环境 3 、实验内容 制 控制 LED 显示 4 、原理图
5 、源代码 :
/**************************************************************************** * 文 件 名:main.c * 功
能:LED 显示控制。
*
通过 GPIO 直接控制 8 个 LED 产生流水灯效果 * 说
明:短接 LED 跳线 JP5。
*
这个警告可忽略,C2892E: signed constant overflow ****************************************************************************/ #include
"config.h" #define
LED1
1<<16
// P1.16
#define
LED2
1<<17
// P1.17
#define
LED3
1<<18
// P1.18
#define
LED4
1<<19
// P1.19
#define
LED5
1<<20
// P1.20
#define
LED6
1<<21
// P1.21
#define
LED7
1<<22
// P1.22
#define
LED8
1<<23
// P1.23
#define
LEDCON 0x00ff0000
const uint32
DISP_TAB[8] = { 0xff01ffff, 0xff02ffff, 0xff04ffff, 0xff08ffff,
0xff10ffff, 0xff20ffff, 0xff40ffff, 0xff80ffff};
/**************************************************************************** * 名
称:DelayNS() * 功
能:长软件延时 * 入口参数:dly
延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void
DelayNS(uint32
dly) {
uint32
i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
} }
/**************************************************************************** * 名
称:main() * 功
能:根据表 DISP_TAB 来控制 LED 显示。
****************************************************************************/ int
main(void) {
uint8
i;
PINSEL1 = 0x00000000;
// 端口配置为 GPIO
IO1DIR = LEDCON;
// 配置 LED 控制 I/O 方向为输出
while(1)
{
for(i=0; i<8; i++)
{
IO1CLR = DISP_TAB[i];
// 输出 LED 显示数据
DelayNS(10);
// 延时
IO1SET = 0xffffffff;
// 全部输出高电平
}
}
return(0); } /******************************************************************************
篇三:gpio输出控制实验报告流水灯
一I /O 口输出实验—LED 流水灯实验 一 、 实验要求
利用 51 单片机及 8 个发光二极管等器件,构成一个流水灯单片机系统。
二 、 实验目的
1 1 、掌握单片机最小系统的构成; 2 2 、掌握 I/O 口的使用及驱动能力的概念; 3 3 、熟悉移位指令和软件延时程序。
三、实验电路及连线
1、Proteus 实验电路
2 2 、 硬件验证实验(51 板+006 板)
CPU 板 006 板 P1.0 LED1 P1.1 LED2 P1.2 LED3 P1.3 LED4 P1.4 LED5 P1.5 LED6 P1.6 LED7 P1.7 LED8 +5V +5V GND GND
四、实验说明 1、主要知识点概述:
本实验涉及到三个知识点:单片机最小系统的构成、单片机 I/O 口的使用以及软件延时程序的编写。
1)单片机最小系统由单片机芯片、时钟电路以及复位电路构成。
2)I/O 口的使用:P1 口是准双向口。它作为输出口时与一般的双向口使用方法相同,即当 P1 口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据可能是不正确的。
3)延时子程序的延时计算问题。对于程序
DELAY:
MOV
R6,#200
DEL1:
MOV
R7,#250
DEL2:
DJNZ
R7,DEL2
DJNZ
R6,DEL1
RET 由指令表可知 MOV、DJNZ 指令均需用两个机器周期,在采用 12MHz 晶振时,一 个 机 器 周 期 时 间 长 度 为 1us , 所 以 该 段 程 序 执 行 时 间 约 为 :[(250*2+2)*200+2]*1us=1000402≈100ms
2、实验效果说明:
发光二级管进行流水灯操作,从上到下依次点亮。
五、实验流程图
六、实验步骤 1、Proteus 仿真 a、在 Proteus 中打开设计文档 流水灯.DSN; b 、建立实验程序并编译,加载 hex 文件,仿真;
c 、如不能正常工作,打开调试窗口进行调试
参考程序:
ORG
00H START:
MOV
R2,#8
MOV
A,#0FEH LOOP:
MOV
P1,A
LCALL
DELAY
RL
A
;循环左移 DEC
R2 JNZ
LOOP
;判断移动是否超过 8 位,未超过继续循环
LJMP
START DELAY:
MOV
R5,#20
;延时程序,延时 0.2s 否是开
始 R2=8, ACC=0FEH 延时 0.2S P1=ACC ACC 左移一次,R2=R2-1 R2=0?
D1:
MOV
R6,#20 D2:
MOV
R7,#248
DJNZ
R7,$
; 跳转到本句
DJNZ
R6,D2
DJNZ
R5,D1
RET
END
2 2 、 实验板验证
a 、用 ISP 下载 hex 程序到 CPU b、按连接表连接电路 c 、检查验证结果
3、扩展实验 a. 改变延时时间为 1s
b. 改变流水灯流动方向 c.
改变流水灯的流动样式 设计流程和程序:
七、实验结果和体会
八、建议
篇四:gpio输出控制实验报告流水灯
大学物理与电子信息工程学院 杨卫波嵌入式系统原理与应用第3章 GPIO入门之流水灯02:27嵌入式系统原理与应用2Cortex M3的两种主流开发环境• IAR Embedded Workbench for ARM(EWARM)– IAR Systems公司为ARM微处理器开发的一个集成开发环境– 入门容易、使用方便、代码紧凑– IAR针对各种单片机和嵌入式处理器均有相应的版本,通用性好• Real View MDK(RVMDK)– 德国KEIL公司公司专门为ARM开发的集成开发环境– 功能齐全,但通用性稍差
基于ARM的RealView MDK开发环境• MDK(Microcontroller Development Kit)是Keil公司(现在已经被ARM公司收购)开发的ARM开发工具。Keil开发工具早期用于51家族单片机的开发。• MDK包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件。其调试功能强大,能够精确地仿真整个微控制器,包括其片上外设。• MDK的最新版本是uVision 4.72,利用它既可以开发庞大的51家族单片机系统,又可以开发基于ARM7、ARM9、以及Cortex-M3的微控制器应用程序。
3.1安装MDK02:27嵌入式系统原理与应用4新建工程之前先要把MDK 这个软件安装好,这里用的版本是V4.12 ,在安装完成后可以在工具栏help->about uVision选项卡中查看到版本信息。选项卡中查看到版本信息。
RealView MDK集成开发环境总揽
Realview MDK 的使用使用Realview MDK创建、完成一个新的工程需要以下几个环节:1. 选择工具集2. 创建工程并选择处理器3. 创建源文件4. 配置硬件选项5. 配置对应启动代码6. 编译链接7. 模拟调试8. 文件下载联机调试
选择Project→New Project…,输入创建的新工程的文件名,即可创建一个新的工程。创建一个新工程时,需要为工程选择一款对应处理器,或者也可以通过单击Project-Select Device for Target…在本课程中,我们选择"STM32F103ZE"3.2
建立工程模板
加入CPU的相关启动代码启动代码是用来初始化目标设备的配置,完成运行时系统的初始化工作,对于嵌入式系统开发而言是必不可少的。一般而言,对于一种结构的启动代码是用来初始化目标设备的配置,完成运行时系统的初始化工作,对于嵌入式系统开发而言是必不可少的。一般而言,对于一种结构的CPU,系统的启动代码是通用的。这段代码是,系统的启动代码是通用的。这段代码是CPU 复位后首先要执行的代码,通常以 汇编格式编写,由芯片厂家或者编译器工具设计方直接提供,用户基本不用任何改动即可使用。这里选择“编写,由芯片厂家或者编译器工具设计方直接提供,用户基本不用任何改动即可使用。这里选择“ 否 ”
• 一个工程为了方便管理和设置不同配置,把里面的文件分成文件组,一个组内文件可以整体进行有关配置。• 在Project Workspace→Files菜单项中选择文件组,右击将会弹出如图所示的快捷菜单,单击选项Add Files to Group…打开一个标准文件对话框,将已创建好的源文件加入到工程中。文件组和工程文件的加入
工程总体有个配置页面,可以对各个部分进行配置• 硬件选项配置单击菜单项Project→Options for Target,或点击右侧的按钮,在弹出的Target页面中可指定目标硬件和所选择设备片内组件的相关参数,处理器配置对话框如图。工程总体配置
输出文件设置
02:27嵌入式系统原理与应用12
3.2.2 配置J-LINK 硬件调试• J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。可以配合IAR EWAR,ADS,Keil,WINARM,RealView等集成开发环境,支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A4/A8/A9等内核芯片的仿真,尤其能与IAR,Keil等编译环境无缝连接,操作、连接方便,简单易学,价格低廉,是学习开发ARM最好最实用的开发工具。• 目前最新版本是V9.1。
仿真器驱动配置,可以模拟仿真也可以使用硬件调试器。如右图:仿真器下载应用程序配置下图 :调试配置
工具选项(Utilities)主要设置Flash的下载选项“Utilities”配置对话框,右图Flash下载选项设置,下图选择Flash编程算法,一般选择对应芯片即可。工具配置
02:27嵌入式系统原理与应用163.3如何编译和下载程序Translate按钮:就是编译当下修改过的文件,即检査一下有没有语法错误,既不链接库文件,也不会生成可执行文件。Build按钮:就是编译当下修改过的工程,它包含厂语法检查、链接动态库 文件、生成可执行文件。Rebuild按钮:即重新编译整个工程,与Build这个按钮实现的功能是一样的,不同的是它重新编译整个工程的所有文件,耗时巨大。
3.3.2如何下载程序点击MDK工具栏中的Load按钮就可将编译好的程序下载到开发板的Flash
篇五:gpio输出控制实验报告流水灯
IO 实验 【实验内容】1、 LED 闪烁
2、 LED 流水灯
3、 继电器控制 【需要了解的知识】
1、 GPIO 设定
2、 输入与输出及其处理 【实验预习】
仔细预读实验指导电子文档的实验一到三及其前面的实验流程 【实验设备】
Keil C51 软件、 ICE52 仿真驱动、 MEFlash 编程软件、 USB 驱动程序
【实验过程】
实验一
LED 闪烁 实验任务:
1)
P0、 P2 端口的 LED 亮 300ms, 灭 300ms, 如此循环
2)
发光二极管在不停地一亮一灭, 时间间隔为 300ms, 形成闪烁效果 实验步骤:
1)
首先安装好相应的软件和驱动程序
2)
连接好 ME850:
将随机 USB 线的扁头端连接至计算机的 USB 接口, 方头端连接到 ME850 的 USB 插座上
3)
将电源开关 SW1 拨到 USB 端, 电源指示灯“PWR” 亮, 表明已经正常接通电源可以做实验了
4)
将 JP1(MCU 类型选择跳线, 位于锁紧插座的手柄旁边)
的跳线帽短接在“51” 的位置, JP9 的跳线帽全部插上;
5)
将 AT89S52 单片机芯片放入 ME850 的锁紧插座
6)
驱动 MEFlash 软件, 正常打开后软件右下角会显示实验仪的型号和连接状态
7)
在软件中点击“器件” 按钮, 选择型号“AT89S52”
8)
在软件中点击“加载” 按钮, 定位到产品光盘Emamples_A51\EX1_LED\LED. hex, 点击“打开” , 弹出“加载文件” 对话框, 按默认点击确定即可
9)
在软件中点击“擦除” 按钮, 再点击“编程” 按钮, 编辑完毕, 即可看到 16 个发光二极管都在闪烁了 汇编源程序:
ORG
0000H
; 初始地址为 0000H
AJMP
MAIN
; 跳转到 MAIN
ORG
0050H
; 初始地址为 0050H MAIN:
MOV
P0, #OFFH
; 初始化 P0
MOV
P2, #OFFH
; 初始化 P2 LOOP:
MOV
P0, #O0H
; 为 P0 赋值 0
MOV
P2, #OOH
; 为 P2 赋值 0
ACALL
DELAY
; 调用子程序 DELAY
MOV
P0, #OFFH
; 为 P0 赋值
MOV
P2, #OFFH
; 为 P2 赋值
ACALL
DELAY
; 调用子程序 DELAY
AJMP
LOOP
; 跳转到 LOOP DELAY:
MOV
R5, #3
; 将 3 赋给寄存器 R5 DEL1:
MOV
R6, #200
; 将 200 赋给寄存器 R6
DEL2:
MOV
R7, #230
; 将 230 赋给寄存器 R7 DEL3:
DJNZ
R7 , DEL3
; 第一层循环
DJNZ
R6, DEL2
; 第二层循环
DJNZ
R5, DEL1
; 第三层循环
RET
; 返回
END
; 结束 试验流程图:
实验结果:
1)
P0、 P2 端口的 LED 亮 300ms, 灭 300ms, 如此循环
2)
发光二极管在不停地一亮一灭, 时间间隔为 300ms, 形成闪烁效果 P0、 P2 端口初始化P0、 P2 端口送低电平所有 LED 点亮 延时 300ms P0、 P2 端口送高电平所有 LED 熄灭 延时 300ms
问题解决及讨论:
1)
JP24 没有切换到“OFF” 端, 结果 P0 口的 8 个 LED 不闪烁。
原因是被1602LED 干扰
2)
没有正确加载烧写文件。
必须是先选芯片在加载文件
3)
芯片型号没有选择正确。
可重新选择型号
4)
没有放置芯片。
先放芯片, 再压下锁紧座手柄锁紧
5)
芯片损坏。
换新的芯片重试 实验二
流水灯 实验任务:
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
; 初始化地址
AJMP
MAIN
; 跳转到 MAIN
ORG
0050H
; 初始化地址 MAIN:
MOV
P0, #0FFH
; 端口初始化
MOV
P2, #0FFH
; 端口初始化 LOOP:
MOV
A, #0FEH
; 复制初始
MOV
R0, #08H
; 移动次数 LOOPL:
; 左移显示
MOV
P0, A
; 送数显式
MOV
P2, A
; 送数显式
RL
A
; 左移一位
ACALL
DELAY
; 延时 300ms
DJNZ
R0, LOOPL
; 是否左移 8 次
MOV
P0, #0FFH
; 关闭显示
MOV
P2, #0FFH
; 关闭显示
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 次
MOV
P0, #0FFH
; 关闭显示
MOV
P2, #0FFH ; 关闭显示
ACALL
DELAY
; 延时 300ms
AJMP
LOOP
; 跳转到 LOOP DELAY:
MOV
R5, #3
; 将 3 赋给寄存器 R5 DEL1:
MOV
R6, #200
; 将 3 赋给寄存器 R5 DEL2:
MOV
R7, #230
; 将 3 赋给寄存器 R5 DEL3:
DJNZ
R7, DEL3
; 第一层循环
DJNZ
R6, DEL2
; 第二层循环
DJNZ
R5, DEL1
; 第三层循环
RET
; 结束 试验流程图:
实验结果:
P0、 P2 端口的 LED 先从从右至左方向依次点亮, 再从左至右方向依次点亮, 如此循环形成流水灯效果 问题解决及讨论:
1)
没有正确加载烧写文件。
必须是先选芯片在加载文件
2)
芯片型号没有选择正确。
可重新选择型号
3)
没有放置芯片。
先放芯片, 再压下锁紧座手柄锁紧
4)
芯片损坏。
换新的芯片重试
5)
JP24 没有切换到“OFF” 端, 结果 P0 口的 8 个 LED 不闪烁。
原因是被1602LED 干扰
实验三
继电器控制 实验任务:
用按键控制继电器的工作状态:
K1-吸和键, K2-释放键
按 K1 键, 继电器吸合, DL11 灯亮。
按 K2 键, 继电器释放, DL11 灯灭。
实验步骤:
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、 运行, 查看效果。
汇编源程序:
KEY_NEW
EQU
40H
; 为标号 KEY_NEW 赋值为 40H
KEY_OLD
EQU
41H
; 为标号 KEY_OLD 赋值为 41H
K1
BIT
P1. 4
K2
BIT
P1. 5
RELAY
BIT
P3. 6
; 继电器控制线
ORG
0000H
; 初始化地址
AJMP
MAIN
; 跳转到 MAIN
ORG
0050H
; 地址初始化 MAIN:
MOV
SP, #60H
; 设置栈指针
MOV
P0, #0FFH
; 将 P0 端口初始化为高电平
MOV
P2, #0FFH
; 将 P2 端口初始化为高电平
MOV
KEY_OLD, #03H
; 初始键比较值 KEY_CHK:
; 循环检测按键是否按下
ACALL
SCAN_KEY
; 输入按键状态
XRL
A, KEY_OLD
; 查按键是否改变
JZ
KEY_CHK
; 若无键被按则跳转到 KEY_CHK
ACALL
DELAY
; 延时去抖
ACALL
SCAN_KEY
; 再次检查按键值
XRL
A, KEY_OLD
; 寄存器 KEY_OLD 异或到累加器 A
JZ
KEY_CHK
; 累加器为零则跳转到 KEY_CHK
MOV
KEY_OLD, KEY_NEW ; 保存按键状态
ACALL
PROC_KEY
; 绝对调用子程序 PROC_KEY
AJMP
KEY_CHK
; 绝对跳转到 KEY_CHK SCAN_KEY:
CLR
A
; 累加器 A 清零
MOV
C, K1
; 将 K1 的值赋给 C
MOV
ACC. 0, C
; 将 C 的值赋给累加器 A
MOV
C, K2
; 将 K2 的值赋给 C
MOV
ACC. 1, C
; 将 C 的值赋给 A
MOV
KEY_NEW, A ; 无键按下 KEY_NEW
RET
; 返回 PROC_KEY:
MOV
A, KEY_NEW ; 将 KEY_NEW 的值赋给累加器 A
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
; 返回 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-吸和键, K2-释放键
按 K1 键, 继电器吸合, DL11 灯亮。
按 K2 键, 继电器释放, DL11 灯灭。
问题解决及讨论:
1)
没有正确加载烧写文件。
必须是先选芯片在加载文件
2)
芯片型号没有选择正确。
可重新选择型号
3)
没有放置芯片。
先放芯片, 再压下锁紧座手柄锁紧
4)
芯片损坏。
换新的芯片重试
5)
JP24 没有切换到“OFF” 端, 结果 P0 口的 8 个 LED 不闪烁。
原因是被1602LED 干扰
推荐访问:gpio输出控制实验报告流水灯 输出 流水 实验