⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.txt

📁 初始化键盘的源码
💻 TXT
字号:
首先感谢JASON WONG 兄在百忙中翻译W83977技术资料并找出其编程控制的办法,否则没有他开的这个头,后面的我根本无法进行
---------------------------------------------------------------------------
1.进入到扩展功能模式
  MOV DX,3F0H
  MOV AL,87H
  OUT DX,AL
  OUT DX,AL

2.配置逻辑设备5(KBC)
  ;读数据寄存器(0x60):CR60,CR61, CR60:CR61组合起来是一个16bit寄存器,下同
  ;读状态寄存器(0x64):CR62,CR63
  ;写数据寄存器(0x60):CR60,CR61
  ;写命令寄存器(0x64):CR62,CR63
  ;因为我们的数据是8bit的,所以对CR60,CR62不关心
  
  ; ---选择逻辑设备5(键盘控制器) ---
  MOV DX, 370H
  MOV AL,07H
  OUT DX,AL ; point to Logical Device Number Reg.
  MOV DX,3F1H
  MOV AL,05H
  OUT DX,AL ;select logical device 1
  ; --- 自测试 ---
  ;写入0XAA命令,然后等待回应0x55,如果等到,测试通过
-----------------------------------------------------------------------------
以上是本群组成员 Jason wong 兄写的关键部分,下面我对其余的部分做了补充和修改,并完成了芯片的烧写和上机测试
-----------------------------------------------------------------------------

OPENKEY:      ;控制8042打开键盘程序段
  IN AL,60H
  MOV AL,0AAH ;8042控制器复位命令0AAH
  OUT 64H,AL  ;写到8042命令端口
  IN AL,60H   ;读出并丢弃返回码,正规的BIOS是需要处理它的,这里略过
  MOV AL,60H  ;准备写入8042的控制工作方式
  OUT 64H,AL  ;写到8042命令端口
  IN AL,60H   ;同上
  MOV AL,47H  ;打开键盘鼠标的命令47H
  OUT 60H,AL  ;这次要把命令写到60H端口
  IN AL,60H   ;同上

RESETKEY:     ;复位键盘程序段
  MOV AL,0FFH ;键盘复位命令0FFH
  OUT 60H,AL  ;直接写到60H端口

OPENKEYLED:   ;打开键盘灯程序段
  IN AL,60H   ;同上
  MOV AL,0EDH ;开灯命令0EDH
  OUT 60H,AL  ;写到60H端口
  IN AL,60H   ;同上
  MOV AL,3    ;实验看能否点亮第1和第3个键盘灯
  OUT 60H,AL  ;再次写到60H端口
  IN AL,60    ;同上
  JMP OPENKEYLED ;重复执行打开键盘灯程序段的代码

--------------------------------------------------------------
以下是用DEBUG反汇编上面代码看到的情形
--------------------------------------------------------------
-u
137C:0100 BAF003        MOV     DX,03F0
137C:0103 B087          MOV     AL,87
137C:0105 EE            OUT     DX,AL
137C:0106 EE            OUT     DX,AL
137C:0107 BA7003        MOV     DX,0370
137C:010A B007          MOV     AL,07
137C:010C EE            OUT     DX,AL
137C:010D BAF103        MOV     DX,03F1
137C:0110 B005          MOV     AL,05
137C:0112 EE            OUT     DX,AL
137C:0113 E460          IN      AL,60
137C:0115 B0AA          MOV     AL,AA
137C:0117 E664          OUT     64,AL
137C:0119 E460          IN      AL,60
137C:011B B060          MOV     AL,60
137C:011D E664          OUT     64,AL
137C:011F E460          IN      AL,60
-u
137C:0121 B047          MOV     AL,47
137C:0123 E660          OUT     60,AL
137C:0125 E460          IN      AL,60
137C:0127 B0FF          MOV     AL,FF
137C:0129 E660          OUT     60,AL
137C:012B E460          IN      AL,60
137C:012D B0ED          MOV     AL,ED
137C:012F E660          OUT     60,AL
137C:0131 E460          IN      AL,60
137C:0133 B003          MOV     AL,03
137C:0135 E660          OUT     60,AL
137C:0137 E460          IN      AL,60
137C:0139 EBF0          JMP     012B

---------------------------------------------------------------------------------
对芯片的写入操作可以参照我写的BIOS并口实验的相关部分的要求去做!
将以上代码按要求写入芯片中,开机通电,我看到键盘的第1和第3个指示灯被成功点亮,这个实验终于可以告一段落了,而更艰巨的任务(内存初始化)还在后面呢!  

本报告目前只对群内公开,是否对外公开需讨论后决定!

 cxdzxc------2008-8-7

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -