home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_03 / 9n03039d < prev    next >
Text File  |  1991-01-22  |  3KB  |  132 lines

  1.  /*************************************************************
  2.   * NAME        :  Interupt.c
  3.   * DESCRIPTION :  Interrupt routines for the preset controller
  4.   *************************************************************/
  5.  
  6. /**************************************************************
  7.  *
  8.  * NAME       : rcv_msg
  9.  * DESCRIPTION: called by the interrupt routine which is 
  10.  *              invoked by uart interrupt bit.
  11.  * COMPATIBLE LANGUAGES: <Assembler only>
  12. **************************************************************/
  13. #include "serial.h"
  14. #include "que.h"
  15.  
  16. extern TRCSR;
  17. extern TDR;
  18. extern xstatus;
  19. extern struct g_queue xmit_que;
  20. extern struct g_queue in_que;
  21. extern RDR;
  22.  
  23. rcv_msg()
  24. {
  25.    unsigned char xstatus, temp;
  26.    unsigned int remove, insert;
  27.  
  28.    xstatus = TRCSR;
  29.    if (xstatus & RDRF)    /* did we receive something?  */
  30.    {
  31.       temp = RDR;
  32.       remove = in_que.remove;
  33.       insert = in_que.insert;
  34.       if ((insert+1!=remove) && (insert-remove!=kqlength-1))
  35.       {                                    /* queue is full */
  36.          in_que.que[insert++] = temp;
  37.          if (insert == kqlength)
  38.             insert = 0;
  39.          in_que.insert = insert;
  40.          in_que.empty = false;
  41.       }
  42.    }
  43.    if (xstatus & TDRE)
  44.    {                        /* do we have something to send? */
  45.       if(xmit_que.empty == false)
  46.       {
  47.          remove = xmit_que.remove;
  48.          TDR = xmit_que.que[remove++];
  49.          if (remove == kqlength)
  50.             remove = 0;
  51.          xmit_que.remove = remove;
  52.          if (remove == xmit_que.insert)
  53.             xmit_que.empty = true;
  54.       }
  55.       else
  56.       {
  57.          /* turn off the interupt for transmit buffer empty and
  58.             turn off the serial transmit buffer  */
  59.          TRCSR &= ~TIE;
  60.       }
  61.    }
  62. }
  63.  
  64. /**************************************************************
  65.  *
  66.  * NAME       : counter_irq
  67.  *
  68.  * DESCRIPTION: called by the interrupt routine which is
  69.  *              invoked by global timer interrupt - increments
  70.  *              the global value of time and reads the keyboard.
  71.  ********************************************************************/
  72.  
  73. extern enable_timer;
  74. extern globaltime;
  75. extern flashtime;
  76. extern dspy;
  77. extern disable_on;
  78. extern keyboard_port;
  79. extern P1DR;
  80. extern pad_read;
  81.  
  82. counter_irq()
  83. {
  84.    unsigned char i,line;
  85.    static unsigned char keyport;
  86.    unsigned int temp;
  87.  
  88.    /* clear the TOF bit in the timer control & status reg.
  89.     * AND then clear the interupt mask in the condition code reg.
  90.     */
  91.    ;
  92. #asm
  93.    XREF  TCSR?
  94.    LDD   TCSR?
  95.  
  96.    CLI
  97. #endasm
  98.  
  99.    /* increment the global timer variable */
  100.    if (enable_timer)  globaltime += 1;
  101.  
  102.    /* increment the flash time */
  103.    flashtime += 1;
  104.  
  105.    /* refresh the display */
  106.    show(dspy);
  107.  
  108.    /* if (!disable_on) then read the keypad */
  109.    if (!disable_on)
  110.    {
  111.       line = 0x8;
  112.       for (i=0; i<4; i++)
  113.       {
  114.          P1DR = line;
  115.          line >>= 1;
  116.          keyport = P1DR;
  117.          if (keyport & 0xf0)
  118.             break;
  119.       }
  120.       if (i==0)
  121.          keyboard_port = (keyport & 0xf0) | 1;
  122.       else if (i==1)
  123.          keyboard_port = (keyport & 0xf0) | 2;
  124.       else if (i==2)
  125.          keyboard_port = (keyport & 0xf0) | 4;
  126.       else if (i==3)
  127.          keyboard_port = (keyport & 0xf0) | 8;
  128.  
  129.       pad_read = true;
  130.    }
  131. }
  132.