Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<DS89C4xx.h>
- sbit Tsignal = P3^2;
- int Data_Ready;
- unsigned char xdata x[500];
- void SerialTx(unsigned char a)
- {
- SBUF0=a;
- while(TI_0==0); //Wait for Transmit
- TI_0=0;
- }
- /***********************************LOOKUP TABLE******************************************/
- unsigned char lookuptable(unsigned char t)
- {
- switch(t)
- {
- case 0x00 : return '0';
- break;
- case 0x01 : return '1';
- break;
- case 0x02 : return '2';
- break;
- case 0x03 : return '3';
- break;
- case 0x04 : return '4';
- break;
- case 0x05 : return '5';
- break;
- case 0x06 : return '6';
- break;
- case 0x07 : return '7';
- break;
- case 0x08 : return '8';
- break;
- case 0x09 : return '9';
- break;
- case 0x0A : return 'A';
- break;
- case 0x0B : return 'B';
- break;
- case 0x0C : return 'C';
- break;
- case 0x0D : return 'D';
- break;
- case 0x0E : return 'E';
- break;
- case 0x0F : return 'F';
- break;
- }// end switch
- }// end function
- /**************************************INITIALISE SERIAL PORT***********************************/
- void SPort()
- {
- TMOD = 0x21; //use Timer 1 for 2nd Serial Port
- TH1 = 0xFD; //9600 Baud Rate
- SCON0 = 0x50;
- SCON1 = 0x50;
- //TR1 = 1; //use 2nd serial port SCON1 register
- }
- /**************************************TIMER FUNCTION*********************************************/
- void timer0(void)
- {
- TH0 = 0xFF; //Set timer to count from -35 = FFDDh
- TL0 = 0xDA; //Read every 38us.
- TR0 = 1;
- while(TF0==0); //Turn on Timer0
- TF0 = 0; //Set Flag to 0;
- TR0 = 0; //Turn off Timer0
- }
- /***************************************DISpLAY_BYTE***************************************************/
- void Display_Byte()
- {
- unsigned char Data_LK;
- unsigned char MSB;
- unsigned char LSB;
- unsigned int v;
- TR1=1;
- for(v=0;v<500;v++)
- {
- Data_LK = x[v]; //Store x[i] in Data_LK
- MSB = Data_LK >> 4; //Shift Right Bits by 4
- MSB &= 0x0F;
- MSB = lookuptable(MSB); //Mask bits of MSB
- SerialTx(MSB);
- LSB = x[v];
- LSB &= 0x0F;
- LSB = lookuptable(LSB);
- SerialTx(LSB);
- }
- Data_Ready = 0;
- TR1 = 0;
- }
- /***************************************FALLING EDGE INTERRUPT*****************************************/
- void int0()interrupt 0
- {
- unsigned char p;
- unsigned int u;
- unsigned int i;
- i=0;
- u=0;
- EA=0;
- for(i=0;i<500;i++) //Loop for 500 bytes
- {
- for(u=0;u<8;u++) //Bit Shift Loop
- {
- timer0(); //Call timer0 function
- x[i] = x[i] << 1; //Left Bit Shift by 1
- p = Tsignal; //Store Tsignal to Buffer p
- x[i] |= p;
- //OR Masking of p with x[i]
- }//End Bitshift loop
- }//end 500 bytes for loop
- IE1 = 0;
- Data_Ready = 1;
- }//end
- /*********************************************MAIN*******************************************/
- void main(void)
- {
- PMR = PMR | 0x03; // Allow Internal SRAM access
- SPort(); //Initialise Serial Port
- IE = 0x81; //Enable All Interrupt
- EX0 = 1;
- IT0 = 1;
- EA = 1;
- while(1)
- {
- if(Data_Ready)
- {
- Display_Byte();
- }
- }
- }//end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement