Autor Tema: Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?  (Leído 564 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 263
Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« en: 23 de Mayo de 2024, 17:31:45 »
Cordial saludo,,
Estoy tratando de hacer un contador con el "80C51" segun investigue sus variables tipo "int" son de 16 bits y char de 8 signed o unsigned, voy incrementando la variable y en el puerto serie me entrega el dato correspondiente pero al llegar a "128" me imprime 0x80 y 0xFF al mismo tiempo.
Que podria estar sucediendo?
Gracias de antemano.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1906
    • Sicoy
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #1 en: 23 de Mayo de 2024, 17:52:33 »
Cordial saludo,,
Estoy tratando de hacer un contador con el "80C51" segun investigue sus variables tipo "int" son de 16 bits y char de 8 signed o unsigned, voy incrementando la variable y en el puerto serie me entrega el dato correspondiente pero al llegar a "128" me imprime 0x80 y 0xFF al mismo tiempo.
Que podria estar sucediendo?
Gracias de antemano.

Deberías compartir tu código, sería más fácil de entender lo que intentas hacer.

PArecería que estás usando una variable tipo char (0 a 127) en lugar de unsigned char (0 a 255)
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 263
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #2 en: 23 de Mayo de 2024, 18:31:46 »
El codigo.. 

Código: C
  1. #include<8052.h>
  2.         //#include <reg52.h>
  3.         #include <stdio.h>
  4.         #include <stdlib.h>
  5.         #include <string.h>
  6.         //#include "lcd.h"
  7.         // #include "bufferd.h"
  8.         // #include "machine.h"
  9.         #include <stdint.h>
  10.         #define led P2_4 // el bit 0 del puuerto P1 ahora se llama led
  11.     #define led2 P2_2 // el bit 0 del puuerto P1 ahora se llama led
  12.        
  13.        
  14.         //char h=0;
  15.        
  16.         //char contador=0;
  17.        
  18.         unsigned char contador=0;
  19.         unsigned char contador2=0;
  20.         //******************************
  21.  
  22.  
  23.         //***************************//
  24.  
  25.  
  26.  
  27.                 void uart_rx(void) __interrupt 4
  28.                 {                      
  29.                 contador=SBUF;
  30.                 contador2=(contador2 + contador);
  31.                 //contador =0;
  32.                 RI = 0; // clear receive interrupt flag        
  33.                 }//end_uart_rx
  34.  
  35.  
  36.  
  37.  
  38.         //****************
  39.         void serial_init()
  40.  
  41.         {
  42.           //2400 baudios  
  43.           SCON = 0xD0;      /* 8 bit UART mode REN =0 TX  REN = 1 TX/RX */                
  44.           TMOD = 0x23;      /* TMOD: timer 1, mode 2, 8-bit reload      */        
  45.           TH1  = 245;      /* load divisor to Timer 1 High Byte (TH1)  */
  46.           TR1  = 1;         /* TR1:  timer 1 run                      */
  47.                 //TCON=51;
  48.          }
  49.  
  50.         void tx_data(unsigned char ch)
  51.         {
  52.          EA = 0; //disable interrupcion uart
  53.          SBUF = ch;
  54.          while(TI == 0);
  55.          TI = 0;
  56.          EA = 1;//enable interrupcion uart
  57.         }
  58.  
  59.  
  60.        
  61.        
  62.         // MAIN ***************************
  63.         void main (void)
  64.         {
  65.           serial_init();
  66.           IE = 0x90;      // enable UART interrupt
  67.  
  68.           int i=0;
  69.          
  70.             while(1)
  71.             {
  72.                         if (contador>0)
  73.                         tx_data(contador2);
  74.                         contador=0;
  75.                         for(i=0;i<20000;i++);  
  76.                 }
  77.  
  78.  
  79.          
  80.         }
« Última modificación: 23 de Mayo de 2024, 18:58:47 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 263
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #3 en: 23 de Mayo de 2024, 18:32:32 »
Estoy enviando el numero "1" y sale lo siguiente


Código: C
  1. 31 62 93 FF C4 FF F5 FF 26
« Última modificación: 23 de Mayo de 2024, 18:59:54 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1906
    • Sicoy
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #4 en: 23 de Mayo de 2024, 21:41:56 »
Estoy enviando el numero "1" y sale lo siguiente


Código: C
  1. 31 62 93 FF C4 FF F5 FF 26

¿Qué estás usando para enviar y recibir datos?

Tal vez deberías usar otro software, por ejemplo el Hércules:

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 263
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #5 en: 23 de Mayo de 2024, 21:48:32 »
Hola DominusDRR..
Lo que pasa es que en este momento no tengo acceso al hardware fisico, entonces lo estoy haciendo con la terminal de proteus, no se si lo pueda simular con otra terminal.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1906
    • Sicoy
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #6 en: 23 de Mayo de 2024, 22:35:16 »
Hola DominusDRR..
Lo que pasa es que en este momento no tengo acceso al hardware fisico, entonces lo estoy haciendo con la terminal de proteus, no se si lo pueda simular con otra terminal.

Parecería problema del terminal, ¿Puedes unir TX y RX del terminal? De esa manera mandarías un número mayor a 127 (Desde la terminal), y si retorna otra cosa, sería que tu terminal está mal interpretando los datos.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 263
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #7 en: 24 de Mayo de 2024, 13:29:02 »
Logre instalar"virtual terminal" y el hercules, he unido  rx y tx y el eco esta trabajando.
Siempre he tenido problemas para la comprension del envio de datos, requiero enviar un dato numerico de un pic y recuperarlo en otro, ej,, enviar  "199999" y recuperarlo.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1906
    • Sicoy
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #8 en: 25 de Mayo de 2024, 11:07:50 »
Logre instalar"virtual terminal" y el hercules, he unido  rx y tx y el eco esta trabajando.
Siempre he tenido problemas para la comprension del envio de datos, requiero enviar un dato numerico de un pic y recuperarlo en otro, ej,, enviar  "199999" y recuperarlo.

¿Y eso significa que lo lograste o no, o qué?

Otra idea que se me ocurre, ya que estás simulando, sería conectar dos microcontroladores, uno que haga de terminal, y mediante depuración, veas que envían y que reciben.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 952
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #9 en: 25 de Mayo de 2024, 12:56:08 »
Conecta el osciloscopio de Proteus y mira a qué velocidad está transmitiendo realmente.
Para 2400 bauds la transición mas corta debe ser de 417us.
La diferencia no debe ser mayor del 3% o tranquilamente pueden aparecer problemas de este tipo.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 263
Re:Micro 80C51 por que imprime adicional "FF" al sobrepasar 127?
« Respuesta #10 en: 29 de Mayo de 2024, 21:18:27 »
Si,,, habian problemas, la velocidad del micro  es 11.0592MHz y en el registro tenia TMOD = 0x21; lo cambie por TMOD = 0x20; y funciono.
Gracias a todos por la ayuda.
Código: C
  1. TMOD = 0x20;      /* TMOD: timer 1, mode 2, 8-bit reload    CONFIGURA TEMPORIZADOR TIMER 1 Y 0  */        
  2. TH1  = 0xf4;      /* load divisor to Timer 1 High Byte (TH1)   BAUDIOS*/
  3. SCON = 0x50;      /* 8 bit UART mode REN =0 TX  REN = 1 TX/RX MODOS DE OPERACION DE LA UART */
  4. TR1  = 1;         /* TR1:  timer 1 run     ARRANCA TIMER 1                 */
« Última modificación: 29 de Mayo de 2024, 21:21:30 por johenrod »
Si algo parece complicado... es por que esta mal explicado.


 

anything