Advertisement
Electgpl

8051 - UART Ejemplo

Oct 26th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. #include<reg52.h>
  2. #define BAUDRATE 0xFD                             //BAUD RATE 9600                    
  3. sbit P1_0 = P1^0;
  4. sbit P1_1 = P1^1;
  5. sbit P1_2 = P1^2;
  6. sbit P1_3 = P1^3;
  7. //*********************************************************************************************************
  8. // Funcion para inicializar el puerto serie 9600 @ 11.059MHz
  9. //*********************************************************************************************************
  10. void serialInit(void){                      
  11.    TMOD = 0x20;                                    //Timer 1 en modo 2 - Auto recarga para generar Baudrate
  12.    SCON = 0x50;                                    //Serial modo 1, 8bit de dato, 1bit de start, 1bit de stop
  13.    TH1 = BAUDRATE;                                 //Carga el baudrate en el timer
  14.    TR1 = 1;                                        //Dispara el timer
  15. }
  16. //*********************************************************************************************************
  17. // Funcion para enviar byte por puerto serie
  18. //*********************************************************************************************************
  19. void sendByte(unsigned char serialdata){
  20.    SBUF = serialdata;                              //Carga el dato a enviar por uart
  21.    while(TI == 0);                                 //Espera a la transmicion completa
  22.    TI = 0;                                         //Borra el flag de transmision
  23. }
  24. //*********************************************************************************************************
  25. // Interrupcion de byte presente en puerto serie
  26. //*********************************************************************************************************
  27. void serial_ISR (void) interrupt 4{
  28.    char valor;
  29.    if(RI==1){
  30.       valor = SBUF;
  31.       RI = 0;
  32.    }
  33.    switch(valor){
  34.    case '1': P1_0 = 1; sendByte('1'); break;
  35.    case '2': P1_1 = 1; sendByte('1'); break;
  36.    case '3': P1_2 = 1; sendByte('1'); break;
  37.    case '4': P1_3 = 1; sendByte('1'); break;
  38.    case '5': P1_0 = 0; sendByte('0'); break;
  39.    case '6': P1_1 = 0; sendByte('0'); break;
  40.    case '7': P1_2 = 0; sendByte('0'); break;
  41.    case '8': P1_3 = 0; sendByte('0'); break;
  42.    default: ; break;
  43.    }
  44.    RI = 0;
  45. }
  46. //*********************************************************************************************************
  47. // Funcion principal
  48. //*********************************************************************************************************
  49. void main(){
  50.    P1 = 0x00;                                    //Usado para aplicacion
  51.    P3 = 0x03;                                    //Usado para el serie
  52.    serialInit();    
  53.    EA = 1;
  54.    ES = 1;
  55.    while(1) {;}
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement