Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <REG517A.H>
- #define VALOR_TH1 254
- /*
- //converter para o 517A
- #define SBUF S0BUF
- #define TI TI0
- #define RI RI0
- #define SM2 SM20
- #define REN REN0
- #define EA EAL
- #define ES ES0
- //converter para o 517A
- */
- bit TxIdle = 1;
- unsigned char pwm_width;
- unsigned char param = 5;
- bit pwm_flag = 0;
- void pwm_setup(){ //Use Timer0 as pwm timer
- EAL = 0; //desabilita todas interrupções
- TR0 = 0; //bit de controle do timer0, faz com que ele comece ou pare
- pwm_width = 20 + 26*param; //largura do pulso pwm. dependendo da largura, o sinal tem certa voltagem para acender o LED.
- EAL = 1; //habilita todas as interrupções
- ET0 = 1; //desativa a interrupção de overflow.
- TR0 = 1; //agora o timer0 está totalmente ativado
- }
- void serial_init(){ //Serial 0 Using Timer1 as baud rate generator
- TR1 = 0; //timer1 OFF
- EAL = 0; //desabilita todas as interrupções
- BD = 1; //Enable BD to use variable baud rate
- S0CON = 0x50; //SMOD = 0;
- TR1 = 1; //timer1 ON
- PCON |= 0x80; //SMOD = 1 (variável importante para o gerador de baudrate...)
- /*esses valores são usados para alterar o baudrate, porém o padrão é 9600 então optamos por não mexer
- S0RELH = 0x02;
- S0RELL = 0xC7;
- S1RELH = 0x02;
- S1RELL = 0xC7;*/
- ES0 = 1; //Enable Serial 0 Interrupt
- REN0 = 1; //Enable Serial 0 Reception
- EAL = 1; //Enable All Interrupts
- }
- void timer0_init(){
- TMOD = TMOD | 0x02; //Set Timer0 Mode 2
- }
- void serial_isr (void) interrupt 4 using 2{
- if (RI0){ //caso esteja pronto para receber
- RI0 = 0;
- param = (S0BUF +1)%10; //o pwm_width depende desse parâmetro para alterar o tamanho do pulso
- pwm_setup(); //chama o pwm_setup que muda os leds da placa
- }
- if (TI0){
- TI0 = 0; //sem transmissão para esse experimento
- }
- }
- void timer0() interrupt 1{
- if (!pwm_flag){ /* Start of High level */
- pwm_flag = 1; /* Set flag */
- P4 = 0xFF; // P4 = 1; /* Set PWM o/p pin */
- TH0 = pwm_width; /* Load timer */
- TF0 = 0; /* Clear interrupt flag */
- }
- else{ /* Start of Low level */
- pwm_flag = 0; /* Clear flag */
- P4 = 0x00; /* Clear P4 o/p pin */
- TH0 = 255 - pwm_width; /* Load timer */
- TF0 = 0; /* Clear Interrupt flag */
- }
- }
- int main(){
- serial_init();
- timer0_init();
- pwm_setup();
- while(1){
- //param = (param + 1)%10;
- //pwm_setup();
- //TH0=pwm_width;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement