资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
综合实验:流水灯控制一、实验要求:根据开关状态选择八个流水灯的工作方式,且在任何状态下如有开关状态发生改变,则能立即转入最新开关状态所对应方式工作。模式一:顺序点亮八个灯,一直循环,直到开关状态改变。模式二:八个灯闪烁,即八盏灯全亮后全灭,一直循环,直到开关状态改变。模式三:间隔点亮八个灯,如对八盏灯编号为 L1、L2、L3、L4、L5、L6、L7、L8 ,则灯亮的方式为:L1 L3 L5 L7 , L2 L4 L6 L8 , L1 L3 L5 L7 ,L2 L4 L6 L8(从左往右循环) 。二、实验内容:开关 S1、S2 分别与 P3.1、P3.0 连接,用于流水灯工作方式控制,开关组合为00、01、02、03,其中 00 为无效状态,01、02、03 分别对应连续方式点亮灯、闪烁、间隔点亮。八盏灯 L1、L2、L3、L4、L5、L6、L7、L8 分别与 P1.0P1.7 连接,八盏灯为共阴极连接,即高电平点亮。由于灯的状态改变时间间隔小于肉眼能分辨的最小时间间隔,所以在程序实现的时候必须在灯两种状态之间引入延时处理,以便肉眼能够分辨。三、程序流程图:1.延时子程序(条件转移侧 N,竖 Y , 此页有效)开始R7=13HR6=14HR5=82HR5-1=0?R6-1=0?返回R7-1=0?2、主程序: 开始初始化 P1 口扫描 P3 口R0=01HR0=02HR0=03H连续方式间隔点亮,R3=R4=4延时 200 毫秒延时 200 毫秒延时 200 毫秒顺序点亮一个灯灯全亮A 送 P1 口扫描 P3 口延时 200 毫秒灯全灭扫描 P3 口R4=4,扫描 P3 口R0=01HR0=02H?R0=03H?R0=03HR0=01HR0=02HR0=03HR0=01HR0=03HR0=03H?R0=02HR0=01HR0=01HR0=02HR0=00H闪烁P3.1 P3.0RR A, RR A , R3-1A=80HR3-1=0?R3=4, A=40HA 送 P1 口R4-1=0?RR A, RR A , R4 -1延时 200 毫秒四、程序代码: ORG 0000HSJMP MAINORG 0030HMAIN:MOV SP,#60HRESCAN:MOV A,#00HMOV P1,A ;灯全灭LCALL SCAN ;扫描 P3 口状态 CJNE R0,#01H,NEXT1 AJMP MODE1 ;如果 P3=FDH,则转入 MODE1 执行(灯连续点亮)NEXT1: CJNE R0,#02H,NEXT2AJMP MODE2 ;如果 P3=FEH,则转入 MODE2 执行(灯闪烁)NEXT2: CJNE R0,#03H,NEXT3AJMP MODE3 ;如果 P3=FFH,则转入 MODE3 执行(间隔点亮灯)NEXT3: SJMP RESCAN ;如果 P3=FCH(无效状态),则不停的对 P3 口扫描 MODE1: ;灯连续点亮,从左往右(MODE1), P3=FDH MOV A,#00H MOV P1,AMOV R2,#80H ;R2=1000,0000LOOP1: MOV A,R2MOV P1,ARR A MOV R2,A ;A 向右移一位后回送 R2 LCALL DEL200 ;调用 200Ms 延时子程序LCALL SCAN ;扫描 P3 口状态 CJNE R0,#01H,NEXT01 SJMP LOOP1 ;如果 P3 状态没变,跳到 LOOP1 执行 NEXT01:CJNE R0,#02H,NEXT02 AJMP MODE2 ;如果 P3 变为 P3=FEH,跳到 MODE2 执行NEXT02: CJNE R0,#03H,NEXT03 AJMP MODE3 ;如果 P3 变为 P3=FFH,跳到 MODE3 执行NEXT03: AJMP RESCAN ;如果 P3=FCH(无效状态),则不停的对 P3 口扫描 MODE2: ;灯闪烁(MODE2), P3=FEH MOV A,#00H LOOP2: MOV P1,A CPL ALCALL DEL200 ;延时 200Ms PUSH ACC ;扫描 P3 状态前,保护现场 LCALL SCAN ;扫描 P3 口POP ACC ;恢复现场CJNE R0,#02H,NEXT001SJMP LOOP2 ;如果状态没变,转到 LOOP2 执行NEXT001: CJNE R0,#01H,NEXT002AJMP MODE1 ;如果模式改变,P3=FEH,跳到 MODE2NEXT002: CJNE R0,#03H,NEXT003SJMP MODE3 ;如果模式改变,P3=FFH,跳到 MODE3 NEXT003: AJMP RESCAN ;如果 P3=FCH(无效状态),则不停的对 P3 口扫 描 MODE3:MOV A,#00H ;间隔点亮灯(MODE3),R0=03HMOV P1,AMOV R3,#04H ;R3,R4 都用来控制当前趟第一个灯亮的初始位置MOV R4,#04HMOV A,#80H ;准备给 P1 送 1000,0000 LOOP3 :MOV P1,ARR ARR ALCALL DEL200 ;延时 200MsDJNZ R3,LOOP3 ;判断当前(从第一个开始亮)趟结束MOV R3,#04H ;如果此趟结束,重设计数,为下一次做准备MOV A,#40H ;设置下一趟灯亮的初始位置(第二个) LOOP4: MOV P1,ARR ARR ALCALL DEL200 ;延时 200MsPUSH ACC ;保护现场LCALL SCAN ;扫描 P3 口POP ACC ;现场恢复CJNE R0,#03H,NEXT21 DJNZ R4,LOOP4 ;如果模式不变,且该趟没结束,则到 LOOP4MOV R4,#04H ;如果此趟结束(模式没变) ,则重置计数,为下一次做准 备MOV A,#80HSJMP LOOP3 ;执行当前模式的第二次亮灯NEXT21:CJNE R0,#01H,NEXT22AJMP MODE1 ;模式改变为 MODE1 则装到对应位置执行 NEXT22: CJNE R0,#02H,NEXT23AJMP MODE2 ;模式改变为 MODE2 则装到对应位置执行 NEXT23: AJMP RESCAN ;如果 R0=00H(无效状态),则不停的对 P3 口扫描 DEL200: ;如果晶振频率 f=6MHz,误差为 0MOV R7,#13H DL1: MOV R6,#14H DL0: MOV R5,#82HDJNZ R5,$ ;R5-10 时重复执行此句DJNZ R6,DL0DJNZ R7,DL1 RET SCAN:JB P3.0,MM ;P3 口状态扫描子程序JB P3.1,VVMOV A,#00HMOV R0,ARETVV:MOV A,#02HMOV R0,ARETMM:JB P3.1,NNMOV A,#01HMOV R0,ARETNN:MOV A,#03MOV R0,ARET END五、实验分析1、误差分析:假如晶振频率 f = 6MHz,那么一个机器周期 t = 0.002Ms。延时子程序种的指令所占的机器周期分别为:MOV 占一个 t、DJNZ 占 2t、RET 占 2t。 上述延时子程序可以做到无误差。内循环(DJNZ R5,$)延时 0.520Ms,次外循环由一条赋值指令(MOV R5,#82H) 、一条结束判断指令(DJNZ R6,DL0)和内循环构成,每次次外循环延时 0.526 Ms,外循环由一个次内循环、一条赋值指令(MOV R6,#82H)和一条结束判断指令(DJNZ R7,DL0)构成,延时为 10.526Ms,此外,最后还有一条返回指令(RET)和对外循环赋值指令(MOV R7,#13H) 。所以整个延时子程序延时时间计算如下:T = 19 20 (130 0.004 + 0.006)+ 0.006 + 0.006 (Ms) = 19 20 0.526 + 0.006 + 0.006= 19 10.526 + 0.006= 199.994 + 0.006=200 Ms所以误差 = 0 。2、程序转移出错分析现象:有时使用 SJMP(短转移指令)时编译出错,改用 AJMP 后恢复正常。分析:SJMP(短转移指令)转移范围为-126 129,编译程序时如果转移范围越界时就会出错。而换用 LJMP(绝对转移指令),寻址范围为 11 位,即可以在 2KB 范围内转移。因此错误的本质是转移范围。如果把单片机 64KB 寻址空间分为 32 页,则没页为 2KB,所以AJMP 也称作页面转移指令。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号