为什么判断是否按键被按下语句要放在延时子程序中呢?

[复制链接]
2903|3
 楼主| 花千骨 发表于 2013-12-22 11:17 | 显示全部楼层 |阅读模式
  1. ;控制LED1与LED2间隔500ms交替发光,当按下K1并不松开时,变为间隔200ms交替发光,松开则回到原来的频率       
  2.                 ORG 00H
  3. START:       
  4.                 MOV P1,0FFH                       
  5.                 ;JNB P1.0,FLASH               
  6.                 CLR        P0.0                                
  7.                 SETB P0.1                
  8.                 CALL DELAY1
  9.                 SETB P0.0
  10.                 CLR P0.1
  11.                 CALL DELAY1
  12.                 JMP START

  13. FLASH:       
  14.                 CLR        P0.0                                
  15.                 SETB P0.1                
  16.                 CALL DELAY2
  17.                 SETB P0.0
  18.                 CLR P0.1
  19.                 CALL DELAY2

  20. ;延时子函数1,延时500ms
  21. DELAY1:                                         
  22.                 ;JNB P1.0,FLASH               
  23.                 MOV R1,#50
  24. D1:               
  25.                 ;JNB P1.0,FLASH
  26.                 MOV R2,#20
  27. D2:                MOV R3,#248
  28.                 JNB P1.0,FLASH                       
  29.                                        
  30.                 DJNZ        R3,$
  31.                 DJNZ        R2,D2
  32.                 DJNZ        R1,D1
  33.                 RET
  34. ;延时子函数2,延时200ms
  35. DELAY2:
  36.                 MOV        R1,#20
  37. D3:                MOV         R2,#20
  38. D4:                MOV        R3,#248
  39.                 DJNZ        R3,$
  40.                 DJNZ        R2,D4
  41.                 DJNZ        R1,D3
  42.                 RET
  43.                 END
将JNB P1.0,FLASH语句放在延时子程序中的那三个地方都是可以达到效果的,放在主函数中则不行,自己也有些猜想,可是还是不知道具体该怎么正确的解释这种现象,求高手指教,非常感谢!
gx_huang 发表于 2013-12-22 18:26 | 显示全部楼层
放在主程序里,每个延时周期内,只能检测按键一次,反应比较慢。
放在延时程序里,检测时间间隔比较短,反应快。
你还不明白?
另外,作为程序通用性考虑,延时程序应该是一个带参数的标准函数。
500毫秒、200毫秒是独立的函数,难道其它地方需要300毫秒,你还编一个函数?
cjf512 发表于 2013-12-22 19:50 | 显示全部楼层
考虑一下放在不同的位置后,一个周期下来的执行次数 就可以明白。
另外初学者对历程可以多思考 做自己的修改,比如延时程序,做个带参数的100ms等等
刚学习模仿很重要,但是同时要学会思考!
个人意见!
 楼主| 花千骨 发表于 2013-12-26 21:06 | 显示全部楼层
嗯..因为后来自己弄懂了所以几天没来了,还是感谢两位的热心解答,谢谢,希望以后还能得到您的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部