1、 实验二 I/O口输入、输出实验 一、实验目的 1. 学习I/O口的使用方法。 2. 学习延时子程序、查表程序的编写和使用。 二、参考程序框图 开始 读入P1口值 置计数初值=0 P1口置1 将读入的值输出到P0 P1=0FFH? Y N 输入值右移1位到Cy Cy=0? N 计数值+1 Y 以计数值查段码表 段码输出到P2 开始 延时 设置初始值 数据输出 左移一位
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
3、 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; //表地址存入D
4、PTR 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;
5、 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;
6、 //返回 继续比较 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; //表格数据
7、 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;
8、 //读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; //是
9、则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;
10、 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 : CJN
11、E 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; //判断
12、按键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
13、 : 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三极管放大,再对继电器控制。






