📄 cid.lst
字号:
< .const B_Com11 = 0x0800
< .const B_Com12 = 0x1000
< .const B_Com13 = 0x2000
< .const B_Com14 = 0x4000
< .const B_Com15 = 0x8000;
<
< .const P_Seg0 = 0x7100;
< .const P_Seg1 = 0x7101;
< .const P_Seg2 = 0x7102;
< .const P_Seg3 = 0x7103;
< .const P_Seg4 = 0x7104;
< .const P_Seg5 = 0x7105;
< .const P_Seg6 = 0x7106;
< .const P_Seg7 = 0x7107;
< .const P_Seg8 = 0x7108;
< .const P_Seg9 = 0x7109;
< .const P_Seg10 = 0x710A;
< .const P_Seg11 = 0x710B;
< .const P_Seg12 = 0x710C;
< .const P_Seg13 = 0x710D;
< .const P_Seg14 = 0x710E;
< .const P_Seg15 = 0x710F;
< .const P_Seg16 = 0x7110;
< .const P_Seg17 = 0x7111;
< .const P_Seg18 = 0x7112;
< .const P_Seg19 = 0x7113;
< .const P_Seg20 = 0x7114;
< .const P_Seg21 = 0x7115;
< .const P_Seg22 = 0x7116;
< .const P_Seg23 = 0x7117;
< .const P_Seg24 = 0x7118;
< .const P_Seg25 = 0x7119;
< .const P_Seg26 = 0x711A;
< .const P_Seg27 = 0x711B;
< .const P_Seg28 = 0x711C
< .const P_Seg29 = 0x711D
< .const P_Seg30 = 0x711E
< .const P_Seg31 = 0x711F
< .const P_Seg32 = 0x7120
< .const P_Seg33 = 0x7121
< .const P_Seg34 = 0x7122
< .const P_Seg35 = 0x7123
< .const P_Seg36 = 0x7124
< .const P_Seg37 = 0x7125
< .const P_Seg38 = 0x7126
< .const P_Seg39 = 0x7127
<
< //-----------------------------------------------------------------------------//
< //Line Control
< //Procedure : 1. Enable Line det.
< // 2. Latch line status
< // 3. Enable wakeup/int
< // 4. Set wakeup/int sources
< // 5. Sleep....
< //-----------------------------------------------------------------------------//
< .const P_LineDetCtrl = 0x702E; //(R/W)
<
< .const B_CMPOut = 0x0001; //
< .const B_EnLineIntWp = 0x0040; //
< .const B_EnLineDet = 0x0080; //
<
< .const P_LatchLine = 0x702F; //
<
< //-----------------------------------------------------------------------------//
< .const P_KeyScanCtrl = 0x703B;
< .const B_AKSEN = 0x0080; //0/1 - disable/enable auto key scan function
< .const B_HIZ1 = 0x0002; //0/1 - disable/enable normal key scan mode of P_Seg15~8
< .const B_HIZ0 = 0x0001; //0/1 - disable/enable normal key scan mode of P_Seg7~0
<
< .const P_KeyScanMode = 0x703A; //b0~b8 select IOAx as wakeup source
< .const P_KeyScanPort = 0x703C; //maually scan key
.include Display.ASM
< //-----------------------------------------------------------------------
< //Program Name: LcdDisplay.asm
< //Applied Body: SPT6604A
< //Project Description: This is a Demo of Display in SPT6604A
< //Compile: Sunplus u'nSP IDE
< //Programmer: WangXu
< //Current Version: 1.0
< //Write Date: 2002/10/30
< //-----------------------------------------------------------------------
< .const P_ColonSeg = P_Seg24
< .const B_ColonCom = B_Com7
< .const P_OutOfAreaSeg = P_Seg8
< .const B_OutOfAreaCom = B_Com3
< .const P_PrivateSeg = P_Seg10
< .const B_PrivateCom = B_Com3
< .const P_MessageSeg = P_Seg14
< .const B_MessageCom = B_Com3
< //-----------------------------------------------------------------------
00008BC0 < .code
< F_ShowMessageFlag:
00008BC0 11 93 0E 71 < r1 = [P_MessageSeg]
00008BC2 48 A2 < r1|= B_MessageCom
00008BC3 19 D3 0E 71 < [P_MessageSeg] = r1
00008BC5 90 9A < retf
< //-----------------------------------------------------------------------
< F_ClrMessageFlag:
00008BC6 11 93 0E 71 < r1 = [P_MessageSeg]
00008BC8 09 B3 F7 FF < r1&= 0xffff-B_MessageCom
00008BCA 19 D3 0E 71 < [P_MessageSeg] = r1
00008BCC 90 9A < retf
< //-----------------------------------------------------------------------
< F_ShowOutOfAreaFlag:
00008BCD 11 93 08 71 < r1 = [P_OutOfAreaSeg]
00008BCF 48 A2 < r1|= B_OutOfAreaCom
00008BD0 19 D3 08 71 < [P_OutOfAreaSeg] = r1
00008BD2 90 9A < retf
< //-----------------------------------------------------------------------
< F_ShowPrivateFlag:
00008BD3 11 93 0A 71 < r1 = [P_PrivateSeg]
00008BD5 48 A2 < r1|= B_PrivateCom
00008BD6 19 D3 0A 71 < [P_PrivateSeg] = r1
00008BD8 90 9A < retf
< //-----------------------------------------------------------------------
< F_ShowCidNumber:
00008BD9 12 95 00 71 < R2 = [P_Seg0];
00008BDB 0A A5 80 00 < R2 |= B_Com7;
00008BDD 1A D5 00 71 < [P_Seg0] = R2;
<
00008BDF 01 95 < R2 = R1;
00008BE0 0A 45 63 00 < CMP R2,99;
00008BE2 03 8E < JBE NotOverflow;
00008BE3 49 92 < R1 = 9;
00008BE4 49 94 < R2 = 9;
00008BE5 06 EE < JMP BCD_OK;
<
< NotOverflow:
00008BE6 40 92 < R1 = 0;
< ConvertToBCD:
00008BE7 4A 44 < CMP R2,10;
00008BE8 03 0E < JB BCD_OK;
00008BE9 4A 24 < R2 -= 10;
00008BEA 41 02 < R1 += 1;
00008BEB 45 EE < JMP ConvertToBCD;
<
< BCD_OK:
00008BEC 40 42 < CMP R1,0;
00008BED 01 4E < JNZ BCD_OK1;
00008BEE 4A 92 < R1 = 0x000A;
< BCD_OK1:
00008BEF 40 44 < CMP R2,0;
00008BF0 01 4E < JNZ BCD_OK2;
00008BF1 4A 94 < R2 = 0x000A;
< BCD_OK2:
00008BF2 0D 9B B5 8D < BP = TB_SerialNumber;
00008BF4 40 F0 3B 8C < CALL F_ShowDigit;
00008BF6 02 93 < R1 = R2;
00008BF7 80 FE 3B 8C < GoTo F_ShowDigit;
<
< //-----------------------------------------------------------------------
< F_ShowMonthDay:
00008BF9 0D 9B B0 8D < bp = TW_MonthDay
< ?L_ShowMontDayLoop:
00008BFB D5 92 < r1 = [bp++]
00008BFC 05 5E < jz ?L_ShowFlagOver
00008BFD D5 96 < r3 = [bp++]
00008BFE C1 98 < r4 = [r1]
00008BFF 03 A9 < r4|= r3
00008C00 C1 D8 < [r1] = r4
00008C01 47 EE < jmp ?L_ShowMontDayLoop
< ?L_ShowFlagOver:
00008C02 90 9A < retf
< //-----------------------------------------------------------------------
< F_ShowTime:
00008C03 0D 9B 74 8D < bp = TW_DigitTime
00008C05 12 95 C3 00 < r2 = [RW_Time]
00008C07 0A C5 00 0F < test r2,0x0f00
00008C09 02 4E < jnz ?L_HourLowOk
00008C0A 0A A5 00 0A < r2|= 0x0a00
< ?L_HourLowOk:
00008C0C 0A C5 F0 00 < test r2,0x00f0
00008C0E 02 4E < jnz ?L_MinuteHighOk
00008C0F 0A A5 A0 00 < r2|= 0x00a0
< ?L_MinuteHighOk:
00008C11 4F C4 < test r2,0x000f
00008C12 01 4E < jnz ?L_MinuteLowOk
00008C13 4A A4 < r2|= 0x000a
< ?L_MinuteLowOk:
00008C14 12 EE < jmp L_ShowTwoDigit
< F_ShowDate:
00008C15 0D 9B 38 8D < bp = TW_DigitDate
00008C17 12 95 C2 00 < r2 = [RW_Date]
00008C19 0A C5 00 F0 < test r2,0xf000
00008C1B 05 5E < jz ?L_MonthLowOk
00008C1C 0A C5 00 0F < test r2,0x0f00
00008C1E 02 4E < jnz ?L_MonthLowOk
00008C1F 0A A5 00 0A < r2 |= 0x0a00
< ?L_MonthLowOk:
00008C21 0A C5 F0 00 < test r2,0x00f0
00008C23 03 5E < jz L_ShowTwoDigit
00008C24 4F C4 < test r2,0x000f
00008C25 01 4E < jnz L_ShowTwoDigit
00008C26 4A A4 < r2|= 0x000a
< L_ShowTwoDigit:
00008C27 7A 93 < r1 = r2 lsr 4
00008C28 79 93 < r1 = r1 lsr 4
00008C29 79 93 < r1 = r1 lsr 4
00008C2A 4F B2 < r1 = r1&0x000f
00008C2B 40 F0 3B 8C < call F_ShowDigit
00008C2D 7A 93 < r1 = r2 lsr 4
00008C2E 79 93 < r1 = r1 lsr 4
00008C2F 4F B2 < r1 = r1&0x000f
00008C30 40 F0 3B 8C < call F_ShowDigit
00008C32 7A 93 < r1 = r2 lsr 4
00008C33 4F B2 < r1 = r1&0x000f
00008C34 40 F0 3B 8C < call F_ShowDigit
00008C36 0A B3 0F 00 < r1 = r2&0x000f
00008C38 40 F0 3B 8C < call F_ShowDigit
00008C3A 90 9A < retf
< //-----------------------------------------------------------------------
< F_ShowDigit:
00008C3B 09 09 56 8C < R4 = R1+TB_Pattern0
00008C3D C4 92 < R1 = [R4] //Get pattern of corresponding number
< ?L_ShowPointLoop:
00008C3E D5 98 < R4 = [BP++] //Get display buffer address of current dot
00008C3F 0D 5E < JZ ?L_ShowDigitOver//Digital display dots is over, subrotine over
00008C40 C4 96 < R3 = [R4] //Get display buffer content of current dot
00008C41 CD 98 < R4 = [BP--] //Get bit map in display buffer of current dot
00008C42 04 A7 < R3|= R4 //Set bit of current dot
00008C43 41 C2 < TEST R1,0x0001 //Test if current dot is display
00008C44 03 4E < JNZ ?L_ShowDigit_30 //Yes, Display buffer content is Ok
00008C45 0C 89 FF 00 < R4^= 0x00FF //No, clear the bit
00008C47 04 B7 < R3&= R4
< ?L_ShowDigit_30:
00008C48 D5 98 < R4 = [BP++] //Get display buffer address
00008C49 C4 D6 < [R4] = R3 //Put prepared content into the buffer
00008C4A 41 0A < BP+= 0x0001 //Skip bit map of current dot
00008C4B 61 93 < R1 = R1 LSR 1 //shift pattern register so that next
< //dot can be test in next loop
00008C4C 4F EE < JMP ?L_ShowPointLoop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -