I want to generate 16 impulses, one for the freq. of 32 kHz and other for 64 kHz. I'm using a PIC16F887 and the freq. of the μC is 1 MHz, which mean 1 instruction cycle = 4 μs.
All I want is for 32 kHz, to generate 16 impulses , where one impulse has 16 μs ( 4 cycles High + 4 cycles Low), and for 64 kHz, same 16 impulses, where one impulse has 8 μs (2 cycles High + 2 cycles Low).
The problem is I've tried so many options by adding a variable which count to 16, but it added additional instruction cycles, especially for the Low part, where RB7 = 0, and I don't want to let the code in this form.
I would highly appreciate help in this situation, advices, code written, where should I change?
#include <htc.h> #define _XTAL_FREQ 1000000 unsigned char trigger ; void main(void) { TRISB=0b00000001; //RB0 input ANSELH=0; // pini digitali IOCB=0b00000001 ; //selectie pin RB0 interupt on change INTCON=0b10001000; // b7 GIE=1 activ. globala intreruperi // b3 RBIE=1 activ. intrerupere PORTB // b0 RBIF=0 fanion instr. PORTB //GIE=1 ;RBIE=1;RBIF=0; while(1) { if(trigger==32) { RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; RB7=1; RB7=1; RB7=1; RB7=1; RB7=0; RB7=0; RB7=0; RB7=0; } if(trigger==64) { RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; RB7=1; RB7=1; RB7=0; RB7=0; } trigger=0; } } void interrupt my_isr(void) { if(RBIF==1 && RBIE==1) { if(RB0==0) trigger=32; if(RB0==1) trigger=64; RBIF=0; } } 



