单片机io口实验报告

合集下载

2单片机IO口控制实验实验报告

2单片机IO口控制实验实验报告
16、INT0/1相关控制位:
IT0/IT1——触发方式选择位
0:低电平触发方式,-INT0/1低电平时IE0/IE1=0,
INT0/1高电平时IE0/IE1=1。
1:下降沿触发方式,检测到下降沿,则使IE0/IE1=1,CPU相应中断后自动清除IE0/IE1。
三、实验内容
(1)编写程序,用P1.0~P1.2口连LED,查询拨盘开关SW1的状态来控制LED的亮和灭(P1.7口接SW1)。
实验中也出现了一些问题,在原理图的设计上,LED缺少驱动电路,同时按键开关缺少下拉电阻,导致悬空,这些都是在以后的实验中值得注意的地方,需要改进。
(2)在4个口中只有P0口是一个真正的双向口,P1~P3口都是准双向口。
原因:P0口作数据总线使用时,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。为此,
P0口的输出缓冲器应为三态门。 P0口中输出三态门是由两只场效应管(FET)组成,所以是一个真正的双向口。
2、在keil环境下编辑汇编程序,且调试无差错。将程序下载到单片机后,程序运行顺利,实现了预期的功能,即每按一次按键S0,LED灯D0、D1、D2状态取反一次。
八、实验分析
本次实验较为简单,进行的也很顺利,实现了预期的功能。在试验过程中也加深了对I//O口和外部中断尤其是INT0的理解。
在中断实验中,进一步理解了中断服务程序的结构,即保护现场、处理中断的程序、恢复现场、中断返回。其中RETI的作用有两个,弹出PC和清除中断服务标志(给“优先级生效”触发器清零)。在编写服务中断程序时,有些地方需要注意:中断程序入口处的处理;在保护现场和恢复现场时可以关闭CPU中断,一面造成混乱。
P3口的某位不作为第二功能使用时,则自动处于通用输出/输入口功能,可作为通用输出/输入口使用;

单片机实验报告_简单I/O端口扩展

单片机实验报告_简单I/O端口扩展

单片机原理与接口技术实验
实验二简单I/O端口扩展实验(1)
系别:通信工程系
专业:通信工程系11级
学号:
姓名:
实验时间:2014年3月13日
撰写日期:2014年m月n日
实验二简单I/O端口扩展实验(1)
一、实验目的
1、学习单片机扩展简单I/O端口的方法;
2、掌握通过总线输入/输出的编程方法;
3、掌握扩展总线接口芯片的地址分配方法。

二、实验内容(与本次实验报告标题括号中的数字对应)
1、先将8个开关量(K1~K8)从74244的输入端口读入,再把开关量的状态通过74273实时显示在发光二极管上。

【基础,周二/四下午每人做】
三、实验设计思路
通过中间变量,将244的内容传到273输出。

四、电路原理图及接线说明
74273接片选CS1,74244接片选CS2;开关状态接到244的输入;273的输出接到LED灯。

五、实验流程图
运行程序,拨动开关,LED
七、总结
此次实验一步到位。

附录:实验源程序以压缩包提供整个项目文件例如: s03_lab02_1a.rar。

实验二 I-O口输入、输出实验报告

实验二 I-O口输入、输出实验报告

姓名学号时间地点实验题目I/O口输入、输出实验一、实验目的1. 学习I/O口的使用方法。

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

二、实验仪器和设备PC机、WA VE软件、仿真器+仿真头、实验板、电源等。

三、实验说明本实验1通过单片机的I/O口控制LED的亮灭,从而观察I/O口的输出。

实验2通过单片机的I/O口接受按键动作信息,然后通过LED和数码管指示。

通过本实验学生可以掌握单片机I/O口输入输出的控制方法,同时也可以掌握单片机延时子程序、查表程序的编写和调试方法。

要求预先编写好程序并通过伟福仿真软件调试。

四、实验内容1、P0口做输出口,接八只LED,编写程序,使LED循环点亮,间隔0.5秒。

2、P1.0--P1.7作输入口接拨动开关S0--S7;P0.0--P0.7作输出口,接发光二极管L1—L8,编写程序读取开关状态,将此状态在对应的发光二极管上显示出来,同时将开关编号(0—7)显示在LED数码管上。

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

五、实验电路连线P0.0 ---- LED0 P1.0 ----- S0P0.1 ---- LED1 P1.1 ----- S1P0.2 ---- LED2 P1.2 ----- S2P0.3 ---- LED3 P1.3 ------ S3P0.4 ---- LED4 P1.4 ------ S4P0.5 ---- LED5 P1.5 ------ S5P0.6 ---- LED6 P1.6 ------ S7P0.7 ---- LED7 P1.7 ------ S8实验1:P0口循环点灯实验2:P1、P0口输入输出a b cdef gh(dp)a b c d e f g h(dp)P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7实验2: LED 数码管各段与I/O 的连接六、程序框图及程序P0口循环点灯ORG 0000H;设定程序汇编起始地址 MOV A,#07FH ;设置初始值01111111 LP: MOV P0,A ;点亮LED0RR A ;将A 里面的值循环右移一位 LCALL DELAY ;调用延时子程序 LCALL DELAY SJMP LP ;循环点亮LED 灯DELAY: MOV R2,#0FAH ;0.25S 的延时程序 L1: MOV R3,#0FAH L2: DJNZ R3,L2 ;2*250=500usDJNZ R2,L1 ;500*250*2=250000us RET ;返回主程序P1口输入/输出ORG 0000 ;设定起始地址MOV P1,#0FFH ;P1口置1LOOP: MOV A,P1 ;读P1口CJNE A,0FFH,LED ;查询是否有按键按下SJMP LOOP ;等待LED: MOV P0, A ;有键按下,将值读入P0ACALL DELAY ;调用延时子程序MOV R5 ,#00H ;置计数初值=0LOOP1: RRC A ;输入右移1位JNC LOOP2 ;若Cy=0,则数码显示INC R5 ;Cy=1,则计数加1SJMP LOOP1 ;跳回继续移位LOOP2: MOV DPTR,#TAB ;所查表的首地址赋给DPTRMOV A,R5 ;计数值做偏移量MOVC A,@A+DPTRMOV P2,A ;显示相应按键值SJMP LOOPTAB:DB 60H,0DAH,0F2H,66H ;DB 0B6H,0BEH,0E0H,0FEH ;DELAY: MOV R2,#0FAH ;0.25S的延时程序L1: MOV R3,#0FAHL2: DJNZ R3,L2 ;2*250=500usDJNZ R2,L1 ;500*250*2=250000usRET ;返回主程序七、思考题1、实验1欲改变LED循环的方向程序应如何修改?循环的时间间隔由什么决定?写出间隔时间为1秒的延时程序并说明计算方法。

单片机(IO输入输出实验)

单片机(IO输入输出实验)

实验报告实验课程:单片机学生姓名:邱永洪学号:6100210026专业班级:中兴101 班2012年 11月28 日实验一 I/O 口输入、输出实验一、实验目的掌握单片机P1口、P3口的使用方法,对实验板的熟悉,如何根据实验板原理图进行连线。

二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。

以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。

因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。

若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区),八位逻辑电平输出电路原理图参见图1-1。

八位逻辑电平显示电路原理图参见图1-2。

五,程序为:;功能: I/O口输入、输出实验;接线: 用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.1口);; 用8位数据线连接八位逻辑电平显示模块的JD4B到CPU模块的JD8(P1口)。

;//****************************************************************** DIR BIT P3.1ORG 0000HLJMP STARTORG 0200HSTART:Output1:mov A, #0fEH ;把11111110二进制赋给A变量mov R5, #8 ;把8送到R5寄存器中loop1:CLR C ;把标志位清零mov C,DIR ;读入开关K0的值JC Output2 ;K0的状态为1则跳转到Output2mov P1, A ;从P1口输出A的值并显示在二极管上,该位为0则相应的二极管点亮rl A ;把A进行循环左移,相当于把0进行左移,由此二极管从右到左依次点亮》》》向左的跑马灯AcAll Delay ;调用延时子程序djnz R5, loop1 ;判断R5中的值是否为0,来判断是否重新置数,为0就跳到Output1,否则继续loop1Sjmp Output1Output2:mov A, #07fH ;把01111111二进制赋给A变量mov R5, #8 ;把8送到R5寄存器中loop2:CLR C ;把标志位清零mov C,DIR ;读入开关K0的值JNC Output1 ;K0的状态为0则跳转到Output1mov P1, A ;从P1口输出A的值并显示在二极管上,该位为0则相应的二极管点亮rr A ;把A进行循环右移,相当于把0进行左移,由此二极管从左到右依次点亮》》》向右的跑马灯AcAll Delay ;调用延时子程序djnz R5,loop2 ;判断R5中的值是否为0,来判断是否重新置数,为0就跳到Output2,否则继续loop2Sjmp Output2Delay: ;0减1后为-1其补码为11111111mov R6,#0 ;该延时为双重循环,总延时约为(1+1+(1+1+2)*257+2+(1+(1+1+2)*257)*256)us= 0.264456s这个值与实验现象很匹配DelayLoop1:mov R7,#0DelayLoop2:NOP ;空指令NOPdjnz R7,DelayLoop2 ;R7中值为0则跳转djnz R6,DelayLoop1 ;R6中值为0则跳转retend六、实验步骤1)系统各跳线器处在初始设置状态。

单片机实验一I/O端口实验报告参考模板

单片机实验一I/O端口实验报告参考模板

单片机原理与接口技术实验实验一 I/O端口实验(2)系别:通信工程系专业:通信工程系11级学号:233201122041姓名:实验时间:2014年3月6日撰写日期:2014年3月9日实验一 I/O端口实验(2)一、实验目的1、掌握单片机通用I/O端口的使用方法;2、掌握I/O端口数据输入/输出的方法。

二、实验内容(与本次实验报告标题括号中的数字对应)2、当开关状态为0101(K5K6K7K8)时,四个灯循环右移;当开关状态为1010(K5K6K7K8)时,四个灯循环左移;当开关为其它状态时,在LED1~LED4上显示开关状态。

程序运行时,拨动开关,显示立即跟着变化。

【基础,周四下午每人做】三、实验设计思路对于该题,因为有3种情况,所以参考课本P68程序,在while循环结构内添加if-else条件判断语句,分别区分右移、左移、与开关状态一致3种情况。

四、电路原理图及接线说明绘制本次实验用到的部分完整电路原理图如下:开关K5K6K7K8与P2.0~P2.3相连线;LED:1~8和P1.0~P1.7相连线。

五、实验流程图见下图:六、调试过程及实验现象对于第该题,一开始运行灯全亮,经按F8逐步调试后,发现P2的值怎么也无法赋给变量b,导致无论如何拨动开关,b的值都不会改变,一直等于FF,使灯全亮。

后来经助教指点方知是P2口没有设置为I/O模式,以致于无法将P2的值传输给b。

修改设置后,一切运行正常。

七、总结本次实验的实验难度不大,第一题参考课本的8位左移右移例子稍作修改便可运行,因为实验原理一样;但却因为一开始自己不够细心导致的一些软件设置问题而严重影响到了自己的实验进度,像这样的错误今后一定要避免。

第一次接触单片机,感觉还挺有趣意思的。

附录:实验源程序以压缩包提供整个项目文件例如: s03-lab01-1a.rar友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。

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

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

单片机原理及应用实验二报告实验二:单片机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的亮灭。

单片机io口实验报告

单片机io口实验报告

实验一以下所有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);}}四、实验总结。

单片机实验报告-利用单片机的P1口作IO口

单片机实验报告-利用单片机的P1口作IO口

单片机原理及应用实验报告实验名称:实验一一、实验目的利用单片机的P1口作IO口,使用户学会利用p1口作为输入和输出。

二、实验设备及器件IBM PC机一台DO-51PRO单片机综合仿真实验仪一台三、实验内容1、编写一段程序,用P1口作为控制端口,使D1区的LED轮流亮。

2、编写一段程序,用P1.0~P1.6口控制LED.P1.7控制LED的亮和灭(P1.7接按键,按下时LED亮,不按时LED灭)四、实验步骤1、连接好电路,如下图所示:2、编写一个延时程序。

3、将LED轮流亮的程序编写完整并调试运行。

4、使用导线将A2区的J16接口的P1.0~P1.6与D1区的J51接口的LED1~LED7相连,另外A2区的J61接口的P1.7与D1区的J53的KRY1相连。

如下图所示:5、编写P1.7控制LED的程序,并调试运行。

(按下KEY1看是否全亮)6、A2区J61接口的P1.7与D1区的J54的SW1相连。

然后运行程序,拨动开关MOD_SW1查看结果。

五、实验程序程序一:ORG 0000H ;此为硬件仿真调试程序,如果用户使用软件仿真或直接运行,应改为0000HLJMP MainORG 0100H ;此为硬件仿真调试程序,如果用户使用软件仿真或直接运行,应改为0100HMain: MOV A,#0FFHCLR CMainLoop:CALL DelayRLC AMOV P1,ASJMP MainLoopDelay: MOV R7, #0Loop: MOV R6, #0DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R7, LoopRETEND运行结果:调试运行时,LED轮流的被点亮。

程序二:ORG 0000H ;此为硬件仿真调试程序,如果用户使用软件仿真或直接运行,应改为0000HLJMP MainORG 0100H ;此为硬件仿真调试程序,如果用户使用软件仿真或直接运行,应改为0100HMain: JB P1.7,SETLEDCLRLED:CLR P1.0CLR P1.1CLR P1.2CLR P1.3CLR P1.4CLR P1.5CLR P1.6SJMP MainSETLED: SETB P1.0SETB P1.1SETB P1.2SETB P1.3SETB P1.4SETB P1.5SETB P1.6SJMP MainEND运行结果:调试运行时,按下开关,所有的LED亮,再按时,所有的LED灭。

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

实验一
以下所有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);
}
}
四、实验总结。

相关文档
最新文档