实验2+++并行IO口的使用

合集下载

单片机原理与应用 实验二 IO口的使用实验

单片机原理与应用 实验二 IO口的使用实验

1.实验二单片机输入及输出实验(1)实验要求1)由于实验学时很少,请提前预习和思考实验内容,将流程图及程序准备好,到实验室进行调试和验证。

2)由于实验室计算机C盘和D盘被保护,所以开始实验前在计算机E盘建立自己的文件夹,文件夹最好为英文名称。

实验中及时保存自己的源文件。

3)P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮,每个发光二极管点亮时间为1秒;仔细思考,画出程序流程图;编写程序并写清注释;4)P2.0、P2.1作输入口接两个拨动开关,P1作输出口,接八个发光二极管,编写程序读取开关状态,根据此状态,改变八个发光二极管的点亮方式(至少两种)。

编程时应注意P2.0、P2.1作为输入口时应先置1,才能正确读入值。

仔细思考,画出程序流程图;编写程序并写清注释;5)考虑使用定时器完成需要的延时,可以采用查询或是中断的方式。

首先根据延时时间确定定时器的工作方式(13位、16位还是8位),然后据此计算出定时器初值,最后确定选择使用T0还是T1,并设置相应特殊功能寄存器(TMOD、TCON)。

可根据课件中的例子进行修改。

(2)实验目的1)学习单片机的I/O口的使用方法;2)学习延时子程序的编写和使用;3)学习分支指令的使用;4)学习使用定时器完成延时的方法。

(3)实验电路及连线连线连接孔1 连接孔21 P1.0 L02 P1.1 L13 P1.2 L24 P1.3 L35 P1.4 L46 P1.5 L57 P1.6 L68 P1.7 L79 P2.0 S010 P2.1 S1(4)实验说明1)对于MCS51MCU,P2口是准双向口。

它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P2口用为输入口时,必须先对它置“1”。

若不先对它置“1”,读入的数据是不正确的。

2)8051延时子程序的延时计算问题,需要考虑系统晶振和延时时长,对于较长的延时需要采用多重循环的方式得到。

如实验要求发光二极管点亮1秒,请参考课件上延时50ms的例子进行修改。

实验2并行IO口的使用(包涵程序答案).doc

实验2并行IO口的使用(包涵程序答案).doc

实验二并行I/O端口的应用一一、实验目的1.进一步熟悉Kiel C软件的使用方法。

2.掌握proteus软件的使用方法。

3.熟悉C语言数据与运算4.熟悉C语言程序结构二、实验内容1.程序一:当按下按键K1-K4时,对应D1-D4点亮。

2.程序二:用循环语句实现P0口的多值输出。

3.程序三:用数组方式控制跑马灯。

4.程序四:在P2口连接的LED数码管上循环显示“0”,“1”,“2”,“3”,“4”。

三、实验仿真硬件图在Proteus软件中建立如下图2-1所示仿真模型并保存。

需要注意的是,当用Proteus来绘制比较复杂的电路时,经常会因为线太乱而影响美观,也不方便检查,使用总线方式绘制电路能很好地避免这一问题。

图2-1并行I/O端口应用原理图在单线上点击右键编辑属性。

在线型中选择“BUS WIRE”,画出所需要的总线,连分支线时,不要直接画到总线上,先将光标靠近上面画的单线的末端(离总线近的一段),光标会出现一个选中的符号,先单击左键,再按住Ctrl键,拖动鼠标到总线的合适位置,再点击左键。

然后右键点击分支线,放置网络标号即可。

四、编程提示程序一:1.可选用用if语句、if-else-if语句、switch语句来实现当按下按键K1-K4时, 对应D1-D4点亮。

if (表达式1 ) {语句组1;}if (表达式2) {语句组2;}if-else-if语句的一般形式:if (表达式1){语句组1;}else if (表达式2){语句组2;}else if (表达式n){语句组n;}else{ 语句组n+1;}switch语句的一般形式为:switch (表达式){case常量表达式1:语句序列1:break;case常量表达式2:语句序列2;break;case常量表达式n:语句序列n;break;default :语句序列n+1}2.可采用运用三种基本的循环语句:for语句、while语句和do-while语句,实现D1-D8 循环点亮。

实验二 简单并行接口

实验二 简单并行接口

实验二简单并行接口一、实验目的掌握简单并行接口的工作原理及使用方法。

二、实验内容1、按下面图(2)简单并行输出接口电路图连接线路(74LS273 插通用插座,74LS32 用实验台上的“或门”)。

74LS273 为八D 触发器,8 个D 输入端分别接数据总线D0~D7,8 个Q输出端接LED 显示电路L0~L7。

2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8 个发光二极管发光情况验证正确性。

3、按下面图(3)简单并行输入接口电路图连接电路(74LS244 插通用插座,74LS32 用实验台上的“或门”)。

74LS244 为八缓冲器,8 个数据输入端分别接逻辑电平开关输出K0~K7,8 个数据输出端分别接数据总线D0~D7。

4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。

图2 图34三、编程提示1、上述并行输出接口的地址为2A8H,并行输入接口的地址为2A0H,通过上述并行接口电路输出数据需要3 条指令:MOV AL, 数据MOV DX,2A8HOUT DX,AL通过上述并行接口输入数据需要2 条指令:MOV DX,2ADHIN AL,DX2编程code segmentassume cs:codestart:mov ah,2 ;回车符mov dl,0dhint 21hmov ah,1 ;等待键盘输入int 21hcmp al,27 ;判断是否为ESC键je exit ;若是则退出mov dx,2a8h ;若不是,从2A8H输出其ASCII码out dx,aljmp start ;转startexit: mov ah,4ch ;返回DOSint 21hcode endsend15号董大明。

实验二_并行I_O口

实验二_并行I_O口

一、实验目的1、熟悉Proteus软件和Keil软件的使用方法。

2、熟悉单片机应用电路的设计方法。

3、掌握单片机并行I/O口的直接应用方法。

4、掌握单片机应用程序的设计和调试方法。

二、设计要求1、用Proteus软件画出电路原理图。

要求在P1.0至P1.7口线上分别接LED0至LED7八个发光二极管,在P3.0口线上接一蜂鸣器。

2、编写程序:要求LED0至LED7以秒速率循环右移。

3、编写程序:要求LED0至LED7以秒速率循环左移。

4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。

三、电路原理图四、实验程序流程框图和程序清单/***********(1)LED0~LED7以秒速率循环右移**************/MAIN: MOV A, #11111110BLOOP: MOV P1, A ;LED0灯亮,其他全灭LCALL DELAY1s ;调用1s延时子程序RL A ;累加器内容循环左移LJMP LOOP ;继续循环/***********1s延时子程序*******************/DELAY1s:MOV R7, #0A7HDL1: MOV R6, #0ABHDL0: MOV R5, #10HDJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1NOPRETEND/***********(2)LED0~LED7以秒速率循环左移**************/ORG 0000HMAIN: MOV A, #01111111BLOOP: MOV P1, A ;LED7灯亮,其他全灭LCALL DELAY1s ;调用1s 延时子程序RR A ;累加器内容循环右移 LJMP LOOP ;继续循环 /********************1s 延时子程序**********************/ DELAY1s:MOV R7, #0A7HDL1: MOV R6, #0ABHDL0: MOV R5,#10HDJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1NOP RETEND/**********(3)要求在灯循环移动的同时,蜂鸣器逐位报警 **************/ORG 0000HMAIN: MOV A, #11111110BLOOP: MOV P1, A ;LED0灯亮,其他全灭CPL P3.0 ;开蜂鸣器 LCALL DELAY05s ;调用0.5秒延时子程序 SETB P3.0 ;关蜂鸣器 LCALL DELAY05s ;调用0.5秒延时子程序 RL A ;累加器内容循环左移 LJMP LOOP ;继续循环/*********0.5s 延时子程序****************/DELAY05s:MOV R7, #17H DL1: MOV R6, #98HDL0: MOV R5, #46H DJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1RETEND六、实验总结通过本次实验,我熟悉了Proteus软件和Keil软件的使用方法,熟悉了单片机应用电路的设计方法。

2.4 单片机并行IO口(实验2)

2.4 单片机并行IO口(实验2)
上拉使能寄存器;
College of Communication Engineering, Jilin University
9
2.4 并行I/O模块
实验二 I/O+IRQ应用实例
任务:(1) 在PORTB口的小灯上循环显示跑马灯。 (2) 将PORTA口接8位DIP开关,在PORTB口的小灯上显示其状态。 (3) 利用IRQ作为中断源,采用中断方式,按动IRQ键后显示跑马灯。 (4) 利用IRQ作为中断源,采用中断方式, 利用8位DIP开关控制跑马 灯的循环速度。 (5) 利用XIRQ作为中断源,采用中断方式, 利用8位DIP开关控制跑马 灯的循环速度。 (6) 将PORTA口低4位接DIP开关,高4位接LED,将开关的状态显示在 LED灯上,重复(5)。
数据方向寄存器
DDRT:$0242
DDRS:$024A
DDRM:$0252
DDRP:$025A
DDRH:$0262
DDRJ:$026A
按位控制:0->输入 1->输出,复位后清0,默认为输入口
数据寄存器
PTT:$0240
PTS:$0248
PTM:$0250
PTP:$0258
PTH:$0260
3、程序 IO-IRQ.doc ① 跑马灯实现的算法(查表、移位) ② 可变时间的延时 ③ 端口状态的LED显示 ④ 中断
College of Communication Engineering, Jilin University
14
PTIS:$0249 PTIJ:$0269
PTIM:$0251
PTIP:$0259
低功耗驱动寄存器
RDRT:$0243
RDRS:$024B

实验二 IO口的输入与输出

实验二  IO口的输入与输出
实验一 软件和硬件的认识
主讲人:
宋淇
一、实验目的:
了解IO口的结构 熟源自IO口的特性 掌握IO口的控制二、实验仪器:

ATmage16实验板 一块 ISP单片机下载线 一条 PC机 一台
三、实验原理:
作为通用数字I/O 使用时,AVR 所有的I/O 端口都具有真正的读- 修改 - 写功能。这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电 平、禁止/ 使能上拉电阻) 时不会改变其他管脚的方向( 或者是端口电平、 禁止/ 使能上拉电阻)。输出缓冲器具有对称的驱动能力,可以输出或吸收 大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。 并有保护二极管与VCC 和地相连,如 Figure23 所示。在控制I/O时,分别 由方向寄存器DDRX与数据寄存器PORTX控制I/O的状态,如下表。
Figure 23. I/O 引脚等效原理图
所有的寄存器和位以通用格式表示:小写的“x” 表示端口的序号, 而小写的“n” 代表位的序号。但是在程序里要写完整。例如,PORTB3 表示端口B 的第3 位,而本节的通用格式为PORTxn。物理I/O 寄存器和 位定义列于P63“I/O 端口寄存器的说明” 。 每个端口都有三个I/O 存储器地址: 数据寄存器 – PORTx、 数据方向 寄存器 – DDRx 和端口输入引脚地址– PINx。数据寄存器和数据方向寄 存器为读/ 写寄存器,而端口输入引脚为只读寄存器。但是需要特别注 意的是,对PINx 寄存器某一位写入逻辑"1“ 将造成数据寄存器相应位的 数据发生"0“ 与“1“ 的交替变化。当寄存器MCUCR 的上拉禁止位PUD 置位时所有端口引脚的上拉电阻都被禁止。
端口引脚配置图

并行IO接口实验报告

并行IO接口实验报告

并行I/O接口实验报告一、实验目的1.掌握GPIO IP 核的工作原理和使用方法。

2.掌握IO接口程序控制方法3.掌握中断控制方式的IO接口设计原理4.掌握中断程序设计方法二、实验任务使用查询、中断两个方式做独立式开关输入,将开关的状态显示到console。

三、硬件平台建立1.硬件框图2.通过xps建立最小系统,打开system.xmp文件3.添加和配置GPIO核,并改写ucf文件4添加和配置中断控制器IP核5产生外部GPIO连接四、软件平台建立1.软件流程图2.查询代码/** gpio.c** Created on: 2017-5-24* Author: 201511*/#include "xparameters.h"#include "xgpio.h"#include "xintc.h"#include "stdio.h"void Initialize();void Delay_50ms();void PushBtnHanler(void*CallBackRef);void SwitchHandler(void*CallBackRef);XGpio Dips;XIntc intCtr1;int pshDip;int state1;int main(){Initialize();xil_printf("\r\nRunning GpioInputInterrupt!\r\n");while(1){if(pshDip) //若按下按键,则打印信息{xil_printf("Switch Interrupt Trigger!!!the state is 0x%X\n\r",state1);pshDip=0;}}return 0;}void Initialize(){//初始化Dips实例,并设定其为输入方式XGpio_Initialize(&Dips,XPAR_DIP_DEVICE_ID);XGpio_SetDataDirection(&Dips,1,0xff);//初始化intCtrl实例XIntc_Initialize(&inCtrl,XPAR_AXI_INTC_0_DEVICE_ID);//GPIO中断使能XGpio_InterruptEnable(&Dips,1);XGpio_InterruptGlobalEnable(&Dips);//对中断控制器进行中断源使能XIntc_Enable(&intCtrl,XPAR_AXI_INTC_0_DIP_IP2INTC_IRPT_INTR);//注册中断服务函数XIntc_Connect(&intCtrl,XPAR_AXI_INTC_0_DIP_IP2INTC_IRPT_INTR,(XInterruptHandler)SwitchHandler,(void*)0);microblaze_enable_interrupts(); //允许处理器处理中断;//注册中断控制器处理函数microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler,(void*) &intCtrl);XIntc_Start(&inCtrl,XIN_REAL_MODE); //启动中断控制器}void Delay_50ms(){int i;for(i=0;i<5000000;i++);}void SwitchHandler(void*CallBackRef){state1=XGpio_DiscreteRead(&Dips,1); //读取Switch开关的状态值pshDip=1;XGpio_InterruptClear(&Dips,1); //清除中断位置}3.端口修改3.五、实验小结在这个实验中,主要分为两个部分,一个部分是硬件设计,另一个部分是软件设计,对我来说在硬件设计部分容易在操作步骤上出问题,很容易点错,而软件上,虽然代码比较少,但是不太容易一理解,由于采用API函数,所以会持续性的调用函数。

实验二I-O口输入输出实验.

实验二I-O口输入输出实验.

实验二 I/O口输入、输出实验10通信工程A 班 1015231026 林飞翔P0口循环点灯ORG 0000H ; 设定程序汇编起始地址 MOV A ,#03H ; 设置初始值00000011 LOOP:MOV P0,A ;点亮LED0和LED1 ACALL DELAY ; 调用延时子程序RL A ; 将A 里面的00000011左移一位成00000110 SJMP LOOP ; 循环点亮LED 灯 DELAY : ;0.5S 的延时程序 DEL: MOV R7,#10 DEL1:MOV R6,#246 DEL2:MOV R5,#100DEL3:DJNZ R5,DEL3 ;2*100=200μS DJNZ R6,DEL2 ; (200+1+2)*246=49938μS DJNZ R7,DEL1 ; (49938+1+2)*10=499410us RET ; 返回主程序P1口输入/输出ORG 0000 ; 设定起始地址 SJMP MAINMAIN: MOV P1,#0FFH ;P1口置1 SEARCH:MOV A,P1 ; 读P1口CJNE A,0FFH,LED ; 查询是否有按键按下 SJMP SEARCH ; 等待LED: MOV P0, A ; 有键按下,将值读入P0 ACA LL DELAY ; 调用延时子程序MOV R5 ,#00H ; 置计数初值=0 SHIFT: RRC A ; 输入右移1位JNC LOOKFOR ; 若Cy=0,则数码显示 INC R5 ;Cy=1,则计数加1 SJMP SHIFT ; 跳回继续移位LOOKFOR:MOV DPTR,#TAB ; 所查表的首地址赋给MOV A,R5 ; 计数值做偏移量 MOVC A,@A+DPTRMOV P2,A ; 显示相应按键值 SJMP SEARCH TAB:DB 60H,0DAH,0F2H,66H ; DB 0B6H,0BEH,0E0H,0FEH ;DELAY : ;0.5S 的延时程序 DEL: MOV R7,#10 DEL1: MOV R6,#246 DEL2: MOV R5,#100DEL3:DJNZ R5,DEL3 ;2*100=200μS DJNZ R6,DEL2 ; (200+1+2)*246=49938μS DJNZ R7,DEL1 ; (49938+1+2)*10=499410us RET ; 返回主程序SJMP $ END。

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

实验二并行I/O端口的使用
一、实验目的
1.进一步熟悉Keil C、proteus软件的使用方法。

2.掌握分支结构语句、运算符和数组的运用。

3.掌握LED数码管的结构和静态显示工作原理。

二、实验内容
1.程序一:按键K0~K3,用分支语句实现P0口的多值输出。

2.程序二:用循环语句实现P0口的多值输出。

3.程序三:用数组方式控制跑马灯。

4程序四:在P2口连接的LED数码管上循环显示“0”,“1”,“2”,“3”,“4”。

三、实验仿真硬件图
在Proteus软件中建立如下图所示仿真模型并保存。

图2-1 并行I/O端口应用原理图
四、编程提示
程序一:分别用if语句、if-else-if语句、switch语句来实现当按下按键K0~K3时,对应D1~D4点亮。

程序二:运用三种基本的循环语句: for语句、while语句和do-while语句,实现D1~D8循环点亮。

程序三:用数组方式控制跑马灯。

将跑马灯的全部状态用数组表达,然后用循环语句依次读取数组各元素,送P0口显示。

程序四:在P2口连接的LED数码管上循环显示“0”,“1”,“2”,“3”,“4”。

思路同程序一,只不过数组元素是由共阴极数码管所对应的字形码所组成。

五、调试运行
1.四个程序在proteus仿真通过。

分别用if语句、if-else-if语句、switch语句来实现当按下按键K0~K3时,对应D1~D4点亮。

if语句的一般形式:
if ( 表达式1 )
{
语句组1;
}
if ( 表达式 2)
{
语句组2;
}
...
if-else-if语句的一般形式:
if ( 表达式 1)
{
语句组1;
}
else if( 表达式 2)
{
语句组2;
}
...
else if( 表达式 n)
{
语句组n;
}
else
{
语句组n+1;
}
switch语句的一般形式为:
switch(表达式)
{
case常量表达式1: 语句序列1;break;
case常量表达式2: 语句序列2;break;
...
case常量表达式n: 语句序列n;break;
default : 语句序列n+1
}
2.运用三种基本的循环语句: for语句、while语句和do-while语句,实现D1~D8循环点亮。

for语句的一般形式:
for ( 循环变量赋初值;循环条件;修改循环变量 )
{
语句组; //循环体
}
while语句的一般形式:
while ( 表达式 )
{
语句组; //循环体
}
do-while语句的一般形式:
do
{
语句组; //循环体
}while ( 表达式 );
3.选做题:用switch语句实现当按下按键K0~K3时,对应D1~D8分别按四种不同的模式循环发亮。

(提示:一种模式用一个函数表达)
写出源程序,并注释
实验二并行I/O端口的应用
学院:专业:年级:实验时间:
姓名:学号:指导教师:
一、实验目的
1.进一步熟悉Keil C、proteus软件的使用方法。

2.掌握分支结构语句、运算符和数组的运用。

3.掌握LED数码管的结构和静态显示工作原理。

二、实验内容
1.程序一:按键K0~K3,用分支语句实现P0口的多值输出。

2.程序二:用循环语句实现P0口的多值输出。

3.程序三:用数组方式控制跑马灯。

4程序四:在P2口连接的LED数码管上循环显示“0”,“1”,“2”,“3”,“4”。

三、实验仿真硬件图
在Proteus软件中建立如下图2-1所示仿真模型并保存。

图2-1 并行I/O端口应用原理图
四、实验程序清单(附主要语句注释)
1)程序一
2)程序二
3)程序三
4)程序四
五、简答题
1)程序中如何设定P1.0为输入端口,为什么?
2)P0口与数码管之间的电阻起什么作用?
3)RST端的电路起什么作用?
4)XTAL1、XTAL2接的电路起什么作用?
六、体会(选做)。

相关文档
最新文档