1、 实验二 I/O 口输入、输出实验一、实验目的1. 学习 I/O 口的使用方法。2. 学习延时子程序、查表程序的编写和使用。二、参考程序框图三、程序设计1、P0 口循环点亮程序ORG 0030HSTART : MOV P2,#00H; /消影MOV A ,#01H; /LOOP : MOV P2 ,A; /点亮一个 led 灯开始延时设置初始值数据输出左移一位开始读入 P1 口值置计数初值=0P1 口置 1将读入的值输出到 P0P1=0FFH?YN输入值右移 1 位到 CyCy=0?N计数值+1Y以计数值查段码表段码输出到 P2ACALL DELAY; /延时 500msRL A; /左移一位
2、AJMP LOOP; /跳转循环DELAY : MOV R7,#10; /延时程序DE1 : MOV R6,#200;DE2 : MOV R5,#123;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1;RETEND 2、I/O 口输入输出(方法一)ORG 0000H;START : MOV P2,#00H; /初始化MOV P0,#00H;MOV P1,#0FFH; /p1 口初始化给 ffh 值 MOV DPTR,#TABLE; /表地址存入 DPTRMOV 50H,#0FEH; /比较初值载入地址 50hL0 :MOV A,P1; /按键消抖CJNE A,#0FFH,L
3、1;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 :
4、MOV R7,#01H; /延时程序DE1 : MOV R6,#28H;DE2 : MOV R5,#5AH;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1;RETTABLE : ;/DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH; /表格数据END 程序二(方法二)ORG 0000HMOV P2,#00H; /I./O 口初始化MOV P1,#0FFH; /P1 口赋 FFH 初值MOV P0,#00H;START : MOV P2,#00H; /P2 清 0;MOV P0,
5、#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; /跳转到 LPLL2 : CJN
6、E 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;MO
7、V 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 : M
8、OV R7,#01H; /延时程序DE1 : MOV R6,#28H;DE2 : MOV R5,#5AH;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1;RETEND 四、思考题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;RET2、提高电阻阻值3、一般为 5V 或者 3.3V。单片机上电时 I/O 口出于高电平,则 I/O 口的输出电压要经过 PNP 三极管放大,再对继电器控制。