⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intsio2.cod

📁 家电考试系统下位机程序
💻 COD
📖 第 1 页 / 共 2 页
字号:
LX51 LINKER/LOCATER V3.23                                                               05/11/2007  14:36:35  PAGE 1





ASSEMBLER CODE PACKING OF MODULE:  intsio2 (SIO)


----- FUNCTION _getkey (BEGIN) -----
 FILE: 'MAIN.C'
   21: char _getkey (void)
   22: {
   23: int k;
0012         ?C0003?MAIN:
   24: 
   25: do
   26:   {
   27:   k = com_getchar ();
0012 51FA              ACALL   com_getchar
;---- Variable 'k' assigned to Register 'R6/R7' ----
   28:   }
   29: while (k == -1);
0014 EF                MOV     A,R7
0015 F4                CPL     A
0016 7002              JNZ     ?C0014?MAIN
0018 EE                MOV     A,R6
0019 F4                CPL     A
001A         ?C0014?MAIN:
001A 60F6              JZ      ?C0003?MAIN
   30: 
   31: return ((unsigned char) k);
   32: }
001C 22                RET     
----- FUNCTION _getkey (END) -------


0023 4113              AJMP    01000213H
----- FUNCTION com_isr (BEGIN) -----
 FILE: 'SIO.C'
   62: static void com_isr (void) interrupt 4
0213 C0E0              PUSH    ACC
0215 C0D0              PUSH    PSW
0217 75D000            MOV     PSW,#00H
021A C000              PUSH    AR0
   63: {   unsigned char temp  ;
   64: /*------------------------------------------------
   65: Received data interrupt.
   66: ------------------------------------------------*/
   67: if (RI != 0)
021C 309819            JNB     RI,?C0001?SIO
   68:   {
   69:   RI = 0;
021F C298              CLR     RI
   70:   if( P34 == 0 ) {    //P34 == 0,主机呼叫
0221 20B414            JB      P34,?C0001?SIO
   71:   if (((r_in - r_out) & ~(RBUF_SIZE-1)) == 0)
0224 C3                CLR     C
0225 E508              MOV     A,r_in
0227 9509              SUBB    A,r_out
0229 54F8              ANL     A,#0F8H
022B 700B              JNZ     ?C0001?SIO
   72:     {
   73:     rbuf [r_in & (RBUF_SIZE-1)] = SBUF;
022D E508              MOV     A,r_in
022F 5407              ANL     A,#07H
0231 2411              ADD     A,#LOW rbuf
0233 F8                MOV     R0,A
0234 A699              MOV     @R0,SBUF
LX51 LINKER/LOCATER V3.23                                                             05/11/2007  14:36:35  PAGE 2


   74:     r_in++;
0236 0508              INC     r_in
   75:     }
   76:     }// if( P34 )
   77:   }
0238         ?C0001?SIO:
   78: P34 = 1;
0238 D2B4              SETB    P34
   79: /*------------------------------------------------
   80: Transmitted data interrupt.
   81: ------------------------------------------------*/
   82: if (TI != 0)
023A 30991A            JNB     TI,?C0007?SIO
   83:   {
   84:   TI = 0;
023D C299              CLR     TI
   85: 
   86:   if (t_in != t_out)
023F E50A              MOV     A,t_in
0241 650B              XRL     A,t_out
0243 6010              JZ      ?C0005?SIO
   87:     {
   88:     SBUF = tbuf [t_out & (TBUF_SIZE-1)];
0245 E50B              MOV     A,t_out
0247 5401              ANL     A,#01H
0249 2419              ADD     A,#LOW tbuf
024B F8                MOV     R0,A
024C E6                MOV     A,@R0
024D F599              MOV     SBUF,A
   89:     t_out++;
024F 050B              INC     t_out
   90:     ti_restart = 0;
0251 C200              CLR     ti_restart
   91:     }
0253 8002              SJMP    ?C0007?SIO
0255         ?C0005?SIO:
   92:   else
   93:     {
   94:     ti_restart = 1;
0255 D200              SETB    ti_restart
   95:     }
   96:   }
   97: 
   98: }
0257         ?C0007?SIO:
0257 D000              POP     AR0
0259 D0D0              POP     PSW
025B D0E0              POP     ACC
025D 32                RETI    
----- FUNCTION com_isr (END) -------


----- FUNCTION com_initialize (BEGIN) -----
 FILE: 'SIO.C'
  104: void com_initialize (void)
025E D3                SETB    C
025F 10AF01            JBC     EA,?C0017?SIO
0262 C3                CLR     C
0263         ?C0017?SIO:
0263 C0D0              PUSH    PSW
  105: {
  106: /*------------------------------------------------
  107: Setup TIMER1 to generate the proper baud rate.
  108: ------------------------------------------------*/
  109: //com_baudrate (1200);
LX51 LINKER/LOCATER V3.23                                                             05/11/2007  14:36:35  PAGE 3


  110: 
  111: /*------------------------------------------------
  112: Clear com buffer indexes.
  113: ------------------------------------------------*/
  114: t_in = 0;
0265 E4                CLR     A
0266 F50A              MOV     t_in,A
  115: t_out = 0;
0268 F50B              MOV     t_out,A
  116: 
  117: r_in = 0;
026A F508              MOV     r_in,A
  118: r_out = 0;
026C F509              MOV     r_out,A
  119: 
  120: /*------------------------------------------------
  121: Setup serial port registers.
  122: ------------------------------------------------*/
  123: SM0 = 0; SM1 = 1;   /* serial port MODE 1 */
026E C29F              CLR     SM0
0270 D29E              SETB    SM1
  124: SM2 = 0;
0272 C29D              CLR     SM2
  125: REN = 1;            /* enable serial receiver */
0274 D29C              SETB    REN
  126: 
  127: RI = 0;             /* clear receiver interrupt */
0276 C298              CLR     RI
  128: TI = 0;             /* clear transmit interrupt */
0278 C299              CLR     TI
  129: ti_restart = 1;
027A D200              SETB    ti_restart
  130: 
  131: ES = 1;             /* enable serial interrupts */
027C D2AC              SETB    ES
  132: PS = 0;             /* set serial interrupts to low priority */
027E C2BC              CLR     PS
  133: }
0280 D0D0              POP     PSW
0282 92AF              MOV     EA,C
0284 22                RET     
----- FUNCTION com_initialize (END) -------


----- FUNCTION main (BEGIN) -----
 FILE: 'MAIN.C'
   52: void main (void)
   53: {       //unsigned int i;
   54:         //unsigned char j;
   55:         unsigned char k;
   56:         com_initialize ();              /* initialize interrupt driven serial I/O */
0285 515E              ACALL   com_initialize
   57:         com_baudrate (9600);            
0287 7F80              MOV     R7,#080H
0289 7E25              MOV     R6,#025H
028B 51B8              ACALL   _com_baudrate
   58:         P1 = 0xAA ;
028D 7590AA            MOV     P1,#0AAH
   59:         P2 = 0x55 ;
0290 75A055            MOV     P2,#055H
   60:         P3 = 0xff ;
0293 75B0FF            MOV     P3,#0FFH
   61:         MasterCall  = 1 ;            //ready to wait for master call
0296 D2B4              SETB    P34
   62:         EA = 1;                      /* Enable Interrupts */
LX51 LINKER/LOCATER V3.23                                                             05/11/2007  14:36:35  PAGE 4


0298 D2AF              SETB    EA
029A         ?C0011?MAIN:
   63:         while (1)
   64:               { P30 = 1;            //进入串行接收状态
029A D2B0              SETB    P30
   65:                 P0 = _getkey ()  ;
029C 1112              ACALL   _getkey
029E 8F80              MOV     P0,R7
   66:                 P1 = _getkey ()  ;
02A0 1112              ACALL   _getkey
02A2 8F90              MOV     P1,R7
   67:                 P2 = _getkey ()  ;
02A4 1112              ACALL   _getkey
02A6 8FA0              MOV     P2,R7
   68:                 k = _getkey () | 0x11  ;   //p30,p34为1不变
02A8 1112              ACALL   _getkey
02AA EF                MOV     A,R7
02AB 4411              ORL     A,#011H
02AD FF                MOV     R7,A
;---- Variable 'k' assigned to Register 'R7' ----
   69:                 P3 = k ;
02AE F5B0              MOV     P3,A
   70:                 P30 = 0;            //回应主机接收到
02B0 C2B0              CLR     P30
   71:                 _nop_();
02B2 00                NOP     
   72:                 _nop_();
02B3 00                NOP     
   73:                 _nop_();
02B4 00                NOP     
   74:                 _nop_();
02B5 00                NOP     
   75:          }  //end of while(1)
02B6 80E2              SJMP    ?C0011?MAIN
----- FUNCTION main (END) -------


----- FUNCTION _com_baudrate (BEGIN) -----
 FILE: 'SIO.C'
  139: void com_baudrate (
02B8 D3                SETB    C
02B9 10AF01            JBC     EA,?C0018?SIO
02BC C3                CLR     C
02BD         ?C0018?SIO:
02BD C0D0              PUSH    PSW
  140:   unsigned baudrate)
;---- Variable 'baudrate' assigned to Register 'R6/R7' ----
  141: {
  142: /*------------------------------------------------
  143: Clear transmit interrupt and buffer.
  144: ------------------------------------------------*/
  145: TI = 0;             /* clear transmit interrupt */
02BF C299              CLR     TI
  146: t_in = 0;           /* empty transmit buffer */
02C1 E4                CLR     A
02C2 F50A              MOV     t_in,A
  147: t_out = 0;
02C4 F50B              MOV     t_out,A
  148: 
  149: /*------------------------------------------------
  150: Set timer 1 up as a baud rate generator.
  151: ------------------------------------------------*/
  152: TR1 = 0;            /* stop timer 1 */
02C6 C28E              CLR     TR1
  153: ET1 = 0;            /* disable timer 1 interrupt */
LX51 LINKER/LOCATER V3.23                                                             05/11/2007  14:36:35  PAGE 5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -