导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→我这儿有一小段汇编程序,请大家帮我看看[石月]

 *第15910篇: 我这儿有一小段汇编程序,请大家帮我看看

  
楼 主:石月 2003年8月31日09:27
 我这儿有一小段汇编程序,请大家帮我看看
(这是8279键盘和显示的编码程序,单片机用的是89C51。/INT0中断输入。CS接P2.7,A0接P2.0。现在我在调试时可以判断中断,且键值也正确写入片内ROM,却没有显示,是怎么回事啊???)
        ORG 0000H
        AJMP START
        ORG 0003H
        SJMP PKEYI
        ORG 0030H
START:  MOV TCON,#0CH
        LCALL INI79
        SJMP $

;8279初始化程序
        ORG 0060H
INI79:  MOV DPTR,#7FFFH ;清除8279命令
        MOV A,#0DDH
        MOVX @DPTR,A
WNDU:   MOVX A,@DPTR    ;等待8279清除结束
        JB ACC.7,WNDU
        MOV A,#10H      ;设置键盘扫描方式为双键互锁
        MOVX @DPTR,A
        MOV A,#34H      ;时钟100KHz
        MOVX @DPTR,A
        MOV IE,#81H     ;允许8279中断
        RET
 ;;键输入中断服务程序
PKEYI:  CLR EA
        PUSH PSW
        PUSH DPL
        PUSH DPH
        PUSH ACC
        PUSH B
        SETB PSW.3       ;选工作寄存器区1
        MOV DPTR,#7FFFH  ;读FIFO状态字
        MOVX A,@DPTR
        ANL A,#0FH
        JZ PKYR          ;判FIFO中是否有数据
        MOV A,#40H       ;读FIFO命令—〉8279
        MOVX @DPTR,A
        MOV DPTR,#7EFFH
        MOVX A,@DPTR     ;读数据
        MOV 50H,#0
        MOV R2,A
DATA0: CJNE R2,#38H,DATA1;判断键代码,确定键值
 MOV R0,#0
                AJMP RDIR
                AJMP PKYR
DATA1:  CJNE R2,#30H,DATA2
 MOV R0,#1
                AJMP RDIR
                AJMP PKYR
DATA2: CJNE R2,#28H,DATA3
 MOV R0,#2
                AJMP RDIR
                AJMP PKYR
DATA3: CJNE R2,#20H,DATA4
 MOV R0,#3
                AJMP RDIR
               AJMP PKYR
DATA4: CJNE R2,#18H,DATA5
 MOV R0,#4
                AJMP RDIR
                AJMP PKYR
DATA5: CJNE R2,#10H,DATA6
 MOV R0,#5
                AJMP RDIR
                AJMP PKYR
DATA6: CJNE R2,#08H,DATA7
 MOV R0,#6
                AJMP RDIR
                AJMP PKYR
DATA7: CJNE R2,#00H,DATA8
 MOV R0,#7
                AJMP RDIR
                AJMP PKYR
DATA8: CJNE R2,#39H,DATA9
 MOV R0,#8
                AJMP RDIR
                AJMP PKYR
DATA9: CJNE R2,#31H,RDIR1
 MOV R0,#9
                AJMP RDIR
PKYR:   POP B
        POP ACC
        POP DPH
        POP DPL
        POP PSW
        RETI
RDIR1:  MOV DPTR,#7FFFH
        MOV A,#90H     ;写显示RAM命令
        MOVX @DPTR,A
        MOV DPTR,#7EFFH
        MOV A,#79H     ;显示E,表示出错
        MOVX @DPTR,A
        SETB EA
        LJMP PKYR
;;显示器更新程序
RDIR:   MOV DPTR,#7FFFH ;写显示RAM命令—〉8279
        MOV A,#90H
        MOVX @DPTR,A
        MOV A,#16H      ;设显示工作方式为右入8位显示
        MOVX @DPTR,A
        MOV A,#0DFH     ;清除命令,使IRQ复位
        MOVX @DPTR,A
        MOV DPTR,#7EFFH
        MOV 50H,R0
        MOV R0,#50H
RDLO:   MOV A,@R0       ;取显示数据
        ADD A,#6
        MOVC A,@A+PC   ;查表转换为段码数据—〉8279
        MOVX @DPTR,A
        SETB EA
        LJMP PKYR
SEG:    DB 04H,9FH,42H,03H,91H,21H,20H,8FH,00H,01H;;根据硬件线路设计的字形数据

  
2楼:石月 2003年8月31日10:50
 请赐教啦!!!
请赐教啦!!!
  
3楼:guantingwei 2003年8月31日19:46
 用Keil单步调试一下啊,想知道结果就不要怕麻烦。
其实你应该养成软件调试的习惯,别人也不知道你要干什么,也没时间研究这些程序啊,自己多一些耐心,认真调试一下,如软件没问题再看硬件啊!
  
4楼:石月 2003年9月1日09:27
 谢谢,我已经按单步调了,发现以下问题,求教
谢谢,其实我就是用单步调的,调后我发现键的确定和键值输入都正确的,而且显示的值也查表读取正确了,但显示的时候却出问题了。他有时候不显示,显示出来时显示位却是不定的,是不是8279芯片有问题?而且无论我定义左入显示还是右入显示他都是从左边开始的,为什么?还有中断跳入也有问题,有时有,有时没……
  
5楼:guantingwei 2003年9月1日11:14
 其实就算从左显示也能实现从又显示阿,我也遇到过这种问题。
以下是引用石月在2003-9-1 9:27:11的发言:
谢谢,我已经按单步调了,发现以下问题,求教谢谢,其实我就是用单步调的,调后我发现键的确定和键值输入都正确的,而且显示的值也查表读取正确了,但显示的时候却出问题了。他有时候不显示,显示出来时显示位却是不定的,是不是8279芯片有问题?而且无论我定义左入显示还是右入显示他都是从左边开始的,为什么?还有中断跳入也有问题,有时有,有时没……

  
6楼:石月 2003年9月1日11:27
 可是设置后还是不起作用阿
可是设置后还是不起作用阿
  
7楼:guantingwei 2003年9月1日11:29
 你可以用先显示高位后显示低位的办法啊
以下是引用石月在2003-9-1 11:27:35的发言:
可是设置后还是不起作用阿

  
8楼:石月 2003年9月1日14:53
 好吧,这个问题就这样解决。谢谢!可是中断
好吧,这个问题就这样解决。谢谢!可是中断还是不正常,中断返回时经常跑飞了,无法等待下一个中断,怎么回事呢?!
  
9楼:singleclare 2003年9月2日21:02
 有些开发系统工作长时间也会出现这种问题,
有些开发系统工作长时间也会出现这种问题,可以关闭开发系统系统电源,过一会在开机试一试吧.
  
10楼:singleclare 2003年9月2日20:58
 是不是开发系统的问题?
是不是开发系统的问题?
  
11楼:石月 2003年9月3日08:51
 谢谢,我试试
谢谢,我试试
  
12楼:guantingwei 2003年9月1日22:05
 你看中断信号正常么?电平范围正确么?
  
13楼:石月 2003年9月2日09:08
 不知道你有没有用过8279,我检查过第一
不知道你有没有用过8279,我检查过第一次键按下后有中断信号产生,是高电平4.5V左右,FIFORAM被读取后它自动复位到低电平0.3V左右,那8279还有一个清除命令,清除FIFO RAM内容,使IRQ信号复位,这句命令还需要吗?其实我也加过这条命令,可是不管我有没加,中断返回后再按键都无效,IRQ口始终是低电平,为什么啊……
  
14楼:simonsun 2003年9月2日14:47
 8279 应用[推荐]
你刚才说的问题我曾经也遇到过,键盘中断一时好一时坏,记得当时我解决的方法是,
在每次键盘中断反回前,都将其重新初始化.保证没问题.
  
15楼:石月 2003年9月3日10:21
 谢谢,我按你的方法重新初始化后中断果然没
谢谢,我按你的方法重新初始化后中断果然没问题了,可是显示又不正常了,我设置的是左入显示,可是现在每按下一个键都是在左边第一个LED显示出来,怎么回事?先说一下
我硬件显示电路是没问题的。我另外写了个显示小程序,左入右入显示都没问题
  
16楼:guantingwei 2003年9月1日11:28
 ni
以下是引用石月在2003-9-1 11:27:35的发言:
可是设置后还是不起作用阿

  
17楼:northerntree 2003年8月31日22:20
 我在程序开头写下这么一句:
  sbi

我在程序开头写下这么一句:
  sbit P10=P1^0;
编译的时候竟然出现syntax error near'sbit'
不知道是什么原因。
  
18楼:guest 2003年9月1日09:13
 是不是堆栈指针的问题?
单片机上电复位后SP=07,并且为增址方式存放数据,而你的程序中更换了寄存器组,却没有初始化SP,这样会不会出错了,希望你检查一下
  
19楼:石月 2003年9月1日09:31
 谢谢,中断返回的时候老是跑飞了是不是也是这个原因?
  
20楼:guest 2003年9月1日11:53
 很简单的问题!不过最近手上项目比较多,否
很简单的问题!不过最近手上项目比较多,否则帮你搞定,因为此芯片我也用过,不过现在不用了!
e-mail:lickson@163.com
        akmcu@163.com

>>>>>>对该主题发表你的看法

本主题贴数29,分页: [第1页] [第2页]


[上一篇主题]:小弟,有事求教:超声波传感器T40-16如何使用?望赐教!

[下一篇主题]:请问建五和摩托罗拉的车载对讲机能不能匹配?