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

📄 ps2_bin.src

📁 ps2的驱动
💻 SRC
📖 第 1 页 / 共 3 页
字号:
;         Delay(5);
			; SOURCE LINE # 186
	MOV  	R7,#05H
	LCALL	_Delay
;         
;         Order(COMMAND_SETSTATUS);//设置状态灯CapsLock,NumLock,ScrollLock
			; SOURCE LINE # 188
	MOV  	R7,#0EDH
	LCALL	_Order
;         ReadPS2();               //等待键盘应答
			; SOURCE LINE # 189
	LCALL	ReadPS2
;         LedStatus = DISALL;
			; SOURCE LINE # 190
	CLR  	A
	MOV  	LedStatus,A
;         Order(LedStatus);        //关闭所有灯
			; SOURCE LINE # 191
	MOV  	R7,LedStatus
	LCALL	_Order
;         ReadPS2();               //等待键盘应答
			; SOURCE LINE # 192
	LCALL	ReadPS2
;         /*
;         Order(COMMAND_READID);   //读键盘ID
;         ReadPS2();               //等待键盘应答
;         KeyIDLo = ReadPS2();     //获得键盘ID低字节
;         KeyIDHi = ReadPS2();     //获得键盘ID高字节
;         */
;         LedStatus = NUMLOCK_EN;  //开NumLock灯
			; SOURCE LINE # 199
	MOV  	LedStatus,#02H
;         Order(COMMAND_SETSTATUS);   
			; SOURCE LINE # 200
	MOV  	R7,#0EDH
	LCALL	_Order
;         ReadPS2();               //等待应答
			; SOURCE LINE # 201
	LCALL	ReadPS2
;         Order(LedStatus);        //
			; SOURCE LINE # 202
	MOV  	R7,LedStatus
	LCALL	_Order
;         ReadPS2();               //等待应答
			; SOURCE LINE # 203
	LCALL	ReadPS2
;         Order(COMMAND_SETRATE);  //设置速率延时
			; SOURCE LINE # 204
	MOV  	R7,#0F3H
	LCALL	_Order
;         ReadPS2();               //等待应答
			; SOURCE LINE # 205
	LCALL	ReadPS2
;         Order(0x20);             //500ms/30
			; SOURCE LINE # 206
	MOV  	R7,#020H
	LCALL	_Order
;         ReadPS2();
			; SOURCE LINE # 207
	LCALL	ReadPS2
;         Order(COMMAND_ENABLE);   //使能键盘
			; SOURCE LINE # 208
	MOV  	R7,#0F4H
	LCALL	_Order
;         ReadPS2();
			; SOURCE LINE # 209
	LCALL	ReadPS2
;         Order(COMMAND_SETRATE);  //设置速率延时
			; SOURCE LINE # 210
	MOV  	R7,#0F3H
	LCALL	_Order
;         ReadPS2();
			; SOURCE LINE # 211
	LCALL	ReadPS2
;         Order(0x20);             //
			; SOURCE LINE # 212
	MOV  	R7,#020H
	LCALL	_Order
;         ReadPS2();
			; SOURCE LINE # 213
	LCALL	ReadPS2
;         
;         Delay(200);              //延时
			; SOURCE LINE # 215
	MOV  	R7,#0C8H
	LCALL	_Delay
;         
;         EINT;                    //开总中断
			; SOURCE LINE # 217
	SETB 	EA
?C0012:
;      
; while(1)
			; SOURCE LINE # 219
; {
			; SOURCE LINE # 220
; //  KeyScan();//扫描键盘
;   if(KeyFlag == 1)
			; SOURCE LINE # 222
	JNB  	KeyFlag,?C0014
;   {
			; SOURCE LINE # 223
;    KeyFlag = 0;
			; SOURCE LINE # 224
	CLR  	KeyFlag
;    KeyTransmit();//
			; SOURCE LINE # 225
	LCALL	KeyTransmit
;   
;   }
			; SOURCE LINE # 227
?C0014:
; 
; KickDog();
			; SOURCE LINE # 229
	LCALL	KickDog
; 
; }
			; SOURCE LINE # 231
	SJMP 	?C0012
; END OF main

CSEG	AT	00023H
	LJMP	uart

; }
; 
; /*********************************************************/
; //函数:uart
; //功能:串口中断
; //输入:无
; //输出:无
; //描述:
; /*********************************************************/
; void uart() interrupt 4 using 2

	RSEG  ?PR?uart?PS2_BIN
	USING	2
uart:
	PUSH 	ACC
	PUSH 	PSW
			; SOURCE LINE # 241
; {
; ES=0;
			; SOURCE LINE # 243
	CLR  	ES
; TH1=0xfa; //装入初值,22.1184MHZ 的晶振,9600 的波特率
			; SOURCE LINE # 244
	MOV  	TH1,#0FAH
; TL1=0xfa;
			; SOURCE LINE # 245
	MOV  	TL1,#0FAH
; 
; if(RI == 1)       //接收中断
			; SOURCE LINE # 247
	JNB  	RI,?C0016
; {
			; SOURCE LINE # 248
;   RI= 0;
			; SOURCE LINE # 249
	CLR  	RI
; 
; }
			; SOURCE LINE # 251
	SJMP 	?C0017
?C0016:
; else if(TI == 1)  //发送中断
			; SOURCE LINE # 252
	JNB  	TI,?C0017
; {
			; SOURCE LINE # 253
;   if(KeyCodeSum >1)
			; SOURCE LINE # 254
	MOV  	A,KeyCodeSum
	SETB 	C
	SUBB 	A,#01H
	JNC  	?C0020
;   {
			; SOURCE LINE # 255
;  //  SBUF = KeyCodeBuff[--KeyCodeSum];  
; //   SBUF = 0x00;
;   }
			; SOURCE LINE # 258
?C0019:
;                 else
;                 {
			; SOURCE LINE # 260
;                         KeyCodeSum = 0;                        
			; SOURCE LINE # 261
	MOV  	KeyCodeSum,#00H
;                 }
			; SOURCE LINE # 262
?C0020:
;   TI = 0;
			; SOURCE LINE # 263
	CLR  	TI
; }
			; SOURCE LINE # 264
?C0017:
; ES=1;
			; SOURCE LINE # 265
	SETB 	ES
; }
			; SOURCE LINE # 266
	POP  	PSW
	POP  	ACC
	RETI 	
; END OF uart

; 
; unsigned char findcode(unsigned char dat,unsigned char sort)

	RSEG  ?PR?_findcode?PS2_BIN
_findcode:
	USING	0
			; SOURCE LINE # 268
;---- Variable 'dat?240' assigned to Register 'R7' ----
;---- Variable 'sort?241' assigned to Register 'R5' ----
; {
			; SOURCE LINE # 269
; 	unsigned char conter=0x00;
			; SOURCE LINE # 270
;---- Variable 'conter?242' assigned to Register 'R6' ----
; 	switch (sort)
			; SOURCE LINE # 271
	MOV  	A,R5
	ADD  	A,#01FH
	JZ   	?C0029
	INC  	A
	JNZ  	?C0034
; 	{
			; SOURCE LINE # 272
; 	case 0xE0:
			; SOURCE LINE # 273
?C0023:
; 	{
			; SOURCE LINE # 274
; 	for(conter=0x00;conter<22;conter++)
			; SOURCE LINE # 275
	CLR  	A
	MOV  	R6,A
?C0024:
; 	{
			; SOURCE LINE # 276
; 	if(dat==e0_keyval[conter])return conter; 
			; SOURCE LINE # 277
	MOV  	A,R6
	MOV  	DPTR,#e0_keyval
	MOVC 	A,@A+DPTR
	CJNE 	A,AR7,?C0026
	MOV  	R7,AR6
	RET  	
; 	}
			; SOURCE LINE # 278
?C0026:
	INC  	R6
	CJNE 	R6,#016H,?C0024
?C0025:
;     return nodefinedkey;
			; SOURCE LINE # 279
	MOV  	R7,#00H
	RET  	
; 	//break;
; 	}
			; SOURCE LINE # 281
; 	case 0xE1:
			; SOURCE LINE # 282
?C0029:
; 	{
			; SOURCE LINE # 283
; 	for(conter=0x00;conter<2;conter++)
			; SOURCE LINE # 284
	CLR  	A
	MOV  	R6,A
?C0030:
; 	{
			; SOURCE LINE # 285
; 	if(dat==pausekey[conter])return conter; 
			; SOURCE LINE # 286
	MOV  	A,R6
	MOV  	DPTR,#pausekey
	MOVC 	A,@A+DPTR
	CJNE 	A,AR7,?C0032
	MOV  	R7,AR6
	RET  	
; 	}
			; SOURCE LINE # 287
?C0032:
	INC  	R6
	CJNE 	R6,#02H,?C0030
?C0031:
;     return nodefinedkey;
			; SOURCE LINE # 288
	MOV  	R7,#00H
	RET  	
; 	//break;
; 
; 	}
			; SOURCE LINE # 291
; 	default:
			; SOURCE LINE # 292
?C0034:
; 	for(conter=0x00;conter<86;conter++)
			; SOURCE LINE # 293
	CLR  	A
	MOV  	R6,A
?C0035:
; 	{
			; SOURCE LINE # 294
; 	if(dat==keyval[conter])return conter; 
			; SOURCE LINE # 295
	MOV  	A,R6
	MOV  	DPTR,#keyval
	MOVC 	A,@A+DPTR
	CJNE 	A,AR7,?C0037
	MOV  	R7,AR6
	RET  	
; 	}
			; SOURCE LINE # 296
?C0037:
	INC  	R6
	CJNE 	R6,#056H,?C0035
?C0036:
;     return nodefinedkey;	
			; SOURCE LINE # 297
	MOV  	R7,#00H
; 	//break;
; 	}
			; SOURCE LINE # 299
; 
; }
			; SOURCE LINE # 301
?C0028:
	RET  	
; END OF _findcode

; /*********************************************************/
; //函数:KeyTransmit()
; //功能:串口中断
; //输入:
; //输出:
; //描述:
; /*********************************************************/
; void KeyTransmit(void)

	RSEG  ?PR?KeyTransmit?PS2_BIN
KeyTransmit:
	USING	0
			; SOURCE LINE # 309
; {      
			; SOURCE LINE # 310
; 		EA=0;
			; SOURCE LINE # 311
	CLR  	EA
;         
;      	if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x01]==0x12)&(KeyCodeBuff[0x02]!=0x00))
			; SOURCE LINE # 313
	MOV  	A,KeyCodeBuff+01H
	CJNE 	A,#012H,?C0040
	MOV  	R7,#01H
	SJMP 	?C0041
?C0040:
	MOV  	R7,#00H
?C0041:
	MOV  	A,KeyCodeBuff
	CJNE 	A,#0E0H,?C0042
	MOV  	R6,#01H
	SJMP 	?C0043
?C0042:
	MOV  	R6,#00H
?C0043:
	MOV  	A,R6
	ANL  	A,R7
	MOV  	R7,A
	MOV  	A,KeyCodeBuff+02H
	JZ   	?C0044
	MOV  	R6,#01H
	SJMP 	?C0045
?C0044:
	MOV  	R6,#00H
?C0045:
	MOV  	A,R6
	ANL  	A,R7
	JZ   	?C0039
; 		{
			; SOURCE LINE # 314
; 		OUTPORT=findcode(KeyCodeBuff[0x02],0xE0)+80;//是扩展建?
			; SOURCE LINE # 315
	MOV  	R5,#0E0H
	MOV  	R7,KeyCodeBuff+02H
	LCALL	_findcode
	MOV  	A,R7
	ADD  	A,#050H
	MOV  	P2,A
; 		}
			; SOURCE LINE # 316
	SJMP 	?C0046
?C0039:
; 		else if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x02]==0x00))
			; SOURCE LINE # 317
	MOV  	A,KeyCodeBuff+02H
	JNZ  	?C0048
	MOV  	R7,#01H
	SJMP 	?C0049
?C0048:
	MOV  	R7,#00H
?C0049:
	MOV  	A,KeyCodeBuff
	CJNE 	A,#0E0H,?C0050
	MOV  	R6,#01H
	SJMP 	?C0051
?C0050:
	MOV  	R6,#00H
?C0051:
	MOV  	A,R6
	ANL  	A,R7
	JZ   	?C0046
; 		{
			; SOURCE LINE # 318
; 		OUTPORT=findcode(KeyCodeBuff[0x01],0xE0)+58;//是普通扩展键?
			; SOURCE LINE # 319
	MOV  	R5,#0E0H
	MOV  	R7,KeyCodeBuff+01H
	LCALL	_findcode
	MOV  	A,R7
	ADD  	A,#03AH
	MOV  	P2,A
; 		}
			; SOURCE LINE # 320
?C0046:
; 		if(KeyCodeBuff[0x00]==0xE1)OUTPORT=200; //pause的键显示200
			; SOURCE LINE # 321
	MOV  	A,KeyCodeBuff
	CJNE 	A,#0E1H,?C0052
	MOV  	P2,#0C8H
	SJMP 	?C0053
?C0052:
; 		else
; 		{
			; SOURCE LINE # 323
; 		if((KeyCodeBuff[0x00]!=0xE0)&(KeyCodeBuff[0x00]!=0x00))
			; SOURCE LINE # 324
	MOV  	A,KeyCodeBuff
	JZ   	?C0055
	MOV  	R7,#01H
	SJMP 	?C0056
?C0055:
	MOV  	R7,#00H
?C0056:
	MOV  	A,KeyCodeBuff
	XRL  	A,#0E0H
	JZ   	?C0057
	MOV  	R6,#01H
	SJMP 	?C0058
?C0057:
	MOV  	R6,#00H
?C0058:
	MOV  	A,R6
	ANL  	A,R7
	JZ   	?C0053
;  	    {
			; SOURCE LINE # 325
; 		OUTPORT=findcode(KeyCodeBuff[0x00],0x12);//是普通键吗?
			; SOURCE LINE # 326
	MOV  	R5,#012H
	MOV  	R7,KeyCodeBuff
	LCALL	_findcode
	MOV  	P2,R7
; 		}
			; SOURCE LINE # 327
; 		}
			; SOURCE LINE # 328
?C0053:
; 		//KeyCodeSum -= 0x01;  
; 		SBUF = KeyCodeBuff[0x00];//发送键值
			; SOURCE LINE # 330
	MOV  	SBUF,KeyCodeBuff
; 	//	KeyCodeSum += 0x01;
;         //KeyCodeSum = 0;                   //
; //		KeyExtendFlag = 0;
; EA=1;
			; SOURCE LINE # 334
	SETB 	EA
; }
			; SOURCE LINE # 335
	RET  	
; END OF KeyTransmit

CSEG	AT	0000BH
	LJMP	timer0

; /*********************************************************/
; //函数:timer0()
; //功能:定时器0中断
; //输入:
; //输出:
; //描述:
; /*********************************************************/
; void timer0(void) interrupt 1 using 3

	RSEG  ?PR?timer0?PS2_BIN
	USING	3
timer0:
	PUSH 	ACC
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	USING	3
	MOV  	PSW,#018H
			; SOURCE LINE # 343
; {
; unsigned char compare=0x00;
			; SOURCE LINE # 345
;---- Variable 'compare?443' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
; switch(dat[0x00])
			; SOURCE LINE # 346
	MOV  	A,dat
	ADD  	A,#020H
	JNZ  	?C0066
; 
; case 0xe0:  //是扩展键吗?
			; SOURCE LINE # 348
?C0061:
; 		for(compare=0x00;compare<100;compare++)
			; SOURCE LINE # 349
	MOV  	R7,#00H
?C0062:
; 		{
			; SOURCE LINE # 350
; 		if(dat[0x01]==e0_keyval[compare])break;
			; SOURCE LINE # 351
	MOV  	A,R7
	MOV  	DPTR,#e0_keyval
	MOVC 	A,@A+DPTR
	XRL  	A,dat+01H
	JZ   	?C0066
; 		}
			; SOURCE LINE # 352
?C0064:
	INC  	R7
	CJNE 	R7,#064H,?C0062
; }
			; SOURCE LINE # 353
?C0066:
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	ACC
	RETI 	
; END OF timer0

CSEG	AT	00003H
	LJMP	ex0

; /*********************************************************/
; //函数:ex0()
; //功能:外部中断0服务程序
; //输入:
; //输出:
; //描述:
; /*********************************************************/
; void ex0() interrupt 0 using 3

	RSEG  ?PR?ex0?PS2_BIN
	USING	3
ex0:
	PUSH 	ACC
	PUSH 	PSW
	USING	3
	MOV  	PSW,#018H
			; SOURCE LINE # 361
; {        //时钟线变低
;          unsigned char bitCount;
;          unsigned char KeyCode = 0;
			; SOURCE LINE # 364
;---- Variable 'KeyCode?545' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
;          if(KeyCodeSum < MAXBUFFER) KeyCodeBuff[KeyCodeSum] = 0;
			; SOURCE LINE # 365
	MOV  	A,KeyCodeSum
	CLR  	C
	SUBB 	A,#0FH
	JNC  	?C0067
	MOV  	A,#LOW (KeyCodeBuff)
	ADD  	A,KeyCodeSum
	MOV  	R0,A
	MOV  	@R0,#00H
?C0067:
;         for(bitCount = 8; bitCount != 0; bitCount --)   // 把起始位算入
			; SOURCE LINE # 366
;---- Variable 'bitCount?544' assigned to Register 'R6' ----
	MOV  	R6,#08H
?C0068:
;    {
			; SOURCE LINE # 367
?C0071:
;     WAITFORKEYBOARDPULSE;     // 等待一个有效的下跳沿
			; SOURCE LINE # 368
	JNB  	scl,?C0071
?C0073:
	JB   	scl,?C0073
?C0074:
;     KeyCode  >>= 1;      // 按照PS2格式,数据低位在前
			; SOURCE LINE # 369
	MOV  	A,R7
	CLR  	C
	RRC  	A
	MOV  	R7,A
;     scl  = 1;
			; SOURCE LINE # 370
	SETB 	scl
;     sda  = 1;
			; SOURCE LINE # 371
	SETB 	sda
;     if(sda == 1)
			; SOURCE LINE # 372
	JNB  	sda,?C0070
;   {
			; SOURCE LINE # 373
;       KeyCode |= 0x80; // 得到有效的数据位
			; SOURCE LINE # 374
	ORL  	AR7,#080H
;      }
			; SOURCE LINE # 375
;    }
			; SOURCE LINE # 376
?C0070:
	DJNZ 	R6,?C0068
?C0076:
;    WAITFORKEYBOARDPULSE;     // 等待按键发送效验位
			; SOURCE LINE # 377
	JNB  	scl,?C0076
?C0078:
	JB   	scl,?C0078
?C0080:
;    WAITFORKEYBOARDPULSE;     // 等待按键发送终止位
			; SOURCE LINE # 378
	JNB  	scl,?C0080
?C0082:
	JB   	scl,?C0082
?C0084:
;    while(!scl);         // 等待键盘把时钟线拉高
			; SOURCE LINE # 379
	JNB  	scl,?C0084
?C0085:
;         switch(KeyCode)
			; SOURCE LINE # 380
	MOV  	A,R7
	ADD  	A,#020H
	JZ   	?C0092
	DEC  	A
	JZ   	?C0094

⌨️ 快捷键说明

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