单片机实验 IO口的输入输出实验

单片机实验 IO口的输入输出实验
单片机实验 IO口的输入输出实验

实验二I/O口输入、输出实验

一、实验目的

1. 学习I/O口的使用方法。

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

二、参考程序框图

三、程序设计

1、P0口循环点亮程序

ORG 0030H

START : MOV P2,#00H; //消影

MOV A ,#01H; //

LOOP : MOV P2 ,A; //点亮一个led灯

ACALL DELAY; //延时500ms

RL A; //左移一位

AJMP LOOP; //跳转循环

DELAY : MOV R7,#10; //延时程序

DE1 : MOV R6,#200;

DE2 : MOV R5,#123;

DJNZ R5,$;

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三极管放大,再对继电器控制。

相关主题
相关文档
最新文档