📄 demo.lst
字号:
< .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
//----------------------------------------------------------------------------*/
00000001 .RAM
00000001 00 00 LcdYear: .DW 0;
00000002 00 00 LcdMonDayHr: .DW 0;
00000003 00 00 LcdMinSec: .DW 0;
00000004 00 00 TwoHzIntFlag: .DW 0;
00000005 00 00 GlobalFlag1: .DW 0;
.const B_KeyReady = 0x0001;
//----------------------------------------------------------------------------*/
00000006 00 00 KeyScan512HzTmr: .DW 0;
00000007 00 00 KeyScanFlag: .DW 0;
00000008 00 00 KeyIntFlag: .DW 0;
00000009 00 00 00 00 KeyStatusBuf: .DW 8 DUP(0);
00 00 00 00
00 00 00 00
00 00 00 00
//----------------------------------------------------------------------------*/
00000011 00 00 Year: .DW 0;
00000012 00 00 MonDayHr: .DW 0;
00000013 00 00 MinSec: .DW 0;
00000014 00 00 BatLevel: .DW 0;
00000015 00 00 CidCnt: .DW 0;
//----------------------------------------------------------------------------*/
.const StackBottom = 0x03FF;
//----------------------------------------------------------------------------*/
0000506C .code
.public _main;
_main:
0000506C 40 F1 INT OFF; //Disable Interrupt
0000506D 40 92 R1 = 0;
0000506E 19 D3 12 70 [P_WakeUp] = R1; //disable all wakeup sources
00005070 19 D3 10 70 [P_Int] = R1;
00005072 09 93 AA 55 R1 = 0x55AA; //clear Watchdog
00005074 19 D3 16 70 [P_Watchdog_Clr] = R1;
00005076 08 91 FF 03 SP = StackBottom; //initialize stack
00005078 09 93 5D C0 R1 = B_8KHz+B_512Hz+B_128Hz+B_2Hz+B_Enable32768+B_Strong32768;
0000507A 19 D3 18 70 [P_TimeBaseSet] = R1; // it's very important to keep 32KHz
// crystal running in strong mode
0000507C 11 93 13 70 R1 = [P_WakeUpClr];
0000507E 19 D3 13 70 [P_WakeUpClr] = R1; //clear all wakeup hardware flags
00005080 42 92 R1 = B_NormalCpuClock;
00005081 19 D3 15 70 [P_SystemClock] = R1; // 1MHz/4 - for normal operation
00005083 40 F0 B6 50 CALL F_InitHardWare; //reset hardware
00005085 40 F0 F8 50 CALL F_ClrAllSRAM;
00005087 09 93 D5 07 R1 = 2005; //initialize date and time
00005089 19 D3 11 00 [Year] = R1;
0000508B 09 93 20 04 R1 = 1*1024 + 1*32;
0000508D 19 D3 12 00 [MonDayHr] = R1;
0000508F 40 92 R1 = 0;
00005090 19 D3 13 00 [MinSec] = R1;
00005092 09 93 00 70 R1 = 0x7000;
00005094 19 D3 14 00 [BatLevel] = R1;
00005096 40 F0 FF 50 CALL F_InitLcd; //clear LCD dots, turn on LCD and
// set LCD contrast
00005098 40 F0 2C 52 CALL F_InitDisplay;
0000509A 11 93 11 70 R1 = [P_IntClr];
0000509C 19 D3 11 70 [P_IntClr] = R1; //clear all interrupt requirement
0000509E 09 93 A2 00 R1 = B_512HzInt+B_2HzInt+B_IoaInt;
000050A0 19 D3 10 70 [P_Int] = R1; //set interrupt sources
000050A2 43 F1 INT FIQ,IRQ;
//----------------------------------------------------------------------------------------
MainLoop:
000050A3 09 93 AA 55 R1 = 0x55AA; //Clear Watchdog
000050A5 19 D3 16 70 [P_Watchdog_Clr] = R1;
000050A7 40 F0 11 51 CALL F_KeyScan; //scan keyboard
000050A9 11 93 04 00 R1 = [TwoHzIntFlag];
000050AB 49 5E JZ MainLoop;
000050AC 40 92 R1 = 0;
000050AD 19 D3 04 00 [TwoHzIntFlag] = R1;
000050AF 11 93 06 71 R1 = [P_Seg6];
000050B1 09 83 00 01 R1 ^= B_Com8; //blinking colon ":"
000050B3 19 D3 06 71 [P_Seg6] = R1;
000050B5 53 EE JMP MainLoop;
//////////////////////////////////////////////////////////////////////////////////////////
// Functions for Main Program
//////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------//
F_InitHardWare:
000050B6 40 92 R1 = 0;
000050B7 19 D3 00 70 [P_IOA_Data] = R1;
000050B9 19 D3 02 70 [P_IOA_Dir] = R1;
000050BB 19 D3 14 70 [P_IoaWakeUp] = R1;
000050BD 09 93 00 80 R1 = 0x8000; //Enable IOA7 internal Pull-high resistor
000050BF 19 D3 03 70 [P_IOA_PullR] = R1;
000050C1 40 92 R1 = 0;
000050C2 19 D3 05 70 [P_IOB_Data] = R1;
000050C4 09 93 FF 00 R1 = 0x00FF;
000050C6 19 D3 07 70 [P_IOB_Dir] = R1;
000050C8 40 92 R1 = 0;
000050C9 19 D3 08 70 [P_IOC_Data] = R1;
000050CB 09 93 FF 00 R1 = 0x00FF;
000050CD 19 D3 0A 70 [P_IOC_Dir] = R1;
000050CF 40 92 R1 = 0;
000050D0 19 D3 0B 70 [P_IOD_Data] = R1;
000050D2 09 93 FF 00 R1 = 0x00FF;
000050D4 19 D3 0D 70 [P_IOD_Dir] = R1;
000050D6 4F 92 R1 = 0x000F; //IOC0 & IOC1 provide interrupt/wakeup
000050D7 19 D3 0E 70 [P_IOCD_Ctrl] = R1; // at both rising & falling edges
000050D9 40 92 R1 = 0;
000050DA 19 D3 21 70 [P_BatDet] = R1;
000050DC 19 D3 26 70 [P_AdcCtrl] = R1;
000050DE 19 D3 25 70 [P_AgcCtrl] = R1;
000050E0 19 D3 2C 70 [P_PgaInSelect] = R1;
000050E2 19 D3 1A 70 [P_Tmr_Ctrl] = R1;
000050E4 19 D3 22 70 [P_DtmfTone] = R1;
000050E6 19 D3 23 70 [P_Ch0Envelope] = R1;
// [P_KeyScanCtrl] = R1; //disable Key-Scan funcion that
// [P_KeyScanMode] = R1; // share pins with LCD segments
// [P_KeyScanPort] = R1;
000050E8 19 D3 28 70 [P_RiDet] = R1;
000050EA 19 D3 2E 70 [P_LineDetCtrl] = R1;
000050EC 09 93 80 00 R1 = 0x0080; //Enable Auto Key Scan
000050EE 19 D3 3B 70 [P_KeyScanCtrl] = R1;
000050F0 09 93 7F 00 R1 = 0x007F; //IOA0~6 serve as Key Input port
000050F2 19 D3 3A 70 [P_KeyScanMode] = R1;
000050F4 40 92 R1 = 0;
000050F5 19 D3 3C 70 [P_KeyScanPort] = R1;
000050F7 90 9A RETF;
//----------------------------------------------------------------------------------------
F_ClrAllSRAM:
000050F8 40 9A BP = 0;
000050F9 40 92 R1 = 0;
ClrSRAMLoop:
000050FA D5 D2 [BP++] = R1;
000050FB 0D 4B FF 03 CMP BP,0x03FF;
000050FD 44 4E JNZ ClrSRAMLoop;
000050FE 90 9A RETF;
//----------------------------------------------------------------------------*/
F_InitLcd:
000050FF 40 F0 06 51 CALL F_ClrLcd; //clear all Lcd dots
00005101 09 93 8F 80 R1 = B_Duty+B_LcdEn + 0x000F;
00005103 19 D3 20 70 [P_LcdCtrl] = R1;
00005105 90 9A RETF;
F_ClrLcd:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -