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

📄 ps2_lcm1602.lss

📁 WINAVR编写的PS2键盘驱动
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     426:	90 93 92 01 	sts	0x0192, r25
     42a:	80 93 91 01 	sts	0x0191, r24

        buffcnt++;
     42e:	80 91 d7 01 	lds	r24, 0x01D7
     432:	8f 5f       	subi	r24, 0xFF	; 255
     434:	80 93 d7 01 	sts	0x01D7, r24

        if (inpt >= kb_buffer + BUFF_SIZE)        // Pointer wrapping
     438:	80 91 91 01 	lds	r24, 0x0191
     43c:	90 91 92 01 	lds	r25, 0x0192
     440:	21 e0       	ldi	r18, 0x01	; 1
     442:	87 3d       	cpi	r24, 0xD7	; 215
     444:	92 07       	cpc	r25, r18
     446:	30 f0       	brcs	.+12     	; 0x454 <put_kbbuff+0x62>
            inpt = kb_buffer;
     448:	87 e9       	ldi	r24, 0x97	; 151
     44a:	91 e0       	ldi	r25, 0x01	; 1
     44c:	90 93 92 01 	sts	0x0192, r25
     450:	80 93 91 01 	sts	0x0191, r24
     454:	21 96       	adiw	r28, 0x01	; 1
     456:	0f b6       	in	r0, 0x3f	; 63
     458:	f8 94       	cli
     45a:	de bf       	out	0x3e, r29	; 62
     45c:	0f be       	out	0x3f, r0	; 63
     45e:	cd bf       	out	0x3d, r28	; 61
     460:	df 91       	pop	r29
     462:	cf 91       	pop	r28
     464:	08 95       	ret

00000466 <getchar_kb>:
    }
}


/*-----------------------------------------------------------
getchar_kb    :键码接收程序
输入参数      :无
输出参数      :键码
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
unsigned char getchar_kb(void)
{
     466:	cf 93       	push	r28
     468:	df 93       	push	r29
     46a:	cd b7       	in	r28, 0x3d	; 61
     46c:	de b7       	in	r29, 0x3e	; 62
     46e:	21 97       	sbiw	r28, 0x01	; 1
     470:	0f b6       	in	r0, 0x3f	; 63
     472:	f8 94       	cli
     474:	de bf       	out	0x3e, r29	; 62
     476:	0f be       	out	0x3f, r0	; 63
     478:	cd bf       	out	0x3d, r28	; 61
    unsigned char byte;
    while(buffcnt == 0);                           // Wait for data
     47a:	80 91 d7 01 	lds	r24, 0x01D7
     47e:	88 23       	and	r24, r24
     480:	09 f4       	brne	.+2      	; 0x484 <getchar_kb+0x1e>
     482:	fb cf       	rjmp	.-10     	; 0x47a <getchar_kb+0x14>

    byte = *outpt;                                 // Get byte
     484:	e0 91 94 01 	lds	r30, 0x0194
     488:	f0 91 95 01 	lds	r31, 0x0195
     48c:	80 81       	ld	r24, Z
     48e:	89 83       	std	Y+1, r24	; 0x01
    outpt++;                                       // Increment pointer
     490:	80 91 94 01 	lds	r24, 0x0194
     494:	90 91 95 01 	lds	r25, 0x0195
     498:	01 96       	adiw	r24, 0x01	; 1
     49a:	90 93 95 01 	sts	0x0195, r25
     49e:	80 93 94 01 	sts	0x0194, r24

    if (outpt >= kb_buffer + BUFF_SIZE)            // Pointer wrapping
     4a2:	80 91 94 01 	lds	r24, 0x0194
     4a6:	90 91 95 01 	lds	r25, 0x0195
     4aa:	21 e0       	ldi	r18, 0x01	; 1
     4ac:	87 3d       	cpi	r24, 0xD7	; 215
     4ae:	92 07       	cpc	r25, r18
     4b0:	30 f0       	brcs	.+12     	; 0x4be <getchar_kb+0x58>
        outpt = kb_buffer;
     4b2:	87 e9       	ldi	r24, 0x97	; 151
     4b4:	91 e0       	ldi	r25, 0x01	; 1
     4b6:	90 93 95 01 	sts	0x0195, r25
     4ba:	80 93 94 01 	sts	0x0194, r24
    
    buffcnt--;                                     // Decrement buffer count
     4be:	80 91 d7 01 	lds	r24, 0x01D7
     4c2:	81 50       	subi	r24, 0x01	; 1
     4c4:	80 93 d7 01 	sts	0x01D7, r24

    return byte;
     4c8:	89 81       	ldd	r24, Y+1	; 0x01
     4ca:	99 27       	eor	r25, r25
     4cc:	21 96       	adiw	r28, 0x01	; 1
     4ce:	0f b6       	in	r0, 0x3f	; 63
     4d0:	f8 94       	cli
     4d2:	de bf       	out	0x3e, r29	; 62
     4d4:	0f be       	out	0x3f, r0	; 63
     4d6:	cd bf       	out	0x3d, r28	; 61
     4d8:	df 91       	pop	r29
     4da:	cf 91       	pop	r28
     4dc:	08 95       	ret

000004de <print_hexbyte>:
}

/*-----------------------------------------------------------
print_hexbyte :直接保存原始8bit代码到缓冲区,不经解码
输入参数 i    :原始8bit代码
输出参数      :无
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
void print_hexbyte(unsigned char i)
{
     4de:	cf 93       	push	r28
     4e0:	df 93       	push	r29
     4e2:	cd b7       	in	r28, 0x3d	; 61
     4e4:	de b7       	in	r29, 0x3e	; 62
     4e6:	23 97       	sbiw	r28, 0x03	; 3
     4e8:	0f b6       	in	r0, 0x3f	; 63
     4ea:	f8 94       	cli
     4ec:	de bf       	out	0x3e, r29	; 62
     4ee:	0f be       	out	0x3f, r0	; 63
     4f0:	cd bf       	out	0x3d, r28	; 61
     4f2:	89 83       	std	Y+1, r24	; 0x01
    unsigned char h, l;
    
    h = i & 0xF0;               // 高4位
     4f4:	90 ef       	ldi	r25, 0xF0	; 240
     4f6:	89 81       	ldd	r24, Y+1	; 0x01
     4f8:	89 23       	and	r24, r25
     4fa:	8a 83       	std	Y+2, r24	; 0x02
    h = h>>4;
     4fc:	8a 81       	ldd	r24, Y+2	; 0x02
     4fe:	82 95       	swap	r24
     500:	8f 70       	andi	r24, 0x0F	; 15
     502:	8a 83       	std	Y+2, r24	; 0x02
    h = h + '0';
     504:	8a 81       	ldd	r24, Y+2	; 0x02
     506:	80 5d       	subi	r24, 0xD0	; 208
     508:	8a 83       	std	Y+2, r24	; 0x02
    
    if (h > '9')
     50a:	8a 81       	ldd	r24, Y+2	; 0x02
     50c:	8a 33       	cpi	r24, 0x3A	; 58
     50e:	18 f0       	brcs	.+6      	; 0x516 <print_hexbyte+0x38>
        h = h + 7;
     510:	8a 81       	ldd	r24, Y+2	; 0x02
     512:	89 5f       	subi	r24, 0xF9	; 249
     514:	8a 83       	std	Y+2, r24	; 0x02

    l = (i & 0x0F)+'0';         // 低4位
     516:	89 81       	ldd	r24, Y+1	; 0x01
     518:	8f 70       	andi	r24, 0x0F	; 15
     51a:	80 5d       	subi	r24, 0xD0	; 208
     51c:	8b 83       	std	Y+3, r24	; 0x03
    if (l > '9')
     51e:	8b 81       	ldd	r24, Y+3	; 0x03
     520:	8a 33       	cpi	r24, 0x3A	; 58
     522:	18 f0       	brcs	.+6      	; 0x52a <print_hexbyte+0x4c>
        l = l + 7;
     524:	8b 81       	ldd	r24, Y+3	; 0x03
     526:	89 5f       	subi	r24, 0xF9	; 249
     528:	8b 83       	std	Y+3, r24	; 0x03

    put_kbbuff(h);
     52a:	8a 81       	ldd	r24, Y+2	; 0x02
     52c:	0e 94 f9 01 	call	0x3f2 <put_kbbuff>
    put_kbbuff(l);
     530:	8b 81       	ldd	r24, Y+3	; 0x03
     532:	0e 94 f9 01 	call	0x3f2 <put_kbbuff>
     536:	23 96       	adiw	r28, 0x03	; 3
     538:	0f b6       	in	r0, 0x3f	; 63
     53a:	f8 94       	cli
     53c:	de bf       	out	0x3e, r29	; 62
     53e:	0f be       	out	0x3f, r0	; 63
     540:	cd bf       	out	0x3d, r28	; 61
     542:	df 91       	pop	r29
     544:	cf 91       	pop	r28
     546:	08 95       	ret

00000548 <LCM1602Init>:
------------------------------------------------------------------------------------------ */

//1602液晶初始化
void LCM1602Init(void )
{
     548:	cf 93       	push	r28
     54a:	df 93       	push	r29
     54c:	cd b7       	in	r28, 0x3d	; 61
     54e:	de b7       	in	r29, 0x3e	; 62
     550:	2c 97       	sbiw	r28, 0x0c	; 12
     552:	0f b6       	in	r0, 0x3f	; 63
     554:	f8 94       	cli
     556:	de bf       	out	0x3e, r29	; 62
     558:	0f be       	out	0x3f, r0	; 63
     55a:	cd bf       	out	0x3d, r28	; 61
	RS_DDR|=(1<<RS_PIN);    
     55c:	80 91 31 00 	lds	r24, 0x0031
     560:	80 61       	ori	r24, 0x10	; 16
     562:	80 93 31 00 	sts	0x0031, r24
	RW_DDR|=(1<<RW_PIN);   
     566:	80 91 31 00 	lds	r24, 0x0031
     56a:	80 62       	ori	r24, 0x20	; 32
     56c:	80 93 31 00 	sts	0x0031, r24
	E_DDR|=(1<<E_PIN);     
     570:	80 91 31 00 	lds	r24, 0x0031
     574:	80 68       	ori	r24, 0x80	; 128
     576:	80 93 31 00 	sts	0x0031, r24
	DB_OUT;                          //PB设为输出
     57a:	8f ef       	ldi	r24, 0xFF	; 255
     57c:	80 93 37 00 	sts	0x0037, r24
	DB_PORT = 0x00;
     580:	10 92 38 00 	sts	0x0038, r1
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
     584:	80 e0       	ldi	r24, 0x00	; 0
     586:	90 e0       	ldi	r25, 0x00	; 0
     588:	a0 e7       	ldi	r26, 0x70	; 112
     58a:	b1 e4       	ldi	r27, 0x41	; 65
     58c:	89 83       	std	Y+1, r24	; 0x01
     58e:	9a 83       	std	Y+2, r25	; 0x02
     590:	ab 83       	std	Y+3, r26	; 0x03
     592:	bc 83       	std	Y+4, r27	; 0x04
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
     594:	26 e6       	ldi	r18, 0x66	; 102
     596:	36 e6       	ldi	r19, 0x66	; 102
     598:	46 ee       	ldi	r20, 0xE6	; 230
     59a:	54 e4       	ldi	r21, 0x44	; 68
     59c:	69 81       	ldd	r22, Y+1	; 0x01
     59e:	7a 81       	ldd	r23, Y+2	; 0x02
     5a0:	8b 81       	ldd	r24, Y+3	; 0x03
     5a2:	9c 81       	ldd	r25, Y+4	; 0x04
     5a4:	0e 94 49 08 	call	0x1092 <__mulsf3>
     5a8:	dc 01       	movw	r26, r24
     5aa:	cb 01       	movw	r24, r22
     5ac:	8f 83       	std	Y+7, r24	; 0x07
     5ae:	98 87       	std	Y+8, r25	; 0x08
     5b0:	a9 87       	std	Y+9, r26	; 0x09
     5b2:	ba 87       	std	Y+10, r27	; 0x0a
	if (__tmp < 1.0)
     5b4:	20 e0       	ldi	r18, 0x00	; 0
     5b6:	30 e0       	ldi	r19, 0x00	; 0
     5b8:	40 e8       	ldi	r20, 0x80	; 128
     5ba:	5f e3       	ldi	r21, 0x3F	; 63
     5bc:	6f 81       	ldd	r22, Y+7	; 0x07
     5be:	78 85       	ldd	r23, Y+8	; 0x08
     5c0:	89 85       	ldd	r24, Y+9	; 0x09
     5c2:	9a 85       	ldd	r25, Y+10	; 0x0a
     5c4:	0e 94 f9 07 	call	0xff2 <__eqsf2>
     5c8:	88 23       	and	r24, r24
     5ca:	0c f0       	brlt	.+2      	; 0x5ce <LCM1602Init+0x86>
     5cc:	05 c0       	rjmp	.+10     	; 0x5d8 <LCM1602Init+0x90>
		__ticks = 1;
     5ce:	81 e0       	ldi	r24, 0x01	; 1
     5d0:	90 e0       	ldi	r25, 0x00	; 0
     5d2:	9e 83       	std	Y+6, r25	; 0x06
     5d4:	8d 83       	std	Y+5, r24	; 0x05
     5d6:	1a c0       	rjmp	.+52     	; 0x60c <LCM1602Init+0xc4>
	else if (__tmp > 65535)
     5d8:	20 e0       	ldi	r18, 0x00	; 0
     5da:	3f ef       	ldi	r19, 0xFF	; 255
     5dc:	4f e7       	ldi	r20, 0x7F	; 127
     5de:	57 e4       	ldi	r21, 0x47	; 71
     5e0:	6f 81       	ldd	r22, Y+7	; 0x07
     5e2:	78 85       	ldd	r23, Y+8	; 0x08
     5e4:	89 85       	ldd	r24, Y+9	; 0x09
     5e6:	9a 85       	ldd	r25, Y+10	; 0x0a
     5e8:	0e 94 fc 07 	call	0xff8 <__gesf2>
     5ec:	18 16       	cp	r1, r24
     5ee:	0c f0       	brlt	.+2      	; 0x5f2 <LCM1602Init+0xaa>
     5f0:	03 c0       	rjmp	.+6      	; 0x5f8 <LCM1602Init+0xb0>
		__ticks = 0;	/* i.e. 65536 */
     5f2:	1e 82       	std	Y+6, r1	; 0x06
     5f4:	1d 82       	std	Y+5, r1	; 0x05
     5f6:	0a c0       	rjmp	.+20     	; 0x60c <LCM1602Init+0xc4>
	else
		__ticks = (uint16_t)__tmp;
     5f8:	6f 81       	ldd	r22, Y+7	; 0x07
     5fa:	78 85       	ldd	r23, Y+8	; 0x08
     5fc:	89 85       	ldd	r24, Y+9	; 0x09
     5fe:	9a 85       	ldd	r25, Y+10	; 0x0a
     600:	0e 94 de 07 	call	0xfbc <__fixsfsi>
     604:	dc 01       	movw	r26, r24
     606:	cb 01       	movw	r24, r22
     608:	9e 83       	std	Y+6, r25	; 0x06
     60a:	8d 83       	std	Y+5, r24	; 0x05
     60c:	8d 81       	ldd	r24, Y+5	; 0x05
     60e:	9e 81       	ldd	r25, Y+6	; 0x06
     610:	9c 87       	std	Y+12, r25	; 0x0c
     612:	8b 87       	std	Y+11, r24	; 0x0b
     614:	8b 85       	ldd	r24, Y+11	; 0x0b
     616:	9c 85       	ldd	r25, Y+12	; 0x0c
     618:	01 97       	sbiw	r24, 0x01	; 1
     61a:	f1 f7       	brne	.-4      	; 0x618 <LCM1602Init+0xd0>
     61c:	9c 87       	std	Y+12, r25	; 0x0c
     61e:	8b 87       	std	Y+11, r24	; 0x0b
	_delay_ms(15);
	LCM1602WriteCommand(0x38,0); //设定LCD为16×2显示,5×7点阵,8位数据接口,不检测忙信号
     620:	60 e0       	ldi	r22, 0x00	; 0
     622:	88 e3       	ldi	r24, 0x38	; 56
     624:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
     628:	80 e0       	ldi	r24, 0x00	; 0
     62a:	90 e0       	ldi	r25, 0x00	; 0
     62c:	a0 ea       	ldi	r26, 0xA0	; 160
     62e:	b0 e4       	ldi	r27, 0x40	; 64
     630:	8f 83       	std	Y+7, r24	; 0x07
     632:	98 87       	std	Y+8, r25	; 0x08
     634:	a9 87       	std	Y+9, r26	; 0x09
     636:	ba 87       	std	Y+10, r27	; 0x0a
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
     638:	26 e6       	ldi	r18, 0x66	; 102
     63a:	36 e6       	ldi	r19, 0x66	; 102
     63c:	46 ee       	ldi	r20, 0xE6	; 230
     63e:	54 e4       	ldi	r21, 0x44	; 68
     640:	6f 81       	ldd	r22, Y+7	; 0x07
     642:	78 85       	ldd	r23, Y+8	; 0x08
     644:	89 85       	ldd	r24, Y+9	; 0x09
     646:	9a 85       	ldd	r25, Y+10	; 0x0a
     648:	0e 94 49 08 	call	0x1092 <__mulsf3>
     64c:	dc 01       	movw	r26, r24
     64e:	cb 01       	movw	r24, r22

⌨️ 快捷键说明

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