Advertisement
Guest User

Untitled

a guest
May 16th, 2012
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.48 KB | None | 0 0
  1. #include<DS89C4xx.h>
  2.  
  3. sbit Tsignal = P3^2;           
  4. int Data_Ready;
  5.  
  6.  
  7. unsigned char xdata x[500];              
  8.      
  9. void SerialTx(unsigned char a)
  10. {
  11.     SBUF0=a;                   
  12.     while(TI_0==0);            //Wait for Transmit
  13.     TI_0=0;        
  14. }
  15.  
  16. /***********************************LOOKUP TABLE******************************************/
  17. unsigned char lookuptable(unsigned char t)
  18. {
  19.  switch(t)
  20.   {
  21.    case 0x00 : return '0';
  22.    break;
  23.    case 0x01 : return '1';
  24.    break;
  25.    case 0x02 : return '2';
  26.    break;
  27.    case 0x03 : return '3';
  28.    break;
  29.    case 0x04 : return '4';
  30.    break;
  31.    case 0x05 : return '5';
  32.    break;
  33.    case 0x06 : return '6';
  34.    break;
  35.    case 0x07 : return '7';
  36.    break;
  37.    case 0x08 : return '8';
  38.    break;
  39.    case 0x09 : return '9';
  40.    break;
  41.    case 0x0A : return 'A';
  42.    break;
  43.    case 0x0B : return 'B';
  44.    break;
  45.    case 0x0C : return 'C';
  46.    break;
  47.    case 0x0D : return 'D';
  48.    break;
  49.    case 0x0E : return 'E';
  50.    break;
  51.    case 0x0F : return 'F';
  52.    break;
  53.   }// end switch
  54. }// end function
  55.  
  56.  
  57. /**************************************INITIALISE SERIAL PORT***********************************/
  58.  
  59. void SPort()
  60. {
  61.  TMOD = 0x21;         //use Timer 1 for 2nd Serial Port
  62.  TH1 = 0xFD;          //9600 Baud Rate
  63.  SCON0 = 0x50;
  64.  SCON1 = 0x50;
  65.  //TR1 = 1;       //use 2nd serial port SCON1 register
  66. }
  67.  
  68. /**************************************TIMER FUNCTION*********************************************/
  69. void timer0(void)
  70. {                      
  71.  TH0 = 0xFF;                            //Set timer to count from -35 = FFDDh
  72.  TL0 = 0xDA;                            //Read every 38us.
  73.  TR0 = 1;
  74.  while(TF0==0);                         //Turn on Timer0                             
  75.  TF0 = 0;                               //Set Flag to 0;
  76.  TR0 = 0;                               //Turn off Timer0
  77. }
  78.  
  79.  
  80. /***************************************DISpLAY_BYTE***************************************************/
  81. void Display_Byte()
  82. {
  83.   unsigned char Data_LK;
  84.   unsigned char MSB;
  85.   unsigned char LSB;
  86.  
  87.   unsigned int v;  
  88.   TR1=1;                                                                             
  89.  for(v=0;v<500;v++)
  90.  { 
  91.      
  92.       Data_LK = x[v];           //Store x[i] in Data_LK
  93.       MSB = Data_LK >> 4;                  //Shift Right Bits by 4       
  94.       MSB &= 0x0F;  
  95.       MSB = lookuptable(MSB);                      //Mask bits of MSB                  
  96.       SerialTx(MSB);
  97.      
  98.          LSB = x[v];
  99.          LSB &= 0x0F;
  100.      LSB = lookuptable(LSB);                
  101.          SerialTx(LSB);
  102.   }
  103.  
  104.   Data_Ready = 0;
  105.   TR1 = 0;
  106.    
  107. }
  108.    
  109.  
  110. /***************************************FALLING EDGE INTERRUPT*****************************************/
  111. void int0()interrupt 0   
  112. {
  113.  unsigned char p;
  114.  unsigned int u;
  115.  unsigned int i;
  116.  i=0;
  117.  u=0;
  118.  EA=0;
  119.    
  120.    for(i=0;i<500;i++)                    //Loop for 500 bytes
  121.    {                                           
  122.     for(u=0;u<8;u++)                     //Bit Shift Loop
  123.     {
  124.      
  125.      timer0();                        //Call timer0 function   
  126.      x[i] = x[i] << 1;                   //Left Bit Shift by 1
  127.      p = Tsignal;                        //Store Tsignal to Buffer p
  128.      x[i] |= p;
  129.                               //OR Masking of p with x[i]                          
  130.     }//End Bitshift loop
  131.        
  132.    }//end 500 bytes for loop
  133.      
  134.  
  135.     IE1 = 0;                 
  136.     Data_Ready = 1;
  137.  
  138.  }//end
  139.  
  140.  
  141.  
  142. /*********************************************MAIN*******************************************/
  143. void main(void)
  144. {
  145.                                        
  146.  PMR = PMR | 0x03;                             // Allow Internal SRAM access
  147.  SPort();                    //Initialise Serial Port                                        
  148.  IE = 0x81;                 //Enable All Interrupt
  149.  EX0 = 1;
  150.  IT0 = 1;
  151.  EA = 1;
  152.  while(1)
  153. {
  154.  if(Data_Ready)
  155.  {
  156.  
  157.   Display_Byte();
  158.  }
  159.  
  160. }
  161.                
  162.  
  163. }//end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement