📄 ps2_lcm1602.lss
字号:
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 + -