diff options
Diffstat (limited to 'demo/keypad_display.asm')
-rw-r--r-- | demo/keypad_display.asm | 624 |
1 files changed, 624 insertions, 0 deletions
diff --git a/demo/keypad_display.asm b/demo/keypad_display.asm new file mode 100644 index 0000000..a216cbe --- /dev/null +++ b/demo/keypad_display.asm @@ -0,0 +1,624 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 2.9.0 #5416 (Oct 6 2009) (UNIX) +; This file was generated Tue Oct 27 23:03:55 2009 +;-------------------------------------------------------- + .module keypad_display + .optsdcc -mmcs51 --model-small + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _main + .globl _CY + .globl _AC + .globl _F0 + .globl _RS1 + .globl _RS0 + .globl _OV + .globl _F1 + .globl _P + .globl _PS + .globl _PT1 + .globl _PX1 + .globl _PT0 + .globl _PX0 + .globl _RD + .globl _WR + .globl _T1 + .globl _T0 + .globl _INT1 + .globl _INT0 + .globl _TXD + .globl _RXD + .globl _P3_7 + .globl _P3_6 + .globl _P3_5 + .globl _P3_4 + .globl _P3_3 + .globl _P3_2 + .globl _P3_1 + .globl _P3_0 + .globl _EA + .globl _ES + .globl _ET1 + .globl _EX1 + .globl _ET0 + .globl _EX0 + .globl _P2_7 + .globl _P2_6 + .globl _P2_5 + .globl _P2_4 + .globl _P2_3 + .globl _P2_2 + .globl _P2_1 + .globl _P2_0 + .globl _SM0 + .globl _SM1 + .globl _SM2 + .globl _REN + .globl _TB8 + .globl _RB8 + .globl _TI + .globl _RI + .globl _P1_7 + .globl _P1_6 + .globl _P1_5 + .globl _P1_4 + .globl _P1_3 + .globl _P1_2 + .globl _P1_1 + .globl _P1_0 + .globl _TF1 + .globl _TR1 + .globl _TF0 + .globl _TR0 + .globl _IE1 + .globl _IT1 + .globl _IE0 + .globl _IT0 + .globl _P0_7 + .globl _P0_6 + .globl _P0_5 + .globl _P0_4 + .globl _P0_3 + .globl _P0_2 + .globl _P0_1 + .globl _P0_0 + .globl _B + .globl _ACC + .globl _PSW + .globl _IP + .globl _P3 + .globl _IE + .globl _P2 + .globl _SBUF + .globl _SCON + .globl _P1 + .globl _TH1 + .globl _TH0 + .globl _TL1 + .globl _TL0 + .globl _TMOD + .globl _TCON + .globl _PCON + .globl _DPH + .globl _DPL + .globl _SP + .globl _P0 + .globl _row + .globl _state +;-------------------------------------------------------- +; special function registers +;-------------------------------------------------------- + .area RSEG (DATA) +G$P0$0$0 == 0x0080 +_P0 = 0x0080 +G$SP$0$0 == 0x0081 +_SP = 0x0081 +G$DPL$0$0 == 0x0082 +_DPL = 0x0082 +G$DPH$0$0 == 0x0083 +_DPH = 0x0083 +G$PCON$0$0 == 0x0087 +_PCON = 0x0087 +G$TCON$0$0 == 0x0088 +_TCON = 0x0088 +G$TMOD$0$0 == 0x0089 +_TMOD = 0x0089 +G$TL0$0$0 == 0x008a +_TL0 = 0x008a +G$TL1$0$0 == 0x008b +_TL1 = 0x008b +G$TH0$0$0 == 0x008c +_TH0 = 0x008c +G$TH1$0$0 == 0x008d +_TH1 = 0x008d +G$P1$0$0 == 0x0090 +_P1 = 0x0090 +G$SCON$0$0 == 0x0098 +_SCON = 0x0098 +G$SBUF$0$0 == 0x0099 +_SBUF = 0x0099 +G$P2$0$0 == 0x00a0 +_P2 = 0x00a0 +G$IE$0$0 == 0x00a8 +_IE = 0x00a8 +G$P3$0$0 == 0x00b0 +_P3 = 0x00b0 +G$IP$0$0 == 0x00b8 +_IP = 0x00b8 +G$PSW$0$0 == 0x00d0 +_PSW = 0x00d0 +G$ACC$0$0 == 0x00e0 +_ACC = 0x00e0 +G$B$0$0 == 0x00f0 +_B = 0x00f0 +;-------------------------------------------------------- +; special function bits +;-------------------------------------------------------- + .area RSEG (DATA) +G$P0_0$0$0 == 0x0080 +_P0_0 = 0x0080 +G$P0_1$0$0 == 0x0081 +_P0_1 = 0x0081 +G$P0_2$0$0 == 0x0082 +_P0_2 = 0x0082 +G$P0_3$0$0 == 0x0083 +_P0_3 = 0x0083 +G$P0_4$0$0 == 0x0084 +_P0_4 = 0x0084 +G$P0_5$0$0 == 0x0085 +_P0_5 = 0x0085 +G$P0_6$0$0 == 0x0086 +_P0_6 = 0x0086 +G$P0_7$0$0 == 0x0087 +_P0_7 = 0x0087 +G$IT0$0$0 == 0x0088 +_IT0 = 0x0088 +G$IE0$0$0 == 0x0089 +_IE0 = 0x0089 +G$IT1$0$0 == 0x008a +_IT1 = 0x008a +G$IE1$0$0 == 0x008b +_IE1 = 0x008b +G$TR0$0$0 == 0x008c +_TR0 = 0x008c +G$TF0$0$0 == 0x008d +_TF0 = 0x008d +G$TR1$0$0 == 0x008e +_TR1 = 0x008e +G$TF1$0$0 == 0x008f +_TF1 = 0x008f +G$P1_0$0$0 == 0x0090 +_P1_0 = 0x0090 +G$P1_1$0$0 == 0x0091 +_P1_1 = 0x0091 +G$P1_2$0$0 == 0x0092 +_P1_2 = 0x0092 +G$P1_3$0$0 == 0x0093 +_P1_3 = 0x0093 +G$P1_4$0$0 == 0x0094 +_P1_4 = 0x0094 +G$P1_5$0$0 == 0x0095 +_P1_5 = 0x0095 +G$P1_6$0$0 == 0x0096 +_P1_6 = 0x0096 +G$P1_7$0$0 == 0x0097 +_P1_7 = 0x0097 +G$RI$0$0 == 0x0098 +_RI = 0x0098 +G$TI$0$0 == 0x0099 +_TI = 0x0099 +G$RB8$0$0 == 0x009a +_RB8 = 0x009a +G$TB8$0$0 == 0x009b +_TB8 = 0x009b +G$REN$0$0 == 0x009c +_REN = 0x009c +G$SM2$0$0 == 0x009d +_SM2 = 0x009d +G$SM1$0$0 == 0x009e +_SM1 = 0x009e +G$SM0$0$0 == 0x009f +_SM0 = 0x009f +G$P2_0$0$0 == 0x00a0 +_P2_0 = 0x00a0 +G$P2_1$0$0 == 0x00a1 +_P2_1 = 0x00a1 +G$P2_2$0$0 == 0x00a2 +_P2_2 = 0x00a2 +G$P2_3$0$0 == 0x00a3 +_P2_3 = 0x00a3 +G$P2_4$0$0 == 0x00a4 +_P2_4 = 0x00a4 +G$P2_5$0$0 == 0x00a5 +_P2_5 = 0x00a5 +G$P2_6$0$0 == 0x00a6 +_P2_6 = 0x00a6 +G$P2_7$0$0 == 0x00a7 +_P2_7 = 0x00a7 +G$EX0$0$0 == 0x00a8 +_EX0 = 0x00a8 +G$ET0$0$0 == 0x00a9 +_ET0 = 0x00a9 +G$EX1$0$0 == 0x00aa +_EX1 = 0x00aa +G$ET1$0$0 == 0x00ab +_ET1 = 0x00ab +G$ES$0$0 == 0x00ac +_ES = 0x00ac +G$EA$0$0 == 0x00af +_EA = 0x00af +G$P3_0$0$0 == 0x00b0 +_P3_0 = 0x00b0 +G$P3_1$0$0 == 0x00b1 +_P3_1 = 0x00b1 +G$P3_2$0$0 == 0x00b2 +_P3_2 = 0x00b2 +G$P3_3$0$0 == 0x00b3 +_P3_3 = 0x00b3 +G$P3_4$0$0 == 0x00b4 +_P3_4 = 0x00b4 +G$P3_5$0$0 == 0x00b5 +_P3_5 = 0x00b5 +G$P3_6$0$0 == 0x00b6 +_P3_6 = 0x00b6 +G$P3_7$0$0 == 0x00b7 +_P3_7 = 0x00b7 +G$RXD$0$0 == 0x00b0 +_RXD = 0x00b0 +G$TXD$0$0 == 0x00b1 +_TXD = 0x00b1 +G$INT0$0$0 == 0x00b2 +_INT0 = 0x00b2 +G$INT1$0$0 == 0x00b3 +_INT1 = 0x00b3 +G$T0$0$0 == 0x00b4 +_T0 = 0x00b4 +G$T1$0$0 == 0x00b5 +_T1 = 0x00b5 +G$WR$0$0 == 0x00b6 +_WR = 0x00b6 +G$RD$0$0 == 0x00b7 +_RD = 0x00b7 +G$PX0$0$0 == 0x00b8 +_PX0 = 0x00b8 +G$PT0$0$0 == 0x00b9 +_PT0 = 0x00b9 +G$PX1$0$0 == 0x00ba +_PX1 = 0x00ba +G$PT1$0$0 == 0x00bb +_PT1 = 0x00bb +G$PS$0$0 == 0x00bc +_PS = 0x00bc +G$P$0$0 == 0x00d0 +_P = 0x00d0 +G$F1$0$0 == 0x00d1 +_F1 = 0x00d1 +G$OV$0$0 == 0x00d2 +_OV = 0x00d2 +G$RS0$0$0 == 0x00d3 +_RS0 = 0x00d3 +G$RS1$0$0 == 0x00d4 +_RS1 = 0x00d4 +G$F0$0$0 == 0x00d5 +_F0 = 0x00d5 +G$AC$0$0 == 0x00d6 +_AC = 0x00d6 +G$CY$0$0 == 0x00d7 +_CY = 0x00d7 +;-------------------------------------------------------- +; overlayable register banks +;-------------------------------------------------------- + .area REG_BANK_0 (REL,OVR,DATA) + .ds 8 +;-------------------------------------------------------- +; internal ram data +;-------------------------------------------------------- + .area DSEG (DATA) +G$state$0$0==. +_state:: + .ds 1 +G$row$0$0==. +_row:: + .ds 2 +;-------------------------------------------------------- +; overlayable items in internal ram +;-------------------------------------------------------- + .area OSEG (OVR,DATA) +;-------------------------------------------------------- +; Stack segment in internal ram +;-------------------------------------------------------- + .area SSEG (DATA) +__start__stack: + .ds 1 + +;-------------------------------------------------------- +; indirectly addressable internal ram data +;-------------------------------------------------------- + .area ISEG (DATA) +;-------------------------------------------------------- +; absolute internal ram data +;-------------------------------------------------------- + .area IABS (ABS,DATA) + .area IABS (ABS,DATA) +;-------------------------------------------------------- +; bit data +;-------------------------------------------------------- + .area BSEG (BIT) +;-------------------------------------------------------- +; paged external ram data +;-------------------------------------------------------- + .area PSEG (PAG,XDATA) +;-------------------------------------------------------- +; external ram data +;-------------------------------------------------------- + .area XSEG (XDATA) +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area XABS (ABS,XDATA) +;-------------------------------------------------------- +; external initialized ram data +;-------------------------------------------------------- + .area XISEG (XDATA) + .area HOME (CODE) + .area GSINIT0 (CODE) + .area GSINIT1 (CODE) + .area GSINIT2 (CODE) + .area GSINIT3 (CODE) + .area GSINIT4 (CODE) + .area GSINIT5 (CODE) + .area GSINIT (CODE) + .area GSFINAL (CODE) + .area CSEG (CODE) +;-------------------------------------------------------- +; interrupt vector +;-------------------------------------------------------- + .area HOME (CODE) +__interrupt_vect: + ljmp __sdcc_gsinit_startup +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME (CODE) + .area GSINIT (CODE) + .area GSFINAL (CODE) + .area GSINIT (CODE) + .globl __sdcc_gsinit_startup + .globl __sdcc_program_startup + .globl __start__stack + .globl __mcs51_genXINIT + .globl __mcs51_genXRAMCLEAR + .globl __mcs51_genRAMCLEAR + .area GSFINAL (CODE) + ljmp __sdcc_program_startup +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME (CODE) + .area HOME (CODE) +__sdcc_program_startup: + lcall _main +; return from main will lock up + sjmp . +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CSEG (CODE) +;------------------------------------------------------------ +;Allocation info for local variables in function 'main' +;------------------------------------------------------------ +;------------------------------------------------------------ + G$main$0$0 ==. + C$keypad_display.c$38$0$0 ==. +; keypad_display.c:38: int main() +; ----------------------------------------- +; function main +; ----------------------------------------- +_main: + ar2 = 0x02 + ar3 = 0x03 + ar4 = 0x04 + ar5 = 0x05 + ar6 = 0x06 + ar7 = 0x07 + ar0 = 0x00 + ar1 = 0x01 + C$keypad_display.c$40$1$1 ==. +; keypad_display.c:40: while(1) { +00123$: + C$keypad_display.c$41$2$2 ==. +; keypad_display.c:41: for(row=0; row<4; row++) { + clr a + mov _row,a + mov (_row + 1),a +00118$: + clr c + mov a,_row + subb a,#0x04 + mov a,(_row + 1) + xrl a,#0x80 + subb a,#0x80 + jnc 00123$ + C$keypad_display.c$42$3$3 ==. +; keypad_display.c:42: P1=keypad[row]; + mov a,_row + add a,#_keypad + mov dpl,a + mov a,(_row + 1) + addc a,#(_keypad >> 8) + mov dph,a + clr a + movc a,@a+dptr + mov _P1,a + C$keypad_display.c$48$3$3 ==. +; keypad_display.c:48: _endasm; + + mov _state, P1 + + C$keypad_display.c$53$3$3 ==. +; keypad_display.c:53: state&=0x0f; + anl _state,#0x0F + C$keypad_display.c$54$3$3 ==. +; keypad_display.c:54: state^=0x0f; + xrl _state,#0x0F + C$keypad_display.c$56$3$3 ==. +; keypad_display.c:56: if(state & 1) { + mov a,_state + jnb acc.0,00111$ + C$keypad_display.c$57$4$4 ==. +; keypad_display.c:57: state=0; + mov _state,#0x00 + sjmp 00112$ +00111$: + C$keypad_display.c$58$3$3 ==. +; keypad_display.c:58: } else if(state & 2) { + mov a,_state + jnb acc.1,00108$ + C$keypad_display.c$59$4$5 ==. +; keypad_display.c:59: state=1; + mov _state,#0x01 + sjmp 00112$ +00108$: + C$keypad_display.c$60$3$3 ==. +; keypad_display.c:60: } else if(state & 4) { + mov a,_state + jnb acc.2,00105$ + C$keypad_display.c$61$4$6 ==. +; keypad_display.c:61: state=2; + mov _state,#0x02 + sjmp 00112$ +00105$: + C$keypad_display.c$62$3$3 ==. +; keypad_display.c:62: } else if(state & 8) { + mov a,_state + jb acc.3,00142$ + ljmp 00120$ +00142$: + C$keypad_display.c$63$4$7 ==. +; keypad_display.c:63: state=3; + mov _state,#0x03 + C$keypad_display.c$65$3$3 ==. +; keypad_display.c:65: continue; +00112$: + C$keypad_display.c$68$3$3 ==. +; keypad_display.c:68: switch(row) { + clr a + cjne a,_row,00143$ + clr a + cjne a,(_row + 1),00143$ + sjmp 00113$ +00143$: + mov a,#0x01 + cjne a,_row,00144$ + clr a + cjne a,(_row + 1),00144$ + sjmp 00114$ +00144$: + mov a,#0x02 + cjne a,_row,00145$ + clr a + cjne a,(_row + 1),00145$ + sjmp 00115$ +00145$: + mov a,#0x03 + cjne a,_row,00146$ + clr a + cjne a,(_row + 1),00146$ + sjmp 00116$ +00146$: + C$keypad_display.c$69$4$9 ==. +; keypad_display.c:69: case 0: + sjmp 00120$ +00113$: + C$keypad_display.c$70$4$9 ==. +; keypad_display.c:70: P3=display_0[state]; + mov a,_state + mov dptr,#_display_0 + movc a,@a+dptr + mov _P3,a + C$keypad_display.c$71$4$9 ==. +; keypad_display.c:71: break; + C$keypad_display.c$72$4$9 ==. +; keypad_display.c:72: case 1: + sjmp 00120$ +00114$: + C$keypad_display.c$73$4$9 ==. +; keypad_display.c:73: P3=display_1[state]; + mov a,_state + mov dptr,#_display_1 + movc a,@a+dptr + mov _P3,a + C$keypad_display.c$74$4$9 ==. +; keypad_display.c:74: break; + C$keypad_display.c$75$4$9 ==. +; keypad_display.c:75: case 2: + sjmp 00120$ +00115$: + C$keypad_display.c$76$4$9 ==. +; keypad_display.c:76: P3=display_2[state]; + mov a,_state + mov dptr,#_display_2 + movc a,@a+dptr + mov _P3,a + C$keypad_display.c$77$4$9 ==. +; keypad_display.c:77: break; + C$keypad_display.c$78$4$9 ==. +; keypad_display.c:78: case 3: + sjmp 00120$ +00116$: + C$keypad_display.c$79$4$9 ==. +; keypad_display.c:79: P3=display_3[state]; + mov a,_state + mov dptr,#_display_3 + movc a,@a+dptr + mov _P3,a + C$keypad_display.c$81$2$2 ==. +; keypad_display.c:81: } +00120$: + C$keypad_display.c$41$2$2 ==. +; keypad_display.c:41: for(row=0; row<4; row++) { + inc _row + clr a + cjne a,_row,00147$ + inc (_row + 1) +00147$: + C$keypad_display.c$84$1$1 ==. + XG$main$0$0 ==. + ljmp 00118$ + .area CSEG (CODE) + .area CONST (CODE) +Fkeypad_display$keypad$0$0 == . +_keypad: + .db #0xEF + .db #0xDF + .db #0xBF + .db #0x7F +Fkeypad_display$display_0$0$0 == . +_display_0: + .db #0xF9 + .db #0x64 + .db #0x70 + .db #0x48 +Fkeypad_display$display_1$0$0 == . +_display_1: + .db #0x59 + .db #0x52 + .db #0x42 + .db #0x40 +Fkeypad_display$display_2$0$0 == . +_display_2: + .db #0xF8 + .db #0x40 + .db #0x50 + .db #0xC6 +Fkeypad_display$display_3$0$0 == . +_display_3: + .db #0x79 + .db #0xC0 + .db #0x49 + .db #0xC0 + .area XINIT (CODE) + .area CABS (ABS,CODE) |