单片机实验-IO口的输入输出实验
- 格式:doc
- 大小:1.22 MB
- 文档页数:11
单片机io口实验[单片机IO口控制实验实验报告]一、实验目的1、熟悉MCS-51的I/O结构;2、掌握MCS-51I/O的使用方法;3、掌握MCS-51的中断机制。
二、实验原理1、MCS-51单片机的硬件结构片内结构:2、内部数据存储器:3、SFR的名称及其分布:4、I/O端口地址:5、P0P3端口功能总结:P0P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MU某以进行转换。
而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无MU某P0口的MU某的一个输入端为“地址/数据〞信号。
P2口的MU某勺一个输入信号为“地址〞信号。
在4个口中只有P0口是一个真正的双向口,P1P3口都是准双向口。
原因:P0口作数据总线使用时,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。
为此。
P0口的输出缓冲器应为三态门。
P0口中输出三态门是两只场效应管组成,所以是一个真正的双向口。
P1P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的一准双向口。
P3口的口线具有第二功能,为系统提供一些控制信号。
因此P3口增加了第二功能控制逻辑。
这是P3口与其它各口的不同之处。
6、P0口结构及特点:⑴P0口结构与运作1个输出锁存器,用于进行输出数据的锁存;2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MU某它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出。
在控制信号的的控制下能实现对锁存器输出端和地址/数据线之间的切换;两只场效应管组成的输出驱动电路。
⑵P0口的特点P0口是一个双功能的端口:地址/数据分时复用口和通用I/O口;具有高电平、低电平和高阻抗3种状态的I/O端口称为双向I/O端口。
P0口作地址/数据总线复用口时,相当于一个真正的双向I/O口。
而用作通用I/O口时,于引脚上需要外接上拉电阻,端口不存在高阻状态,此时P0口只是一个准双向口;为保证引脚上的信号能正确读入,在读入操作前应首先向锁存器写1;单片机复位后,锁存器自动被置1;一般情况下,如果P0口已作为地址/数据复用口时,就不能再用作通用I/O口使用;P0口能驱动8个TTL负载。
单片机原理实验报告实验一:IO开关量输入输出实验学院: 物理与机电工程学院专业: 电子科学与技术班级: 2013 级 2 班学号: 201310530208姓名: 何丽丽指导老师: 柳妮实验一IO开关量输入输出实验目的:学习单片机读取IO引脚状态的的方法。
内容:编程读取IO引脚状态。
设备:EL-EMCU-I试验箱、EXP-89S51/52/53 CPU板。
编程:首先要把相关的引脚设置在IO的输入状态,然后写一个循环,不停地检测引脚的状态。
步骤:1、将CPU板正确安放在CPU接口插座上,跳线帽JP2短接在上侧。
2、连线:用导线将试验箱上的的IO1--- IO8分别连接到SWITCH 的8个拨码开关的K1---K8的输出端子K1---K8上,连接好仿真器。
3、实验箱上电,在PC机上打开Keil C环境,打开实验程序文件夹IO_INPUT下的工程文件IO_INPUT.Uv2编译程序,上电,在程序注释处设置断点,进入调试状态,打开窗口Peripherals-->IO-Port-->P0,改变开关状态,运行程序到断点处,观察窗口的数值与开关的对应关系。
程序:ORG 0000HLJMP MAINORG 0030HMAIN:MOV P0,#0FFHMOV A,P0SWAP AMOV P0,ASJMP MAINEND程序分析:从上面的程序可以看出我们需要用导线将试验箱上的的IO1--- IO8分别连接到SWITCH的8个拨码开关的K1---K8的输出端子K1---K8上,连接好仿真器。
在通过SWAP A MOV P0,A这组指令来对P0口所接的对应的发光二极管对应的状态通过拨码开关的开关来控制发光二极管。
结论:通过上面这段程序,我们实现了用拨码开关来控制P0口所接的发光二极管的亮灭。
通过I\O口P0.0—P0.3接拨码开关,P0.4—P0.7一一对应的接发光二极管。
单片机原理及应用实验二报告实验二:单片机IO口的输入输出实验一、实验目的:1.理解并掌握单片机IO口的输入输出原理;2.掌握基础的输入输出编程技巧;3.熟悉单片机实验的基本流程和实验报告格式。
二、实验器材:1.STM32F103C8T6开发板2.LED灯3.电阻(220Ω)4.面包板、杜邦线等。
三、实验原理:单片机的IO口是实现与外部器件进行通信的重要接口,通过编程,我们可以控制IO口的状态(低电平或高电平)来实现对外部器件的控制或检测。
IO口的输入输出原理主要有两种:1.三态输出方式:通过设置IO口的DDR寄存器来将IO口设置为输出模式(推挽输出),并通过设置IO口的ODR寄存器来控制IO口的输出状态为低电平或高电平;2.上拉输入方式:通过设置IO口的DDR寄存器来将IO口设置为输入模式,同时设置IO口的CR寄存器的PUPD位为上拉使能,通过读取IO口的IDR寄存器可以获取IO口的输入状态。
四、实验步骤:1.连接电路:将STM32F103C8T6开发板的VDD和VSS(即5V和GND)分别连接到面包板的3V3和GND,将LED的阳极(长脚)连接到STM32F103C8T6开发板的PA0引脚,将LED的阴极(短脚)通过一个220Ω的电阻连接到GND。
2. 打开Keil uVision5软件,创建一个新的工程,并选择适合的芯片型号(STM32F103C8T6)。
3.编写代码实现将PA0引脚设置为输出模式,并控制LED的亮灭。
五、实验代码:```c#include "stm32f10x.h"void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);int main(void)GPIO_Configuration(;while (1)GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LEDGPIO_ResetBits(GPIOA, GPIO_Pin_0); // 关闭LED}```六、实验结果与分析:七、实验心得:本次实验主要学习了单片机IO口的输入输出原理,了解了三态输出方式和上拉输入方式,并通过实际编写代码的方式,在STM32F103C8T6开发板上实现了控制LED的亮灭。
实验三单片机I/O口实验(P3和P1口应用)一、实验目的⑴掌握P3口、P1口简单使用。
⑵学习延时程序的编写和使用。
二、实验内容P3.3口做输入口,外接脉冲,每输入一个脉冲,P1口按十六进制加一,P1口做输出口,编写程序,使P1口接的8个发光二极管L0—L7按16进制加一方式点亮发光二极管。
三、实验原理图四、实验程序框图五、实验步骤⑴按图连接线路:系统扩展区1的P3.3用插针连至K0, P1.0—P1.7用插针连至L0-L7;⑵在闪动“P.”状态,按PCDBG键;⑶单击DVCC图标;⑷在系统设置选项中设定仿真模式为内程序、内数据;⑸在主菜单中选择联接;⑹选择实验指南/实验项目选择/单片机I/O口实验(P3和P1口应用),再选择实验指南/程序,打开该实验源程序⑺再在主菜单中选择调试,进入实验程序的编译、连接、目标文件的传送(三个步骤一起完成,也可以逐项进行);目标文件传送完后,在程序窗口内的首条指令前有一个蓝色光标出现;⑻连续运行实验程序(内程序,内数据);。
⑼开关K0每拨动一次,L0—L7发光二极管按16进制方式加一点亮。
六、实验代码ORG 0000HLJMP STARTORG 0100HSTART:MOV A,#00HMOV P1,AHA1S1:JB P3.3,HA1S1MOV R2,#10HLCALL DELAYJB P3.3,HA1S1HA1S2:JNB P3.3,HA1S2MOV R2,#10HLCALL DELAYJNB P3.3,HA1S2INC APUSH ACCMOV P1,APOP ACCAJMP HA1S1 DELAY: P USH 02H DELAY1: PUSH 02H DELAY2: PUSH 02H DELAY3: DJNZ R2,DELAY3POP 02HDJNZ R2,DELAY2POP 02HDJNZ R2,DELAY1POP 02HDJNZ R2,DELAYRETEND七、实验现象及结果分析。
实验一以下所有KEIL工程、程序均命名为自己姓名的拼音一、实验目的:熟悉KEIL软件的开发,掌握程序下载流程二、实验环境:1.硬件:PC微机、单片机开发板2.软件:KEIL三、实验步骤:1.在KEIL中新建工程文件,在工程文件下新建C文件“姓名首字母.c”并加入到工程中(注意C语言编程时,工程中要保留STARTUP.A51汇编文件)。
2.编写程序,初始化内部数据寄存器0x40开始的100个地址单元,写入0x55,然后复制到0x60开始的存储器中,使用软件仿真的方式调试程序,观察程序模拟运行的结果:#include "reg52.h"unsigned char *p,*q;unsigned char i;int main(){p=0x40;for(i=0;i<10;i++){*p=0x55;p++;}for(i=0;i<10;i++){*p=*q;q++;p++;while(1);}}调试时,在调试界面中依次找到a) 变量观察窗口b) 存储器窗口c) 单步运行d) 全速运行程序运行结果(存储器窗口截图):3.编写程序,控制实验板上的LED灯:D1-D3点亮,D4-D7熄灭,D8点亮#include”reg52.h”sbit P1_4=P1^4;int main(){P1_4=0;P0=0x1E;While(1);}4.编写C语言程序,实现LED灯循环点亮#include "reg52.h"void delay (unsigned z){while(z--);}int main(){unsigned char i;P1&=~(0x01<<4);P0=0xff;i=0x01;while (1){P0=~i;i=i<<1;if(i==0x0)i=0x01;delay(10000);}}四、实验总结。
实验二 IO开关量输入实验一、实验概述使用按键来控制单片机IO口的高低电平。
二、实验目的熟悉单片机的最小系统,了解单片机I/O的结构;掌握按键键值的读入和处理;学习简单程序的编写。
三、实验预习要求1、单片机最小系统电路构成;2、I/O口的内部结构;3、简单程序指令熟悉;四、实验原理图:AT89C52本实验使用了单片机AT89C52来做实验,该单片机有4组IO口。
单片机总的IO 会分为这几类:电平可变化的IO口和VCC、GND两类。
其中电平可变化的IO有P0口、P1口、P2口、P3口。
本实验就是读取了P1口的电平从而读取按键输入的值,P0口来输出高低电平来控制LED的亮或灭。
图:P1口的电路R1、R2是上拉电阻,拉高了P10和P11两个端口的电平,当按下按键的时候,相应的端口变为低电平。
图:P0口的电路P0口接了8个LED,RP1是限流电阻,保护LED,避免电流过高,烧坏LED;RP2是上拉电阻,将P0口的电平拉高。
五、Proteus使用的元器件1.AT89C51 //51单片机。
2.BUTTON //按键,用于最小系统复位;实现输入功能。
3.CAP //电容,用于搭建复位电路。
4.CAP-ELEC //电解电容,用于搭建复位电路。
5.CRYSTAL //晶振,给单片机提供时钟信号。
6.LED-YELLOW //黄色LED灯。
7.RES //电阻。
8.RESPACK-8 //排阻;RP1是限流电阻,RP2是上拉电阻。
六、实验要求1、利用单片机,按键和发光二极管,构成一个LED灯控制电路;2、上电时, 点亮LED,按下K1时, LED向左移一位,按下K2时, LED向右移一位。
七、硬件连接图1. 硬件电路图:8位独立LED图:8位独立按键2.硬件连接表3.Proteus仿真图图:Proteus仿真图八、实验程序/******************************************************************** ****文件名称: main.c作者:版本: V1.00说明: IO开关量输入实验修改记录:-------------------------------------------------------------------------* 功能描述: 按键扫描程序* 上电时, 点亮P00口LED ,按下K1时, LED向右移一位,按下K2时, LED向左移一位-------------------------------------------------------------------------* 接线说明:P10-K1,P11-K2,P00~P07——D1~D8********************************************************************** ****/#include <reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int/**********单片机IO口引脚定义********************************************/#define LED P0sbit K1 = P1^0;sbit K2 = P1^1;/**********函数定义******************************************************/uchar scan_key();void proc_key(uchar key_v);void delayms(uchar ms);/**********主函数********************************************************/void main(void){uchar key_s,key_v;key_v = 0x03; //初始化IO口LED = 0xfe;while(1){key_s = scan_key();if(key_s != key_v) //判断按键是否按下{delayms(10); //延时消抖key_s = scan_key();if(key_s != key_v){key_v = key_s;proc_key(key_v);}}}}/**********键盘扫描函数**************************************************/ uchar scan_key(){uchar key_s;key_s = 0x00;key_s |= K2;key_s <<= 1;key_s |= K1;return key_s; //返回按键号}/**********键盘处理函数**************************************************/ void proc_key(uchar key_v){if((key_v & 0x01) == 0){LED = _cror_(LED,1); //循环右移一位}else if((key_v & 0x02) == 0){LED = _crol_(LED, 1); //循环左移一位}}/***********延时函数*****************************************************/void delayms(uchar ms)// 延时子程序{uchar i;while(ms--){for(i = 0; i < 120; i++);}}九、实验步骤1、打开Proteus 8环境,在快捷工具栏中点击源代码按纽,然后在菜单栏选择系统-编译器配置。
《信息技术综合实践》课程实验报告
1.打开KeiluVision2应用程序,新建一个工程,将IO.c文件添加到新建的工程中(将头文件中的头文件中的regx修改为reg),在输出中选择生成相应的HEX文件并保存到相应文件夹中
2.打开KeiluVision2应用程序,新建一个工程,将IO.c文件添加到新建的工程中(将头文件中的头文件中的regx修改为reg),在输出中选择生成相应的HEX文件并保存到相应文件夹中,进行文件的编译和调试。
3.进行实验箱的连线。
4.打开下载器,擦除并将生成的HEX文件调入Flash,然后选择“自动”。
5.通过示波器观察实验现象
5.1 示波器波形图
5.1.1(i的范围是小于500,波形图如下所示)
由图可知:当不修改i的范围时,波形的频率比较高,约在150Hz左右。
5.1.2(将代码中i的范围修改为小于20000,波形图如下所示)
由图可知:将i的范围变大以后,波形的频率变低并且稳定在5Hz左右。
5.2 小灯闪烁视频
(灯亮时的图片)。
实验一 I/O 口输入、输出实验一、实验目的掌握单片机P1口、P3口的使用方法。
二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。
以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口);用8 位数据线连接八位逻辑电平显示模块的JD4B 到CPU 模块的JD8(P1 口)。
2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。
五、实验参考程序本实验参考程序:;//******************************************************************;文件名: Port for MCU51;功能: I/O口输入、输出实验;接线: 用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。
;//******************************************************************DIR BIT P3.0ORG 0000HLJMP STARTORG 0100HSTART:OUTPUT1:MOV A, #0FEHMOV R5, #8LOOP1:CLR CMOV C,DIRJC OUTPUT2MOV P1, ARL AACALL DELAYDJNZ R5, LOOP1SJMP OUTPUT1OUTPUT2:MOV A, #07FHMOV R5, #8LOOP2:CLR CMOV C,DIRJNC OUTPUT1MOV P1, ARR AACALL DELAYDJNZ R5,LOOP2SJMP OUTPUT2DELAY:MOV R6,#0DELAYLOOP1:MOV R7,#0DELAYLOOP2:NOPNOPDJNZ R7,DELAYLOOP2DJNZ R6,DELAYLOOP1RET六.实验现象及心得:现象:打开开关,可以观察到L1到L7灯循环点亮。
单片机实验-IO口的输入输出实验
实验二 I/O 口输入、输出实验
一、实验目的
1. 学习I/O 口的使用方法。
2. 学习延时子程序、查表程序的编写和使用。
二、参考程序框图
开延时
设置初始数据输左移开始 读入P1口置计数P1口置1 将读入的值P1=0
Y
N
输入值右移Cy=0
N 计数Y 以计数值段码输出
DJNZ R6,DE2;
DJNZ R7,DE1;
RET
END
2、I/O口输入输出(方法一)
ORG 0000H;
START : MOV P2,#00H; //初始化
MOV P0,#00H;
MOV P1,#0FFH; //p1口初始化给ffh值
MOV DPTR,#TABLE; //表地址存入DPTR
MOV 50H,#0FEH; //比较初值载入地址50h
L0 :MOV A,P1; //按键消抖
CJNE A,#0FFH,L1;
AJMP L0;
L1 :MOV A,P1;
CJNE A,#0FFH,LL1;
AJMP L0;
LL1 :CJNE A,50H,LL2; //是否与地址50h 中数据相等
MOV P0,A; //相等输出对应led灯
MOV A,#00H;
MOVC A,@A+DPTR;
MOV P2,A; //输出表格数据到数码管
LCALL DELAY; //延时
LJMP START; //返回程序开头LL2 :XCH A,50H; //交换数据
RL A; //左移
XCH A,50H; //再次交换,此时地址50h中数据左移一位
INC DPTR; //表格数据地址加一
LJMP LL1; //返回继续比较
DELAY : MOV R7,#01H; //延时程序
DE1 : MOV R6,#28H;
DE2 : MOV R5,#5AH;
DJNZ R5,$;
DJNZ R6,DE2;
DJNZ R7,DE1;
RET
TABLE : ;//DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;
DB
06H,5BH,4FH,66H,6DH,7DH,07H,7FH;
//表格数据
END
程序二(方法二)
ORG 0000H
MOV P2,#00H; //I./O口初始化
MOV P1,#0FFH; //P1口赋FFH初值
MOV P0,#00H;
START : MOV P2,#00H; //P2清0;
MOV P0,#00H; //P0清0;
MOV R1 ,P1;
MOV A,R1; //读P1口
CJNE A,#0FFH,L1; //是否有数据输入
AJMP START; //无输入则跳转,继续查询
LCALL DELAY;
L1 : MOV R1,P1; //消除按键抖动
MOV A,R1;
CJNE A, #0FFH,LL1;
AJMP START;
LL1 : CJNE A,#0FEH,LL2; //是否按键1输入
MOV P2,#06H; //是则P2输出相应的按键号码
CPL A; //A取反
MOV P0,A; //输出到P0口
LCALL DELAY; //延迟
AJMP LP; //跳转到LP LL2 : CJNE A,#0FDH,LL3; //是否按键2
输入
MOV P2,#5BH; //以下同上
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL3 : CJNE A,#0FBH,LL4; //判断按键3是否按下
MOV P2,#4FH;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL4 : CJNE A,#0F7H,LL5; //判断按键4是否按下
MOV P2,#66H;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL5 : CJNE A,#0EFH,LL6; //判断按键5是否按下
MOV P2,#6DH;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL6 : CJNE A,#0DFH,LL7; //判断按键6是否按下
MOV P2,#7DH;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL7 : CJNE A,#0BFH,LL8; //判断按键7是否按下
MOV P2,#07H;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL8 : CJNE A,#7FH,LP; //判断按键8是否按下
MOV P2,#7FH;
CPL A;
MOV P0,A;
LCALL DELAY;
LP : AJMP START; //跳转回程序开头
DELAY : MOV R7,#01H; //延时程序
DE1 : MOV R6,#28H;
DE2 : MOV R5,#5AH;
DJNZ R5,$;
DJNZ R6,DE2;
DJNZ R7,DE1;
RET
END
四、思考题
1、LED循环方向更改:RL A; 改成RR A;
1S的延时程序: DELAY : MOV R7,#20; //延时程序
DE1 : MOV R6,#200;
DE2 : MOV
R5,#123;
DJNZ
R5,$;
DJNZ
R6,DE2;
DJNZ
R7,DE1;
RET
2、提高电阻阻值
3、一般为5V或者3.3V。
单片机上电时I/O口出于高电平,则I/O口的输出电压要经过PNP三极管放大,再对继电器控制。