Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.87 KB | None | 0 0
  1. #include <REG517A.H>
  2. #define VALOR_TH1 254
  3. /*
  4. //converter para o 517A
  5. #define SBUF S0BUF
  6. #define TI TI0
  7. #define RI RI0
  8. #define SM2 SM20
  9. #define REN REN0
  10. #define EA EAL
  11. #define ES ES0
  12. //converter para o 517A
  13. */
  14. bit TxIdle = 1;
  15. unsigned char pwm_width;
  16. unsigned char param = 5;
  17. bit pwm_flag = 0;
  18.  
  19. void pwm_setup(){                                           //Use Timer0 as pwm timer
  20.     EAL = 0;                                                //desabilita todas interrupções
  21.     TR0 = 0;                                                //bit de controle do timer0, faz com que ele comece ou pare              
  22.     pwm_width = 20 + 26*param;                              //largura do pulso pwm. dependendo da largura, o sinal tem certa voltagem para acender o LED.    
  23.     EAL = 1;                                                //habilita todas as interrupções
  24.     ET0 = 1;                                                //desativa a interrupção de overflow.
  25.     TR0 = 1;                                                //agora o timer0 está totalmente ativado
  26. }
  27.      
  28. void serial_init(){                                         //Serial 0 Using Timer1 as baud rate generator
  29.     TR1 = 0;                                                //timer1 OFF
  30.     EAL = 0;                                                //desabilita todas as interrupções
  31.     BD = 1;                                                 //Enable BD to use variable baud rate
  32.     S0CON = 0x50;                                           //SMOD = 0;
  33.     TR1 = 1;                                                //timer1 ON
  34.     PCON |= 0x80;                                           //SMOD = 1 (variável importante para o gerador de baudrate...)
  35.     /*esses valores são usados para alterar o baudrate, porém o padrão é 9600 então optamos por não mexer
  36.     S0RELH = 0x02;
  37.     S0RELL = 0xC7;
  38.     S1RELH = 0x02;
  39.     S1RELL = 0xC7;*/
  40.     ES0 = 1;                                                //Enable Serial 0 Interrupt
  41.     REN0 = 1;                                               //Enable Serial 0 Reception
  42.  
  43.  
  44.     EAL = 1;                                                //Enable All Interrupts
  45. }
  46.  
  47. void timer0_init(){
  48.      TMOD = TMOD | 0x02;                                    //Set Timer0 Mode 2
  49. }
  50.  
  51. void serial_isr (void) interrupt 4 using 2{
  52.     if (RI0){                                               //caso esteja pronto para receber
  53.         RI0 = 0;
  54.         param = (S0BUF +1)%10;                              //o pwm_width depende desse parâmetro para alterar o tamanho do pulso
  55.         pwm_setup();                                        //chama o pwm_setup que muda os leds da placa
  56.     }
  57.     if (TI0){
  58.         TI0 = 0;                                            //sem transmissão para esse experimento
  59.     }
  60. }
  61.      
  62. void timer0() interrupt 1{
  63.     if (!pwm_flag){                                         /* Start of High level */
  64.         pwm_flag = 1;                                       /* Set flag */
  65.         P4 = 0xFF;                                          // P4 = 1;      /* Set PWM o/p pin */
  66.         TH0 = pwm_width;                                    /* Load timer */
  67.         TF0 = 0;                                            /* Clear interrupt flag */
  68.     }
  69.     else{                                                   /* Start of Low level */
  70.         pwm_flag = 0;                                       /* Clear flag */
  71.         P4 = 0x00;                                          /* Clear P4 o/p pin */
  72.         TH0 = 255 - pwm_width;                              /* Load timer */
  73.         TF0 = 0;                                            /* Clear Interrupt flag */
  74.     }
  75. }
  76.  
  77.  
  78.  
  79. int main(){
  80.     serial_init();
  81.     timer0_init();
  82.     pwm_setup();    
  83.     while(1){
  84.         //param = (param + 1)%10;
  85.         //pwm_setup();
  86.         //TH0=pwm_width;
  87.     }
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement