单片机实验 IO口的输入输出实验.docx
实验二I/O口输入、输出实验
一、实验目得
1、学习I/O口得使用方法。
2、学习延时子程序、查表程序得编写和使用。
二、参考程序框图
开始读入P1口值
开始
读入P1口值
置计数初值=0
P1口置1
将读入得值输出到P0
P1=0FFH?
Y
N
输入值右移1位到Cy
Cy=0?
N
计数值+1
Y
以计数值查段码表
段码输出到P2
开始
延时
设置初始值
数据输出
左移一位
三、程序设计
1、P0口循环点亮程序
ORG0030H
START:MOVP2,#00H;//消影
MOVA,#01H;//
LOOP:MOVP2,A;//点亮一个led灯
ACALLDELAY;//延时500ms
RLA;//左移一位
AJMPLOOP;//跳转循环
DELAY:MOVR7,#10;//延时程序
DE1:MOVR6,#200;
DE2:MOVR5,#123;
DJNZR5,$;
DJNZR6,DE2;
DJNZR7,DE1;
RET
END
2、I/O口输入输出(方法一)
ORG0000H;
START:MOVP2,#00H;//初始化
MOVP0,#00H;
MOVP1,#0FFH;//p1口初始化给ffh值
MOVDPTR,#TABLE;//表地址存入DPTR
MOV50H,#0FEH;//比较初值载入地址50h
L0:MOVA,P1;//按键消抖
CJNEA,#0FFH,L1;
AJMPL0;
L1:MOVA,P1;
CJNEA,#0FFH,LL1;
AJMPL0;
LL1:CJNEA,50H,LL2;//就就是否与地址50h中数据相等
MOVP0,A;//相等输出对应led灯
MOVA,#00H;
MOVCA,A+DPTR;
MOVP2,A;//输出表格数据到数码管
LCALLDELAY;//延时
LJMPSTART;//返回程序开头
LL2:XCHA,50H;//交换数据
RLA;//左移
XCHA,50H;//再次交换,此时地址50h中数据左移一位
INCDPTR;//表格数据地址加一
LJMPLL1;//返回继续比较
DELAY:MOVR7,#01H;//延时程序
DE1:MOVR6,#28H;
DE2:MOVR5,#5AH;
DJNZR5,$;
DJNZR6,DE2;
DJNZR7,DE1;
RET
TABLE:;//DB0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;
DB06H,5BH,4FH,66H,6DH,7DH,07H,7FH;//表格数据
END
程序二(方法二)
ORG0000H
MOVP2,#00H;//I、/O口初始化
MOVP1,#0FFH;//P1口赋FFH初值
MOVP0,#00H;
START:MOVP2,#00H;//P2清0;
MOVP0,#00H;//P0清0;
MOVR1,P1;
MOVA,R1;//读P1口
CJNEA,#0FFH,L1;//就就是否有数据输入
AJMPSTART;//无输入则跳转,继续查询
LCALLDELAY;