|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请教PS/2问题. |
作者:idcard 栏目:单片机 |
我参照以前的贴做了个键盘口的传输,可以接收到,但有时会出错,请教做过的前辈程序还有什么需要完善的吗? 程序如下,另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楼: | >>参与讨论 |
作者: 焊出个未来 于 2005/1/27 23:33:00 发布:
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 于 2005/1/28 9:32:00 发布:
我发现问题了,是和键盘的不兼容。去掉键盘就没问题了。 另楼上的兄弟,程序没问题,我晶体是12M,你可换晶体,或是调一下NOP,叫CLK的高低电平为40U左右就行了,还有你P3.5口若没加上拉电阻加一10K上拉就行了。 |
4楼: | >>参与讨论 |
作者: winhiwang 于 2005/1/28 10:44:00 发布:
如果与键盘并连,需要做个切换 |
5楼: | >>参与讨论 |
作者: sayasa 于 2005/1/28 11:27:00 发布:
如何切换?能不能具体点 另鼠标晃动也会出错,CLK波形为0(1MS)-1(100US)-0(1MS)-1(100US)-0(1MS)-1(100US)-0(1MS)-1(100US),出错就是这原因引起的,怎么处理好呢?以为我是只上传,没做接收PC的处理,是不是要做处理?具体怎么做? |
6楼: | >>参与讨论 |
作者: winhiwang 于 2005/1/28 11:34:00 发布:
如果键盘鼠标都用PS2的要他们之间的冲突,主机会禁止另外一方的 可以用多路开关做切换 |
7楼: | >>参与讨论 |
作者: shixiudong 于 2005/1/28 11:43:00 发布:
你用74HC4066切换PS2的各种设备 可以用74HC4066多路开关切换。 注意: 最好采用74HC4066,不要用CD4066,因为前者的导通电阻更小。曾经用CD4066不成功。 案例: 我在1998年,用这种方法设计了一款POS专用可编程键盘,工作良好。 史修栋 |
8楼: | >>参与讨论 |
作者: 焊出个未来 于 2005/1/28 20:00:00 发布:
疑惑 根据PS2的协议,上电后键盘送AAH给主机,证明初始化成功。 发送数据应有通码和断码,比如发送一个Q到PC,首先是一个字节的通码,接着 是2个字节的断码。应发送数据15H,F0H,15H。 而我看现在市场上的产品没有发送AAH给HOST,并且发送数据时也只发送了两个字节,好象两个字节的数据还是一样的。 这是怎么回事呢? |
9楼: | >>参与讨论 |
作者: sayasa 于 2005/2/18 8:31:00 发布:
问题解决 正如史修栋兄所说,是用硬件切换的,程序没问题,我拆了别人的一台看了一下,且定做的连接线时钟和数据不是并在一起的,而是分别接在设备上,通过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 于 2005/2/18 8:43:00 发布:
我用m8做了一款不用硬件切换的, 直接截获键盘和计算机数据再转发,再加入自己的应用 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |