第二次任务 用单片机实现按键控制LED灯亮 实验目的 1、进一步掌握并行口的使用方法 2、熟悉片内RAM的构成 3、进一步学习指令系统 4、学习DVCC单片机存储器的操作方法 二、实验设备 DVCC仿真系统一套、计算机一台。 实验原理 1、由P3.3控制4个LED按16进制方式发光。 2、将20H中压缩BCD码拆成两个单字节BCD码,依次存放21H、22H
第二次任务 --用单片机实现按键控制LED灯亮 ◼ 一、实验目的 1、进一步掌握并行口的使用方法。 2、熟悉片内RAM的构成 3、进一步学习指令系统 4、学习DVCC单片机存储器的操作方法 ◼ 二、实验设备 DVCC仿真系统一套、计算机一台。 ◼ 三、实验原理 1、由P3.3控制4个LED按16进制方式发光。 2、将20H中压缩BCD码拆成两个单字节BCD码,依次存放21H、22H
四、实验线路 P10 IAl P11 1A21Y2 P12 1A31Y3 P1.3 1A41Y4 P14 Al 2Y1 8031P15 2A2 2Y2 P16 2A3 2Y3 P1.7 2A42Y4 74LS240 LEDO LED7 R0~R7 IG 74LS240 P3.3 八线缓冲器/驱动器 K 俞入输出 5V GA Y H 「Hx「高阻 返
四、实验线路 P1.0 P1.1 P1.2 P1.3 P1.4 8031 P1.5 P1.6 P1.7 P3.3 +5V +5V LED0~LED7 1A1 1Y1 1A2 1Y2 1A3 1Y3 1A4 1Y4 2A1 2Y1 2A2 2Y2 2A3 2Y3 2A4 2Y4 74LS240 1G 2G R0~R7 K 74LS240 八线缓冲器/驱动器 输入 输出 G A Y L L H L H L H X 高阻 返回
五、程序清单 ORG 000Oh DELAY: PUSH R2 HA1s:MoVA,#00H卜 DELAY1: PUSH R2 HA1s1:BP33,HA1S1改为 DELAY2: PUSH R2 MOV R2, #20H DELAYS: DNZ R2, DELAY3 LCALL DELAY MOV P1, #OFEH POP R2 JB P3.3, HA1S1 DJNZ R2, DELAY2 HA1S2NB P3,HA1S2 POP R2 MOV R2#20H DJNZ R2, DELAY1 LCALL DELAY POP R2 JNB P3. 3, HA1S2 DNZ R2 DELAY INCA RET PUSH ACC END CPLA MOV AP1 爱思软件 MOV PLA 改为 RL A POP ACC MOV PLA 2 1.ASM AJMP HA1S1
五、程序清单 ORG 0000h HA1S:MOV A,#00H HA1S1:JB P3.3,HA1S1 MOV R2,#20H LCALL DELAY JB P3.3,HA1S1 HA1S2:JNB P3.3,HA1S2 MOV R2,#20H LCALL DELAY JNB P3.3,HA1S2 INC A PUSH ACC CPL A MOV P1,A POP ACC AJMP HA1S1 DELAY: PUSH R2 DELAY1: PUSH R2 DELAY2: PUSH R2 DELAY3: DJNZ R2,DELAY3 POP R2 DJNZ R2,DELAY2 POP R2 DJNZ R2,DELAY1 POP R2 DJNZ R2,DELAY RET END MOV A,P1 RL A MOV P1,A MOV P1,#0FEH 改为 改为 爱思软件 2_1.ASM
程序解析 ORG ooh HA1S:MovA#00H;A赋初值ooH HA1S1:JBP33HA1S1;P3.3为1则等待 MovR2,#20H;R2为循环量初值 LCALL DELAY;调延时子程序 JBP33,HA1S1;P33为1则返回,判断是否键抖动 HA1S2:小NBP33HA1S2;不是抖动,P33不为1则等待 MOV R2#20H LCALL DELAY JNBP33HA1S2;P33不为1则返回 INC A P33从0变为1,又从1变为0,即开关来回拨动了一次 PUSH ACC A=03H压入堆栈 CPLA A=OFB 改写这部分程序,就可 MoVP1,AP1=0FBH,亮三个灯 改变开关操作时LED的 POP ACC栈顶内容0H弹出赋给A=02H变化规律 AMP HA1S1;返回HA1S1 ○○○○○○○○ 如果不用堆栈,就必须指定一个地址存放A,在大程序中, 这个地址可能存放重要数据,而生成整个程序出错
程序解析 ORG 0000h HA1S: MOV A,#00H;A赋初值00H HA1S1:JB P3.3,HA1S1;P3.3为1则等待 MOV R2,#20H;R2为循环量初值 LCALL DELAY;调延时子程序 JB P3.3,HA1S1;P3.3为1则返回,判断是否键抖动 HA1S2:JNB P3.3,HA1S2;不是抖动, P3.3不为1则等待 MOV R2,#20H LCALL DELAY JNB P3.3,HA1S2; P3.3不为1则返回 INC A ;P3.3从0变为1,又从1变为0,即开关来回拨动了一次 PUSH ACC CPL A MOV P1,A POP ACC AJMP HA1S1;返回HA1S1 A=01H压入堆栈 A=0FEH P1=0FEH,亮一个灯 栈顶内容01H弹出赋给A=01H A=02H压入堆栈 A=0FDH P1=0FDH,亮二个灯 栈顶内容02H弹出赋给A=02H A=03H压入堆栈 A=0FCH P1=0FCH,亮一个灯 栈顶内容03H弹出赋给A=03H 如果不用堆栈,就必须指定一个地址存放A,在大程序中, 这个地址可能存放重要数据,而生成整个程序出错。 改写这部分程序,就可 改变开关操作时LED的 变化规律
并行口了/的功能 ■MCS-51有4个双向的8位并行I/O口P0~P3,在无片外存储器的 系统中,这4个I/O口的每一位都可作为准双向通用I/O口使用 在具有片外存储器的系统中,P2口作为地址的高八位,P0口作为 地址的低八位和双向数据总线 ■1、PO口可作为通用I/O口使用,但实际应用时通常作为地址/数据 总线,即低8位地址与数据线分时使用PO口,此时PO口为真正的双 向口。若作为通用I/O口,在输入数据时,要先向锁存器写1,否则, 若此前该口曾输出锁存过0,则输入的1就无法正确的读入。因此, 称P0为准双向口。 2、P1口每一位都可以作为可编程输入或输出线,也是准双向口,在 输入数据时,要先向锁存器写1。 3、P2口也是准双向口,当系统中有片外存储器时,P2口用于输出 高八位地址。在8031中P2口一般只作为地址总线使用。 4、P3口为双功能口,作为第一功能时,作用同P1口。第二功能以 后再讲。 返回
并行口I/O的功能 ◼ MCS-51有4 个双向的8 位并行I/O口P0~P3,在无片外存储器的 系统中,这4 个 I/O口的每一位都可作为准双向通用I/O口使用。 在具有片外存储器的系统中,P2口作为地址的高八位,P0口作为 地址的低八位和双向数据总线。 ◼ 1、P0口可作为通用I/O口使用,但实际应用时通常作为地址/数据 总线,即低8 位地址与数据线分时使用P0口,此时P0口为真正的双 向口。若作为通用I/O口,在输入数据时,要先向锁存器写1 ,否则, 若此前该口曾输出锁存过0,则输入的1 就无法正确的读入。因此, 称P0为准双向口。 ◼ 2、P1口每一位都可以作为可编程输入或输出线,也是准双向口,在 输入数据时,要先向锁存器写1。 ◼ 3、P2口也是准双向口,当系统中有片外存储器时,P2口用于输出 高八位地址。在8031中P2口一般只作为地址总线使用。 ◼ 4、P3口为双功能口,作为第一功能时,作用同P1口。第二功能以 后再讲。 返回