📄 ks0108test.lss
字号:
63a: cd b7 in r28, 0x3d ; 61
63c: de b7 in r29, 0x3e ; 62
63e: 21 97 sbiw r28, 0x01 ; 1
640: 0f b6 in r0, 0x3f ; 63
642: f8 94 cli
644: de bf out 0x3e, r29 ; 62
646: 0f be out 0x3f, r0 ; 63
648: cd bf out 0x3d, r28 ; 61
64a: 12 ba out 0x12, r1 ; 18
64c: 11 ba out 0x11, r1 ; 17
64e: 90 91 62 00 lds r25, 0x0062
652: 90 34 cpi r25, 0x40 ; 64
654: 18 f4 brcc .+6 ; 0x65c <ks0108DoReadData+0x28>
656: ac 98 cbi 0x15, 4 ; 21
658: ab 9a sbi 0x15, 3 ; 21
65a: 09 c0 rjmp .+18 ; 0x66e <ks0108DoReadData+0x3a>
65c: ab 98 cbi 0x15, 3 ; 21
65e: ac 9a sbi 0x15, 4 ; 21
660: 90 34 cpi r25, 0x40 ; 64
662: 29 f4 brne .+10 ; 0x66e <ks0108DoReadData+0x3a>
664: 88 23 and r24, r24
666: 19 f0 breq .+6 ; 0x66e <ks0108DoReadData+0x3a>
668: 61 e0 ldi r22, 0x01 ; 1
66a: 80 e4 ldi r24, 0x40 ; 64
66c: af df rcall .-162 ; 0x5cc <ks0108WriteCommand>
66e: a8 9a sbi 0x15, 0 ; 21
670: a9 9a sbi 0x15, 1 ; 21
672: aa 9a sbi 0x15, 2 ; 21
674: 00 00 nop
676: 00 00 nop
678: 00 00 nop
67a: 10 b3 in r17, 0x10 ; 16
67c: aa 98 cbi 0x15, 2 ; 21
67e: 19 82 std Y+1, r1 ; 0x01
680: 03 c0 rjmp .+6 ; 0x688 <ks0108DoReadData+0x54>
682: 89 81 ldd r24, Y+1 ; 0x01
684: 8f 5f subi r24, 0xFF ; 255
686: 89 83 std Y+1, r24 ; 0x01
688: 89 81 ldd r24, Y+1 ; 0x01
68a: 88 30 cpi r24, 0x08 ; 8
68c: d0 f3 brcs .-12 ; 0x682 <ks0108DoReadData+0x4e>
68e: 8f ef ldi r24, 0xFF ; 255
690: 81 bb out 0x11, r24 ; 17
692: 60 91 63 00 lds r22, 0x0063
696: 80 91 62 00 lds r24, 0x0062
69a: aa df rcall .-172 ; 0x5f0 <ks0108GotoXY>
69c: 80 91 60 00 lds r24, 0x0060
6a0: 81 11 cpse r24, r1
6a2: 10 95 com r17
6a4: 81 2f mov r24, r17
6a6: 99 27 eor r25, r25
6a8: 21 96 adiw r28, 0x01 ; 1
6aa: 0f b6 in r0, 0x3f ; 63
6ac: f8 94 cli
6ae: de bf out 0x3e, r29 ; 62
6b0: 0f be out 0x3f, r0 ; 63
6b2: cd bf out 0x3d, r28 ; 61
6b4: df 91 pop r29
6b6: cf 91 pop r28
6b8: 1f 91 pop r17
6ba: 08 95 ret
000006bc <ks0108ReadData>:
6bc: 81 e0 ldi r24, 0x01 ; 1
6be: ba df rcall .-140 ; 0x634 <ks0108DoReadData>
6c0: 80 e0 ldi r24, 0x00 ; 0
6c2: b8 df rcall .-144 ; 0x634 <ks0108DoReadData>
6c4: 99 27 eor r25, r25
6c6: 08 95 ret
000006c8 <ks0108WriteData>:
}
void ks0108WriteData(uint8_t data) {
6c8: ef 92 push r14
6ca: ff 92 push r15
6cc: 0f 93 push r16
6ce: 1f 93 push r17
6d0: cf 93 push r28
6d2: df 93 push r29
6d4: 08 2f mov r16, r24
uint8_t displayData, yOffset, cmdPort;
#ifdef DEBUG
volatile uint16_t i;
for(i=0; i<5000; i++);
#endif
if(ks0108Coord.x >= 128)
6d6: 80 91 62 00 lds r24, 0x0062
6da: 87 fd sbrc r24, 7
6dc: 59 c0 rjmp .+178 ; 0x790 <ks0108WriteData+0xc8>
return;
if(ks0108Coord.x < 64) {
6de: 80 34 cpi r24, 0x40 ; 64
6e0: 18 f4 brcc .+6 ; 0x6e8 <ks0108WriteData+0x20>
LCD_CMD_PORT &= ~(0x01 << CSEL2); // deselect chip 2
6e2: ac 98 cbi 0x15, 4 ; 21
LCD_CMD_PORT |= 0x01 << CSEL1; // select chip 1
6e4: ab 9a sbi 0x15, 3 ; 21
6e6: 06 c0 rjmp .+12 ; 0x6f4 <ks0108WriteData+0x2c>
} else if(ks0108Coord.x >= 64) {
LCD_CMD_PORT &= ~(0x01 << CSEL1); // deselect chip 1
6e8: ab 98 cbi 0x15, 3 ; 21
LCD_CMD_PORT |= 0x01 << CSEL2; // select chip 2
6ea: ac 9a sbi 0x15, 4 ; 21
}
if(ks0108Coord.x == 64) // chip2 X-address = 0
6ec: 80 34 cpi r24, 0x40 ; 64
6ee: 11 f4 brne .+4 ; 0x6f4 <ks0108WriteData+0x2c>
ks0108WriteCommand(LCD_SET_ADD, CHIP2);
6f0: 61 e0 ldi r22, 0x01 ; 1
6f2: 6c df rcall .-296 ; 0x5cc <ks0108WriteCommand>
LCD_CMD_PORT |= 0x01 << D_I; // D/I = 1
6f4: a8 9a sbi 0x15, 0 ; 21
LCD_CMD_PORT &= ~(0x01 << R_W); // R/W = 0
6f6: a9 98 cbi 0x15, 1 ; 21
LCD_DATA_DIR = 0xFF; // data port is output
6f8: 8f ef ldi r24, 0xFF ; 255
6fa: e8 2e mov r14, r24
6fc: e1 ba out 0x11, r14 ; 17
yOffset = ks0108Coord.y%8;
6fe: 10 91 63 00 lds r17, 0x0063
702: 17 70 andi r17, 0x07 ; 7
if(yOffset != 0) {
704: c9 f1 breq .+114 ; 0x778 <ks0108WriteData+0xb0>
// first page
cmdPort = LCD_CMD_PORT; // save command port
706: f5 b2 in r15, 0x15 ; 21
displayData = ks0108ReadData();
708: d9 df rcall .-78 ; 0x6bc <ks0108ReadData>
LCD_CMD_PORT = cmdPort; // restore command port
70a: f5 ba out 0x15, r15 ; 21
LCD_DATA_DIR = 0xFF; // data port is output
70c: e1 ba out 0x11, r14 ; 17
displayData |= data << yOffset;
70e: c0 2f mov r28, r16
710: dd 27 eor r29, r29
712: 01 2f mov r16, r17
714: 11 27 eor r17, r17
716: 9e 01 movw r18, r28
718: 00 2e mov r0, r16
71a: 02 c0 rjmp .+4 ; 0x720 <ks0108WriteData+0x58>
71c: 22 0f add r18, r18
71e: 33 1f adc r19, r19
720: 0a 94 dec r0
722: e2 f7 brpl .-8 ; 0x71c <ks0108WriteData+0x54>
724: 98 2f mov r25, r24
726: 92 2b or r25, r18
if(ks0108Inverted)
728: 80 91 60 00 lds r24, 0x0060
72c: 81 11 cpse r24, r1
displayData = ~displayData;
72e: 90 95 com r25
LCD_DATA_OUT = displayData; // write data
730: 92 bb out 0x12, r25 ; 18
ks0108Enable(); // enable
732: 2c df rcall .-424 ; 0x58c <ks0108Enable>
// second page
ks0108GotoXY(ks0108Coord.x, ks0108Coord.y+8);
734: 60 91 63 00 lds r22, 0x0063
738: 68 5f subi r22, 0xF8 ; 248
73a: 80 91 62 00 lds r24, 0x0062
73e: 58 df rcall .-336 ; 0x5f0 <ks0108GotoXY>
displayData = ks0108ReadData();
740: bd df rcall .-134 ; 0x6bc <ks0108ReadData>
LCD_CMD_PORT = cmdPort; // restore command port
742: f5 ba out 0x15, r15 ; 21
LCD_DATA_DIR = 0xFF; // data port is output
744: e1 ba out 0x11, r14 ; 17
displayData |= data >> (8-yOffset);
746: 28 e0 ldi r18, 0x08 ; 8
748: 30 e0 ldi r19, 0x00 ; 0
74a: 20 1b sub r18, r16
74c: 31 0b sbc r19, r17
74e: 02 c0 rjmp .+4 ; 0x754 <ks0108WriteData+0x8c>
750: d5 95 asr r29
752: c7 95 ror r28
754: 2a 95 dec r18
756: e2 f7 brpl .-8 ; 0x750 <ks0108WriteData+0x88>
758: 28 2f mov r18, r24
75a: 2c 2b or r18, r28
if(ks0108Inverted)
75c: 80 91 60 00 lds r24, 0x0060
760: 81 11 cpse r24, r1
displayData = ~displayData;
762: 20 95 com r18
LCD_DATA_OUT = displayData; // write data
764: 22 bb out 0x12, r18 ; 18
ks0108Enable(); // enable
766: 12 df rcall .-476 ; 0x58c <ks0108Enable>
ks0108GotoXY(ks0108Coord.x+1, ks0108Coord.y-8);
768: 60 91 63 00 lds r22, 0x0063
76c: 68 50 subi r22, 0x08 ; 8
76e: 80 91 62 00 lds r24, 0x0062
772: 8f 5f subi r24, 0xFF ; 255
774: 3d df rcall .-390 ; 0x5f0 <ks0108GotoXY>
776: 0b c0 rjmp .+22 ; 0x78e <ks0108WriteData+0xc6>
} else {
if(ks0108Inverted)
778: 80 91 60 00 lds r24, 0x0060
77c: 81 11 cpse r24, r1
data = ~data;
77e: 00 95 com r16
LCD_DATA_OUT = data; // write data
780: 02 bb out 0x12, r16 ; 18
ks0108Enable(); // enable
782: 04 df rcall .-504 ; 0x58c <ks0108Enable>
ks0108Coord.x++;
784: 80 91 62 00 lds r24, 0x0062
788: 8f 5f subi r24, 0xFF ; 255
78a: 80 93 62 00 sts 0x0062, r24
}
LCD_DATA_OUT = 0x00;
78e: 12 ba out 0x12, r1 ; 18
790: df 91 pop r29
792: cf 91 pop r28
794: 1f 91 pop r17
796: 0f 91 pop r16
798: ff 90 pop r15
79a: ef 90 pop r14
79c: 08 95 ret
0000079e <ks0108PutChar>:
79e: 3f 92 push r3
7a0: 4f 92 push r4
7a2: 5f 92 push r5
7a4: 6f 92 push r6
7a6: 7f 92 push r7
7a8: 8f 92 push r8
7aa: 9f 92 push r9
7ac: af 92 push r10
7ae: bf 92 push r11
7b0: cf 92 push r12
7b2: df 92 push r13
7b4: ef 92 push r14
7b6: ff 92 push r15
7b8: 0f 93 push r16
7ba: 1f 93 push r17
7bc: cf 93 push r28
7be: df 93 push r29
7c0: 08 2f mov r16, r24
7c2: 80 91 67 00 lds r24, 0x0067
7c6: 90 91 68 00 lds r25, 0x0068
7ca: e0 91 65 00 lds r30, 0x0065
7ce: f0 91 66 00 lds r31, 0x0066
7d2: 03 96 adiw r24, 0x03 ; 3
7d4: 09 95 icall
7d6: f8 2e mov r15, r24
7d8: 80 91 67 00 lds r24, 0x0067
7dc: 90 91 68 00 lds r25, 0x0068
7e0: e0 91 65 00 lds r30, 0x0065
7e4: f0 91 66 00 lds r31, 0x0066
7e8: 04 96 adiw r24, 0x04 ; 4
7ea: 09 95 icall
7ec: 18 2f mov r17, r24
7ee: 80 91 67 00 lds r24, 0x0067
7f2: 90 91 68 00 lds r25, 0x0068
7f6: e0 91 65 00 lds r30, 0x0065
7fa: f0 91 66 00 lds r31, 0x0066
7fe: 05 96 adiw r24, 0x05 ; 5
800: 09 95 icall
802: c8 2e mov r12, r24
804: 70 90 62 00 lds r7, 0x0062
808: 30 90 63 00 lds r3, 0x0063
80c: 01 17 cp r16, r17
80e: 08 f4 brcc .+2 ; 0x812 <ks0108PutChar+0x74>
810: 97 c0 rjmp .+302 ; 0x940 <ks0108PutChar+0x1a2>
812: 20 2f mov r18, r16
814: 33 27 eor r19, r19
816: 41 2f mov r20, r17
818: 48 0f add r20, r24
81a: 51 2d mov r21, r1
81c: 51 1d adc r21, r1
81e: 24 17 cp r18, r20
820: 35 07 cpc r19, r21
822: 0c f0 brlt .+2 ; 0x826 <ks0108PutChar+0x88>
824: 8d c0 rjmp .+282 ; 0x940 <ks0108PutChar+0x1a2>
826: d0 2e mov r13, r16
828: d1 1a sub r13, r17
82a: c0 e0 ldi r28, 0x00 ; 0
82c: d0 e0 ldi r29, 0x00 ; 0
82e: 10 e0 ldi r17, 0x00 ; 0
830: 08 c0 rjmp .+16 ; 0x842 <ks0108PutChar+0xa4>
832: 21 0f add r18, r17
834: 31 1d adc r19, r1
836: c9 01 movw r24, r18
838: 06 96 adiw r24, 0x06 ; 6
83a: 09 95 icall
83c: c8 0f add r28, r24
83e: d1 1d adc r29, r1
840: 1f 5f subi r17, 0xFF ; 255
842: 20 91 67 00 lds r18, 0x0067
846: 30 91 68 00 lds r19, 0x0068
84a: e0 91 65 00 lds r30, 0x0065
84e: f0 91 66 00 lds r31, 0x0066
852: 1d 15 cp r17, r13
854: 71 f7 brne .-36 ; 0x832 <ks0108PutChar+0x94>
856: ef 2c mov r14, r15
858: ff 24 eor r15, r15
85a: c7 01 movw r24, r14
85c: 07 96 adiw r24, 0x07 ; 7
85e: 68 e0 ldi r22, 0x08 ; 8
860: 70 e0 ldi r23, 0x00 ; 0
862: 8e d4 rcall .+2332 ; 0x1180 <__divmodhi4>
864: 46 2e mov r4, r22
866: 55 24 eor r5, r5
868: c4 9d mul r28, r4
86a: 80 01 movw r16, r0
86c: c5 9d mul r28, r5
86e: 10 0d add r17, r0
870: d4 9d mul r29, r4
872: 10 0d add r17, r0
874: 11 24 eor r1, r1
876: 8c 2d mov r24, r12
878: 99 27 eor r25, r25
87a: 06 96 adiw r24, 0x06 ; 6
87c: 08 0f add r16, r24
87e: 19 1f adc r17, r25
880: 2d 0d add r18, r13
882: 31 1d adc r19, r1
884: c9 01 movw r24, r18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -