登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请教PS/2问题.

作者:idcard 栏目:单片机
请教PS/2问题.
我参照以前的贴做了个键盘口的传输,可以接收到,但有时会出错,请教做过的前辈程序还有什么需要完善的吗?
程序如下,另CLOCK的频率没错,是15K左右,大概十来次会错一次的机率,找不到原因,有点烦啊.请指教,先谢了!

程序如下:
MOV R6, #0bH;
MOV 3AH,#5aH
MOV  R1,#30H
SENT:
         MOV A,@R1  ;待发数据-A
         NOP
         CLR P1.7           ;数据线置为低电平
         ACALL DELA10        ;延时10us
         NOP
         NOP
         CLR P1.4            ;时钟线置为低电平
         ACALL DELA30        ;延时30us
         NOP
         NOP
         SETB P1.4           ;时钟线置为高电平,发送起始位
         MOV B,#9            ;置循环次数
         MOV C,P             ;奇偶标志-C
         CPL C               ;偶校验
TC:     ACALL DELA10
         ACALL DELA10
         NOP
         NOP
         NOP
         NOP
         RRC A
         MOV P1.7,C          ;发一位数据
         ACALL DELA10
         NOP
         NOP
         CLR P1.4            ;产生一个时钟脉冲
         ACALL DELA30
         NOP
         NOP
         SETB P1.4
         NOP
         NOP
         DJNZ B,TC           ;未完继续
         NOP
         NOP
         ACALL DELA10
         ACALL DELA10
         NOP
         NOP
         NOP
         NOP
         SETB P1.7           ;停止位
         ACALL DELA10
         NOP
         NOP
         CLR P1.4
         ACALL DELA30
         NOP
         NOP
         SETB P1.4


SENT2:
          INC R1
          ACALL DELA50M
          DJNZ  R6, SENT
          AJMP  START


DELA10:  MOV R0,#02H     ;03
DELA11:  DJNZ R0,DELA11
          RET
DELA30:  MOV R0,#10h;11
DELA31:  DJNZ R0,DELA31
          RET
DELA50m:  MOV R7,#62h   ;11
DL0:  MOV R5,#0FFH
DL1:  DJNZ R5,DL1
       DJNZ R7,DL0
       RET

2楼: >>参与讨论
焊出个未来
idcard 老师,你的这个程序我试过了怎么不好使呢?
我是用你的程序发了2个数据15H,15H在表里查是Q,怎么用记事本一个也收不到呢?我的是51,晶振11.0592


ORG 00H
JMP START

DELA10:  MOV R0,#02H     ;03
DELA11:  DJNZ R0,DELA11
          RET
DELA30:  MOV R0,#10h;11
DELA31:  DJNZ R0,DELA31
          RET
DELA50m:  MOV R7,#62h   ;11
DL0:  MOV R5,#0FFH
DL1:  DJNZ R5,DL1
       DJNZ R7,DL0
       RET



START:

MOV R6, #02H;
MOV 3AH,#5aH
;--------------------数据
MOV 30H,#15H
MOV 31H,#15H
;
MOV  R1,#30H
SENT:
         MOV A,@R1  ;´ý·¢Êý¾Ý-A
         NOP
         CLR P3.5           ;Êý¾ÝÏßÖÃΪΜÍΜçƽ
         ACALL DELA10        ;ÑÓʱ10us
         NOP
         NOP
         CLR P3.4            ;ʱÖÓÏßÖÃΪΜÍΜçƽ
         ACALL DELA30        ;ÑÓʱ30us
         NOP
         NOP
         SETB P3.4           ;ʱÖÓÏßÖÃΪ¸ßΜçƽ,·¢ËÍÆðʼλ
         MOV B,#9            ;ÖÃÑ­»·´ÎÊý
         MOV C,P             ;Ææż±êÖ¾-C
         CPL C               ;żУÑé
TC:     ACALL DELA10
         ACALL DELA10
         NOP
         NOP
         NOP
         NOP
         RRC A
         MOV P3.5,C          ;·¢Ò»Î»Êý¾Ý
         ACALL DELA10
         NOP
         NOP
         CLR P3.4            ;²úÉúÒ»¸öʱÖÓÂö³å
         ACALL DELA30
         NOP
         NOP
         SETB P3.4
         NOP
         NOP
         DJNZ B,TC           ;δÍê¼ÌÐø
         NOP
         NOP
         ACALL DELA10
         ACALL DELA10
         NOP
         NOP
         NOP
         NOP
         SETB P3.5           ;ֹͣλ
         ACALL DELA10
         NOP
         NOP
         CLR P3.4
         ACALL DELA30
         NOP
         NOP
         SETB P3.4
SENT2:
          INC R1
          ACALL DELA50M
          DJNZ  R6, SENT
          AJMP  $
END



3楼: >>参与讨论
IDCARD
我发现问题了,是和键盘的不兼容。去掉键盘就没问题了。
另楼上的兄弟,程序没问题,我晶体是12M,你可换晶体,或是调一下NOP,叫CLK的高低电平为40U左右就行了,还有你P3.5口若没加上拉电阻加一10K上拉就行了。

4楼: >>参与讨论
winhiwang
如果与键盘并连,需要做个切换
 
5楼: >>参与讨论
sayasa
如何切换?能不能具体点
另鼠标晃动也会出错,CLK波形为0(1MS)-1(100US)-0(1MS)-1(100US)-0(1MS)-1(100US)-0(1MS)-1(100US),出错就是这原因引起的,怎么处理好呢?以为我是只上传,没做接收PC的处理,是不是要做处理?具体怎么做?

6楼: >>参与讨论
winhiwang
如果键盘鼠标都用PS2的要他们之间的冲突,主机会禁止另外一方的
 可以用多路开关做切换


7楼: >>参与讨论
shixiudong
你用74HC4066切换PS2的各种设备
可以用74HC4066多路开关切换。

注意:
最好采用74HC4066,不要用CD4066,因为前者的导通电阻更小。曾经用CD4066不成功。

案例:
我在1998年,用这种方法设计了一款POS专用可编程键盘,工作良好。



史修栋


8楼: >>参与讨论
焊出个未来
疑惑
根据PS2的协议,上电后键盘送AAH给主机,证明初始化成功。

发送数据应有通码和断码,比如发送一个Q到PC,首先是一个字节的通码,接着
是2个字节的断码。应发送数据15H,F0H,15H。

而我看现在市场上的产品没有发送AAH给HOST,并且发送数据时也只发送了两个字节,好象两个字节的数据还是一样的。
这是怎么回事呢?

9楼: >>参与讨论
sayasa
问题解决
正如史修栋兄所说,是用硬件切换的,程序没问题,我拆了别人的一台看了一下,且定做的连接线时钟和数据不是并在一起的,而是分别接在设备上,通过74HC4066切换.当设备传数据时断开,不传时键盘的时种和数据是和PC连在一起的.
        SENT:  MOV C,P1.4
         JNC SENT
         ACALL DELA30
         ACALL DELA10
         ACALL DELA10
         MOV C,P1.4
         JNC SENT
         MOV C,P1.7
  还有这段小程序加在发送前.
  谢谢各位兄台的支持,还有,建意以后在这问问题的朋友解决问题后在这发个贴说说怎么解决的,以免后来人发现同样的问题又要费时间.

新年大吉,早日发财,呵呵

* - 本贴最后修改时间:2005-2-18 8:39:57 修改者:sayasa

10楼: >>参与讨论
guoyahui
我用m8做了一款不用硬件切换的,
直接截获键盘和计算机数据再转发,再加入自己的应用

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问谁有Lattice isp下载线资料,纳闷中...
78E58的ISP功能是否能屏蔽掉?
关于单片机系统实现语音功能。
请教测量频率问题
请问有没有PNP型达林顿晶体管阵列管脚和uln2003相当
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号