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

📄 main.lss

📁 详细讲解PS/2键盘通信接口及协议
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 }

void KB_Write(uint8_t command)
{
 1de:	1f 93       	push	r17
 1e0:	cf 93       	push	r28
 1e2:	c8 2f       	mov	r28, r24
uint8_t cnt;
uint8_t chk=0; //效验位  
 1e4:	10 e0       	ldi	r17, 0x00	; 0

KBDDR=0x0f;
 1e6:	8f e0       	ldi	r24, 0x0F	; 15
 1e8:	81 bb       	out	0x11, r24	; 17
ccbi(KB_Clk);
 1ea:	82 e0       	ldi	r24, 0x02	; 2
 1ec:	0e 94 e4 00 	call	0x1c8 <ccbi>
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 1f0:	81 2f       	mov	r24, r17
 1f2:	8a 95       	dec	r24
 1f4:	f1 f7       	brne	.-4      	; 0x1f2 <KB_Write+0x14>
_delay_us(100);       //延迟100us
ccbi(KB_Data);
 1f6:	81 2f       	mov	r24, r17
 1f8:	0e 94 e4 00 	call	0x1c8 <ccbi>
ssbi(KB_Clk);
 1fc:	82 e0       	ldi	r24, 0x02	; 2
 1fe:	0e 94 d9 00 	call	0x1b2 <ssbi>
KBDDR=0x01 ;          //DATA输出 clk输入                                      ////////
 202:	81 e0       	ldi	r24, 0x01	; 1
 204:	81 bb       	out	0x11, r24	; 17
 206:	97 e0       	ldi	r25, 0x07	; 7

for(cnt=0;cnt<8;cnt++)
{ 
 loop_until_bit_is_clear(KBPIN,KB_Clk);
 208:	82 99       	sbic	0x10, 2	; 16
 20a:	fe cf       	rjmp	.-4      	; 0x208 <KB_Write+0x2a>
 KBPort=((command&0x01)|0x04);
 20c:	8c 2f       	mov	r24, r28
 20e:	81 70       	andi	r24, 0x01	; 1
 210:	84 60       	ori	r24, 0x04	; 4
 212:	82 bb       	out	0x12, r24	; 18
 if(KBPort&0x01) chk++;
 214:	90 99       	sbic	0x12, 0	; 18
 216:	1f 5f       	subi	r17, 0xFF	; 255
 command>>=1;
 218:	c6 95       	lsr	r28
 21a:	91 50       	subi	r25, 0x01	; 1
 21c:	97 ff       	sbrs	r25, 7
 21e:	f4 cf       	rjmp	.-24     	; 0x208 <KB_Write+0x2a>
 }
 loop_until_bit_is_clear(KBPIN,KB_Clk);
 220:	82 99       	sbic	0x10, 2	; 16
 222:	fe cf       	rjmp	.-4      	; 0x220 <KB_Write+0x42>
 switch(chk)
 224:	81 2f       	mov	r24, r17
 226:	99 27       	eor	r25, r25
 228:	84 30       	cpi	r24, 0x04	; 4
 22a:	91 05       	cpc	r25, r1
 22c:	e9 f0       	breq	.+58     	; 0x268 <KB_Write+0x8a>
 22e:	85 30       	cpi	r24, 0x05	; 5
 230:	91 05       	cpc	r25, r1
 232:	7c f4       	brge	.+30     	; 0x252 <KB_Write+0x74>
 234:	81 30       	cpi	r24, 0x01	; 1
 236:	91 05       	cpc	r25, r1
 238:	c9 f0       	breq	.+50     	; 0x26c <KB_Write+0x8e>
 23a:	82 30       	cpi	r24, 0x02	; 2
 23c:	91 05       	cpc	r25, r1
 23e:	1c f4       	brge	.+6      	; 0x246 <KB_Write+0x68>
 240:	89 2b       	or	r24, r25
 242:	91 f0       	breq	.+36     	; 0x268 <KB_Write+0x8a>
 244:	15 c0       	rjmp	.+42     	; 0x270 <KB_Write+0x92>
 246:	82 30       	cpi	r24, 0x02	; 2
 248:	91 05       	cpc	r25, r1
 24a:	71 f0       	breq	.+28     	; 0x268 <KB_Write+0x8a>
 24c:	03 97       	sbiw	r24, 0x03	; 3
 24e:	71 f0       	breq	.+28     	; 0x26c <KB_Write+0x8e>
 250:	0f c0       	rjmp	.+30     	; 0x270 <KB_Write+0x92>
 252:	86 30       	cpi	r24, 0x06	; 6
 254:	91 05       	cpc	r25, r1
 256:	41 f0       	breq	.+16     	; 0x268 <KB_Write+0x8a>
 258:	86 30       	cpi	r24, 0x06	; 6
 25a:	91 05       	cpc	r25, r1
 25c:	3c f0       	brlt	.+14     	; 0x26c <KB_Write+0x8e>
 25e:	87 30       	cpi	r24, 0x07	; 7
 260:	91 05       	cpc	r25, r1
 262:	21 f0       	breq	.+8      	; 0x26c <KB_Write+0x8e>
 264:	08 97       	sbiw	r24, 0x08	; 8
 266:	21 f4       	brne	.+8      	; 0x270 <KB_Write+0x92>
 {
  case 0:
  case 2:
  case 4:
  case 6: 
  case 8:KBPort=0x05;break ; //开上拉电阻~~发送标志位
 268:	85 e0       	ldi	r24, 0x05	; 5
 26a:	01 c0       	rjmp	.+2      	; 0x26e <KB_Write+0x90>
  case 1:
  case 3:
  case 5:
  case 7:KBPort=0x04;break;
 26c:	84 e0       	ldi	r24, 0x04	; 4
 26e:	82 bb       	out	0x12, r24	; 18
  }
 loop_until_bit_is_clear(KBPIN,KB_Clk);
 270:	82 99       	sbic	0x10, 2	; 16
 272:	fe cf       	rjmp	.-4      	; 0x270 <KB_Write+0x92>
 KBPort=0x05;                 //发送结束标志
 274:	85 e0       	ldi	r24, 0x05	; 5
 276:	82 bb       	out	0x12, r24	; 18
 278:	cf 91       	pop	r28
 27a:	1f 91       	pop	r17
 27c:	08 95       	ret

0000027e <__vector_1>:
 //loop_until_bit_is_clear(KBPIN,KB_Clk);
 }
 

/*void keycode(void)
{
 uint8_t keydata=0,j;
 
 if(key)  
 {
   //PORTB=0xff;
   if(bf==0)
   {
    //PORTB=0xff;
	if(keybf[0]) PORTB=0xf0;
   if(keybf[0]==0x12||keybf[0]==0x59) //shift
	 {
	    for(j=0;j<cntbf;j++)
		 {
		 if(keybf[j]==0xe0)
		  {
		   if(keybf[j+1]==0xf0)
		     keydata=keybf[j+2];
		   } 
	      else if(key==0xf0) break;
          else keydata=keybf[j];
		 }
		 
		 //PORTB=0xff;
       for(j=0;j<59;j++)
	     if(keydata==Shifted[j][0]) 
		  keyword=Shifted[j][1];
	  }
    else     
	{ 
     keydata=keybf[0]; 
	 for(j=0;j<59;j++)
      { 
	   if(keydata==UnShifted[j][0])
	     keyword=UnShifted[j][1];
      }
    }
   cntbf=0;
   
   }
   
 }
 }*/


SIGNAL(SIG_INTERRUPT0)
 {
 27e:	1f 92       	push	r1
 280:	0f 92       	push	r0
 282:	0f b6       	in	r0, 0x3f	; 63
 284:	0f 92       	push	r0
 286:	11 24       	eor	r1, r1
 288:	2f 93       	push	r18
 28a:	3f 93       	push	r19
 28c:	8f 93       	push	r24
 28e:	9f 93       	push	r25
 290:	ef 93       	push	r30
 292:	ff 93       	push	r31
 uint8_t pin,chk;
 uint8_t keydata=0,j;
 
 if(cnt==0) key=0;
 294:	80 91 56 01 	lds	r24, 0x0156
 298:	88 23       	and	r24, r24
 29a:	11 f4       	brne	.+4      	; 0x2a0 <__vector_1+0x22>
 29c:	80 93 4d 01 	sts	0x014D, r24
 KBDDR=(1<<KB_Clk)&(1<<KB_Data);
 2a0:	11 ba       	out	0x11, r1	; 17
 KBPort=(1<<KB_Clk)&(1<<KB_Data);
 2a2:	12 ba       	out	0x12, r1	; 18
 if(cnt>0&&cnt<9)
 2a4:	80 91 56 01 	lds	r24, 0x0156
 2a8:	88 23       	and	r24, r24
 2aa:	b1 f0       	breq	.+44     	; 0x2d8 <__vector_1+0x5a>
 2ac:	80 91 56 01 	lds	r24, 0x0156
 2b0:	89 30       	cpi	r24, 0x09	; 9
 2b2:	90 f4       	brcc	.+36     	; 0x2d8 <__vector_1+0x5a>
 { 
 pin=KBPIN&0x01;                                  ////////////////////
 2b4:	80 b3       	in	r24, 0x10	; 16
 2b6:	81 70       	andi	r24, 0x01	; 1
  pin<<=(cnt-1);
 2b8:	28 2f       	mov	r18, r24
 2ba:	33 27       	eor	r19, r19
 2bc:	80 91 56 01 	lds	r24, 0x0156
 2c0:	99 27       	eor	r25, r25
 2c2:	01 97       	sbiw	r24, 0x01	; 1
 2c4:	02 c0       	rjmp	.+4      	; 0x2ca <__vector_1+0x4c>
 2c6:	22 0f       	add	r18, r18
 2c8:	33 1f       	adc	r19, r19
 2ca:	8a 95       	dec	r24
 2cc:	e2 f7       	brpl	.-8      	; 0x2c6 <__vector_1+0x48>
 key|=pin;
 2ce:	80 91 4d 01 	lds	r24, 0x014D
 2d2:	82 2b       	or	r24, r18
 2d4:	80 93 4d 01 	sts	0x014D, r24
 }
 chk=KBPIN&0x01;
 2d8:	80 b3       	in	r24, 0x10	; 16
 cnt++;
 2da:	80 91 56 01 	lds	r24, 0x0156
 2de:	8f 5f       	subi	r24, 0xFF	; 255
 2e0:	80 93 56 01 	sts	0x0156, r24

 if(cnt==11) 
 2e4:	80 91 56 01 	lds	r24, 0x0156
 2e8:	8b 30       	cpi	r24, 0x0B	; 11
 2ea:	91 f5       	brne	.+100    	; 0x350 <__vector_1+0xd2>
 { 
   cnt=0;
 2ec:	10 92 56 01 	sts	0x0156, r1
   if(shift==1)
 2f0:	80 91 4e 01 	lds	r24, 0x014E
 2f4:	81 30       	cpi	r24, 0x01	; 1
 2f6:	91 f4       	brne	.+36     	; 0x31c <__vector_1+0x9e>
 2f8:	2a e3       	ldi	r18, 0x3A	; 58
 2fa:	e0 e6       	ldi	r30, 0x60	; 96
 2fc:	f0 e0       	ldi	r31, 0x00	; 0
   {
  
		 //PORTB=0xff;
       for(j=0;j<59;j++)
	     if(key==Shifted[j][0]) 
 2fe:	90 91 4d 01 	lds	r25, 0x014D
 302:	80 81       	ld	r24, Z
 304:	98 17       	cp	r25, r24
 306:	19 f4       	brne	.+6      	; 0x30e <__vector_1+0x90>
		  keyword=Shifted[j][1];
 308:	81 81       	ldd	r24, Z+1	; 0x01
 30a:	80 93 4c 01 	sts	0x014C, r24
 30e:	21 50       	subi	r18, 0x01	; 1
 310:	32 96       	adiw	r30, 0x02	; 2
 312:	27 ff       	sbrs	r18, 7
 314:	f4 cf       	rjmp	.-24     	; 0x2fe <__vector_1+0x80>
	    shift=0; 
 316:	10 92 4e 01 	sts	0x014E, r1
 31a:	0f c0       	rjmp	.+30     	; 0x33a <__vector_1+0xbc>
 31c:	2a e3       	ldi	r18, 0x3A	; 58
 31e:	e6 ed       	ldi	r30, 0xD6	; 214
 320:	f0 e0       	ldi	r31, 0x00	; 0
	  }
    else     
	{ 
     //keydata=keybf[0]; 
	 for(j=0;j<59;j++)
      { 
	   if(key==UnShifted[j][0])
 322:	90 91 4d 01 	lds	r25, 0x014D
 326:	80 81       	ld	r24, Z
 328:	98 17       	cp	r25, r24
 32a:	19 f4       	brne	.+6      	; 0x332 <__vector_1+0xb4>
	     keyword=UnShifted[j][1];
 32c:	81 81       	ldd	r24, Z+1	; 0x01
 32e:	80 93 4c 01 	sts	0x014C, r24
 332:	21 50       	subi	r18, 0x01	; 1
 334:	32 96       	adiw	r30, 0x02	; 2
 336:	27 ff       	sbrs	r18, 7
 338:	f4 cf       	rjmp	.-24     	; 0x322 <__vector_1+0xa4>
        //PORTB=0x04;
	  }
    }
   
   if(key==0x12||key==0x59) //shift
 33a:	80 91 4d 01 	lds	r24, 0x014D
 33e:	82 31       	cpi	r24, 0x12	; 18
 340:	21 f0       	breq	.+8      	; 0x34a <__vector_1+0xcc>
 342:	80 91 4d 01 	lds	r24, 0x014D
 346:	89 35       	cpi	r24, 0x59	; 89
 348:	19 f4       	brne	.+6      	; 0x350 <__vector_1+0xd2>
    {
	shift=1;
 34a:	81 e0       	ldi	r24, 0x01	; 1
 34c:	80 93 4e 01 	sts	0x014E, r24
 350:	ff 91       	pop	r31
 352:	ef 91       	pop	r30
 354:	9f 91       	pop	r25
 356:	8f 91       	pop	r24
 358:	3f 91       	pop	r19
 35a:	2f 91       	pop	r18
 35c:	0f 90       	pop	r0
 35e:	0f be       	out	0x3f, r0	; 63
 360:	0f 90       	pop	r0
 362:	1f 90       	pop	r1
 364:	18 95       	reti

00000366 <main>:
	//PORTB=0xff;
	}
 
   
 
 
   
   
   }
   



}
  
  


 
 
 int main(void)
 {
 366:	cf e5       	ldi	r28, 0x5F	; 95
 368:	d4 e0       	ldi	r29, 0x04	; 4
 36a:	de bf       	out	0x3e, r29	; 62
 36c:	cd bf       	out	0x3d, r28	; 61
// uint8_t i,j;
 DDRA=0xff;
 36e:	8f ef       	ldi	r24, 0xFF	; 255
 370:	8a bb       	out	0x1a, r24	; 26
 DDRB=0xff;
 372:	87 bb       	out	0x17, r24	; 23
 KBPort=0x05;
 374:	85 e0       	ldi	r24, 0x05	; 5
 376:	82 bb       	out	0x12, r24	; 18
 KBDDR=0x00;
 378:	11 ba       	out	0x11, r1	; 17
 //KB_Write(0xE4);
 MCUCR=(1<<ISC01);
 37a:	82 e0       	ldi	r24, 0x02	; 2
 37c:	85 bf       	out	0x35, r24	; 53
 GICR=(1<<INT0);
 37e:	80 e4       	ldi	r24, 0x40	; 64
 380:	8b bf       	out	0x3b, r24	; 59
 sei();
 382:	78 94       	sei
 Initialize_LCD();
 384:	0e 94 c1 00 	call	0x182 <Initialize_LCD>
 //Write_ASC(0,0,key);
 for(;;)
 {
  if(key)
 388:	80 91 4d 01 	lds	r24, 0x014D
 38c:	88 23       	and	r24, r24
 38e:	e1 f3       	breq	.-8      	; 0x388 <main+0x22>
  Write_Word(0,0 ,key) ;
 390:	40 91 4d 01 	lds	r20, 0x014D
 394:	60 e0       	ldi	r22, 0x00	; 0
 396:	86 2f       	mov	r24, r22
 398:	0e 94 d0 00 	call	0x1a0 <Write_Word>
 39c:	f5 cf       	rjmp	.-22     	; 0x388 <main+0x22>

⌨️ 快捷键说明

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