📄 serial.asm
字号:
;--------------------------------------------------------; File Created by SDCC : FreeWare ANSI-C Compiler; Version 2.3.0 Thu Sep 20 10:57:41 2001;-------------------------------------------------------- .module serial .flat24 on ; 24 bit flat addressingdpx = 0x93 ; dpx register unknown to assemblerdps = 0x86 ; dps register unknown to assemblerdpl1 = 0x84 ; dpl1 register unknown to assemblerdph1 = 0x85 ; dph1 register unknown to assemblerdpx1 = 0x95 ; dpx1 register unknown to assemblerap = 0x9C ; ap register unknown to assembler;--------------------------------------------------------; Public variables in this module;-------------------------------------------------------- .globl _serial_getc .globl _serial_putc .globl _serial_interrupt_handler .globl _serial_init;--------------------------------------------------------; special function registers;--------------------------------------------------------_P0 = 0x0080_SP = 0x0081_DPL = 0x0082_DPH = 0x0083_PCON = 0x0087_TCON = 0x0088_TMOD = 0x0089_TL0 = 0x008a_TL1 = 0x008b_TH0 = 0x008c_TH1 = 0x008d_P1 = 0x0090_SCON = 0x0098_SBUF = 0x0099_P2 = 0x00a0_IE = 0x00a8_P3 = 0x00b0_IP = 0x00b8_PSW = 0x00d0_ACC = 0x00e0_B = 0x00f0_T2CON = 0x00c8_RCAP2L = 0x00ca_RCAP2H = 0x00cb_TL2 = 0x00cc_TH2 = 0x00cd;--------------------------------------------------------; special function bits ;--------------------------------------------------------_P0_0 = 0x0080_P0_1 = 0x0081_P0_2 = 0x0082_P0_3 = 0x0083_P0_4 = 0x0084_P0_5 = 0x0085_P0_6 = 0x0086_P0_7 = 0x0087_IT0 = 0x0088_IE0 = 0x0089_IT1 = 0x008a_IE1 = 0x008b_TR0 = 0x008c_TF0 = 0x008d_TR1 = 0x008e_TF1 = 0x008f_P1_0 = 0x0090_P1_1 = 0x0091_P1_2 = 0x0092_P1_3 = 0x0093_P1_4 = 0x0094_P1_5 = 0x0095_P1_6 = 0x0096_P1_7 = 0x0097_RI = 0x0098_TI = 0x0099_RB8 = 0x009a_TB8 = 0x009b_REN = 0x009c_SM2 = 0x009d_SM1 = 0x009e_SM0 = 0x009f_P2_0 = 0x00a0_P2_1 = 0x00a1_P2_2 = 0x00a2_P2_3 = 0x00a3_P2_4 = 0x00a4_P2_5 = 0x00a5_P2_6 = 0x00a6_P2_7 = 0x00a7_EX0 = 0x00a8_ET0 = 0x00a9_EX1 = 0x00aa_ET1 = 0x00ab_ES = 0x00ac_EA = 0x00af_P3_0 = 0x00b0_P3_1 = 0x00b1_P3_2 = 0x00b2_P3_3 = 0x00b3_P3_4 = 0x00b4_P3_5 = 0x00b5_P3_6 = 0x00b6_P3_7 = 0x00b7_RXD = 0x00b0_TXD = 0x00b1_INT0 = 0x00b2_INT1 = 0x00b3_T0 = 0x00b4_T1 = 0x00b5_WR = 0x00b6_RD = 0x00b7_PX0 = 0x00b8_PT0 = 0x00b9_PX1 = 0x00ba_PT1 = 0x00bb_PS = 0x00bc_P = 0x00d0_F1 = 0x00d1_OV = 0x00d2_RS0 = 0x00d3_RS1 = 0x00d4_F0 = 0x00d5_AC = 0x00d6_CY = 0x00d7_ET2 = 0x00ad_T2CON_0 = 0x00c8_T2CON_1 = 0x00c9_T2CON_2 = 0x00ca_T2CON_3 = 0x00cb_T2CON_4 = 0x00cc_T2CON_5 = 0x00cd_T2CON_6 = 0x00ce_T2CON_7 = 0x00cf_CP_RL2 = 0x00c8_C_T2 = 0x00c9_TR2 = 0x00ca_EXEN2 = 0x00cb_TCLK = 0x00cc_RCLK = 0x00cd_EXF2 = 0x00ce_TF2 = 0x00cf;--------------------------------------------------------; internal ram data;-------------------------------------------------------- .area DSEG (DATA);--------------------------------------------------------; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA);--------------------------------------------------------; indirectly addressable internal ram data;-------------------------------------------------------- .area ISEG (DATA);--------------------------------------------------------; bit data;-------------------------------------------------------- .area BSEG (BIT)_work_flag_byte_arrived: .ds 1_work_flag_buffer_transfered: .ds 1_tx_serial_buffer_empty: .ds 1_rx_serial_buffer_empty: .ds 1;--------------------------------------------------------; external ram data;-------------------------------------------------------- .area XSEG (XDATA)_stx_index_in: .ds 1_srx_index_in: .ds 1_stx_index_out: .ds 1_srx_index_out: .ds 1_stx_buffer: .ds 256_srx_buffer: .ds 256;--------------------------------------------------------; global & static initialisations;-------------------------------------------------------- .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE);--------------------------------------------------------; Home;-------------------------------------------------------- .area HOME (CODE) .area CSEG (CODE);--------------------------------------------------------; code;-------------------------------------------------------- .area CSEG (CODE); serial.c 25; genFunction ; -----------------------------------------; function serial_init; -----------------------------------------_serial_init: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01; serial.c 27; genAssign ; genAssign: resultIsFar = FALSE mov _SCON,#0x50; serial.c 28; genAssign ; genAssign: resultIsFar = FALSE mov _T2CON,#0x34; serial.c 29; genAssign ; genAssign: resultIsFar = FALSE setb _PS; serial.c 30; genAssign ; genAssign: resultIsFar = FALSE mov _T2CON,#0x34; serial.c 31; genAssign ; genAssign: resultIsFar = FALSE mov _RCAP2H,#0xFF; serial.c 32; genAssign ; genAssign: resultIsFar = FALSE mov _RCAP2L,#0xDA; serial.c 34; genAssign ; genAssign: resultIsFar = FALSE clr _RI; serial.c 35; genAssign ; genAssign: resultIsFar = FALSE clr _TI; serial.c 37; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#_srx_index_out; Peephole 180 changed mov to clr; genAssign ; genAssign: resultIsFar = TRUE; Peephole 180 changed mov to clr; Peephole 219 removed redundant clear; genAssign ; genAssign: resultIsFar = TRUE; Peephole 180 changed mov to clr; genAssign ; genAssign: resultIsFar = TRUE; Peephole 180 changed mov to clr; Peephole 219 removed redundant clear; Peephole 219a removed redundant clear clr a movx @dptr,a mov dptr,#_stx_index_out movx @dptr,a mov dptr,#_srx_index_in movx @dptr,a mov dptr,#_stx_index_in movx @dptr,a; serial.c 38; genAssign ; genAssign: resultIsFar = FALSE setb _tx_serial_buffer_empty; genAssign ; genAssign: resultIsFar = FALSE setb _rx_serial_buffer_empty; serial.c 39; genAssign ; genAssign: resultIsFar = FALSE clr _work_flag_buffer_transfered; serial.c 40; genAssign ; genAssign: resultIsFar = FALSE clr _work_flag_byte_arrived; serial.c 41; genAssign ; genAssign: resultIsFar = FALSE setb _ES; genLabel 00101$:; genEndFunction ret; serial.c 44; genFunction ; -----------------------------------------; function serial_interrupt_handler; -----------------------------------------_serial_interrupt_handler: ar2 = 0x0a ar3 = 0x0b ar4 = 0x0c ar5 = 0x0d ar6 = 0x0e ar7 = 0x0f ar0 = 0x08 ar1 = 0x09 push acc push b push dpl push dph push dpx push dps mov dps, #0x00 push dpl1 push dph1 push dpx1 push ap push psw mov psw,#0x08; serial.c 46; genAssign ; genAssign: resultIsFar = FALSE clr _ES; serial.c 47; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _TI,00105$00113$:; serial.c 49; genAssign ; genAssign: resultIsFar = FALSE clr _TI; serial.c 50; genCmpEq mov dptr,#_stx_index_in; gencjneshort; Peephole 220a removed bogus DPS set mov dps, #0x01 mov dptr, #_stx_index_out movx a,@dptr mov dps, #0x00 mov b,a movx a,@dptr; Peephole 132 changed ljmp to sjmp; Peephole 199 optimized misc jump sequence cjne a,b,00102$;00114$:; Peephole 200 removed redundant sjmp00115$:; serial.c 52; genAssign ; genAssign: resultIsFar = FALSE setb _tx_serial_buffer_empty; serial.c 53; genAssign ; genAssign: resultIsFar = FALSE setb _work_flag_buffer_transfered; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00105$00102$:; serial.c 55; genAssign mov dptr,#_stx_index_out; genAssign: resultIsFar = FALSE movx a,@dptr mov r2,a; genPlus mov dptr,#_stx_index_out mov a,#0x01 add a,r2 movx @dptr,a; genPlus mov a,r2 add a,#_stx_buffer mov r2,a; Peephole 180 changed mov to clr clr a addc a,#(_stx_buffer >> 8) mov r3,a; Peephole 180 changed mov to clr clr a addc a,#(_stx_buffer >> 16) mov r4,a; genPointerGet ; genFarPointerGet mov dpl,r2 mov dph,r3 mov dpx,r4 movx a,@dptr mov _SBUF,a; genLabel 00105$:; serial.c 57; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _RI,00107$00116$:; serial.c 59; genAssign ; genAssign: resultIsFar = FALSE clr _RI; serial.c 60; genAssign mov dptr,#_srx_index_in; genAssign: resultIsFar = FALSE movx a,@dptr mov r2,a; genPlus mov dptr,#_srx_index_in mov a,#0x01 add a,r2 movx @dptr,a; genPlus mov a,r2 add a,#_srx_buffer mov r2,a; Peephole 180 changed mov to clr clr a addc a,#(_srx_buffer >> 8) mov r3,a; Peephole 180 changed mov to clr clr a addc a,#(_srx_buffer >> 16) mov r4,a; genPointerSet mov dpl,r2 mov dph,r3 mov dpx,r4 mov a,_SBUF movx @dptr,a; serial.c 61; genAssign ; genAssign: resultIsFar = FALSE setb _work_flag_byte_arrived; serial.c 62; genAssign ; genAssign: resultIsFar = FALSE clr _rx_serial_buffer_empty; genLabel 00107$:; serial.c 64; genAssign ; genAssign: resultIsFar = FALSE setb _ES; genLabel 00108$:; genEndFunction pop psw pop ap pop dpx1 pop dph1 pop dpl1 pop dps pop dpx pop dph pop dpl pop b pop acc reti; serial.c 69; genFunction ; -----------------------------------------; function serial_putc; -----------------------------------------_serial_putc: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01; serial.c 78; genReceive mov r2,dpl; serial.c 71; genAssign mov dptr,#_stx_index_in; genAssign: resultIsFar = FALSE movx a,@dptr mov r3,a; genPlus mov dptr,#_stx_index_in mov a,#0x01 add a,r3 movx @dptr,a; genPlus mov a,r3 add a,#_stx_buffer mov r3,a; Peephole 180 changed mov to clr clr a addc a,#(_stx_buffer >> 8) mov r4,a; Peephole 180 changed mov to clr clr a addc a,#(_stx_buffer >> 16) mov r5,a; genPointerSet mov dpl,r3 mov dph,r4 mov dpx,r5 mov a,r2 movx @dptr,a; serial.c 72; genAssign ; genAssign: resultIsFar = FALSE clr _ES; serial.c 73; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _tx_serial_buffer_empty,00102$00106$:; serial.c 75; genAssign ; genAssign: resultIsFar = FALSE clr _tx_serial_buffer_empty; serial.c 76; genAssign ; genAssign: resultIsFar = FALSE setb _TI; genLabel 00102$:; serial.c 78; genAssign ; genAssign: resultIsFar = FALSE setb _ES; genLabel 00103$:; genEndFunction ret; serial.c 81; genFunction ; -----------------------------------------; function serial_getc; -----------------------------------------_serial_getc:; serial.c 83; genAssign mov dptr,#_srx_index_out; genAssign: resultIsFar = FALSE movx a,@dptr; genPlus ; Peephole 214 reduced some extra movs mov r2,a add a,#0x01 ; genAssign ; genAssign: resultIsFar = TRUE; Peephole 100 removed redundant mov mov r3,a mov dptr,#_srx_index_out movx @dptr,a; genPlus mov a,r2 add a,#_srx_buffer mov r2,a; Peephole 180 changed mov to clr clr a addc a,#(_srx_buffer >> 8) mov r4,a; Peephole 180 changed mov to clr clr a addc a,#(_srx_buffer >> 16) mov r5,a; genPointerGet ; genFarPointerGet mov dpl,r2 mov dph,r4 mov dpx,r5 movx a,@dptr mov r2,a; genAssign ; genAssign: resultIsFar = TRUE; serial.c 84; genAssign ; genAssign: resultIsFar = FALSE clr _ES; serial.c 85; genCmpEq mov dptr,#_srx_index_in; gencjneshort mov b,r3 movx a,@dptr; Peephole 132 changed ljmp to sjmp; Peephole 199 optimized misc jump sequence cjne a,b,00102$;00106$:; Peephole 200 removed redundant sjmp00107$:; genAssign ; genAssign: resultIsFar = FALSE setb _rx_serial_buffer_empty; genLabel 00102$:; serial.c 86; genAssign ; genAssign: resultIsFar = FALSE setb _ES; serial.c 87; genRet mov dpl,r2; genLabel 00103$:; genEndFunction ret .area CSEG (CODE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -