最近在用汇编编写独立按键的程序时,输出总是不稳定

2020-01-21 21:35发布

本帖最后由 thy110 于 2014-12-13 11:00 编辑

最近在用汇编编写独立按键的程序时,输出总是不稳定,用于测试的led灯总是闪烁,怎么回事啊,之前用c写的就很正常,按照原来的思路一步一步写下来就不正常了,大家帮忙看看。

  1. ORG 0000H
  2. LJMP START
  3. ORG 0200H
  4. START:MOV P1,#0FFH
  5. LOOP: LCALL DELAY_10MS
  6.       MOV A,P1
  7.       MOV R1,A
  8.       CPL A
  9.           ANL A,#0FFH
  10.           JZ  LOOP
  11.           LCALL DELAY_10MS
  12.       MOV A,P1
  13.       MOV R1,A
  14.           CPL A
  15.           ANL A,#0FFH
  16.           JZ LOOP
  17.           ACALL SKEY
  18.           SJMP LOOP
  19. SKEY: MOV A,R1     
  20.       JNB ACC.0,KEY1
  21.           JNB ACC.1,KEY2
  22.           JNB ACC.2,KEY3
  23.           JNB ACC.3,KEY4
  24.           JNB ACC.4,KEY5
  25.           JNB ACC.5,KEY6
  26.           JNB ACC.6,KEY7
  27.           JNB ACC.7,KEY8
  28.           RET
  29. KEY1: CPL P0.4
  30.       RET
  31. KEY2: CPL P0.4
  32.       RET
  33. KEY3: CPL P0.4
  34.       RET
  35. KEY4: CPL P0.4
  36.       RET
  37. KEY5: CPL P0.4
  38.       RET
  39. KEY6: CPL P0.4
  40.       RET
  41. KEY7: CPL P0.4
  42.       RET
  43. KEY8: CPL P0.4
  44.       RET                
  45. DELAY_10MS:MOV R7,#10H
  46. TS1:       MOV R6,#0FFH
  47. TS2:       DJNZ R6,TS2
  48.            DJNZ R7,TS1
  49.                    RET
  50.                    END      
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
lgg88
1楼-- · 2020-01-23 02:20
好奇  楼主为什么要回到原始社会  ,仅仅是为了  学习汇编吗?
thy110
2楼-- · 2020-01-23 07:33
lgg88 发表于 2014-12-13 10:46
好奇  楼主为什么要回到原始社会  ,仅仅是为了  学习汇编吗?

是的,课程要学,学完后感觉挺不错的
thy110
3楼-- · 2020-01-23 12:47
 精彩回答 2  元偷偷看……
thy110
4楼-- · 2020-01-23 15:50
loveskangaroo 发表于 2014-12-13 09:53
mov P1 A 寄存器A的值送到P1写错了吧

这是之前的一个代码,完了检查了,实际是mov a,p1
thy110
5楼-- · 2020-01-23 19:14
本帖最后由 thy110 于 2014-12-13 11:24 编辑
limuzi2012 发表于 2014-12-13 08:32
用的是CPL P0.4指令啊?这样子按键按的时间不确定的话结果当然也不确定了。应该松开按键判断,长按就不进入 ...


是延时一段时间在判断是否是高定平吗


ORG 0000H
LJMP START
ORG 0200H
START:MOV P1,#0FFH
LOOP: LCALL DELAY_10MS
      MOV A,P1
      MOV R1,A
      CPL A
          ANL A,#0FFH
          JZ  LOOP
          LCALL DELAY_10MS
      MOV A,P1
      MOV R1,A
          CPL A
          ANL A,#0FFH
          JZ LOOP
skey1:           LCALL DELAY_10MS
          MOV A,P1
          CPL A
          ANL A,#0FFH
           JNZ skey1

          ACALL SKEY
          SJMP LOOP
SKEY: MOV A,R1     
      
limuzi2012
6楼-- · 2020-01-23 21:57
thy110 发表于 2014-12-13 11:02
是延时一段时间在判断是否是高定平吗

你都没明白怎么检测按键的。在这里你检测到按键后的处理,比如你检测到某个按键就存这个按键标号,下次如果一样就退出,就解决了长按键的问题,就是要锁存按键值,没按键就清零按键标号。还有你这里是处理位的,如果两个按键一起按呢?三个呢?结果也是不一样。找个对的结构研究吧,都用汇编了还用c的死循环?

一周热门 更多>