|
кину исходник сюда на всякий случай
#include <16F84a.H>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#byte PORTB=6
int pos,dst,count=0;
long periodo,cap1,cap2;
#define in PIN_A0 //pin 17, C=10uf
#define cte 9375
byte const v[4]={0x10,0x20,0x40,0x80};
#int_global
void interrupts()
{
int W_TEMP,STATUS_TEMP;
//PUSH
#asm
movwf W_TEMP //Guardar W y STATUS
swapf STATUS,w
movwf STATUS_TEMP
bcf STATUS,RP0 //banco 0
#endasm
if(bit_test(INTCON,T0IF))
{
bit_clear(INTCON,T0IF);
count++;
if(posdst) pos--;
PORTB=v[pos & 0x03];
}
if(bit_test(INTCON,INTF))
{
bit_clear(INTCON,INTF);
#asm
movf TMR0,w
movwf cap2
movf count,w
movwf &cap2+1
#endasm
period=cap2-cap1;
cap1=cap2;
}
//POP ****************************
#asm
swapf STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
#endasm
}
void main()
{
long TEMP,RPM;
OPTION_REG=0x03; //Prescalar=/16
INTCON=0b10110000; //GIE(7),T0IE(5),INTE(4)
set_tris_b(0x00);
set_tris_a(0x01);
while(true)
{
TEMP=4000;
while(!input(in) && TEMP) TEMP--;
RPM=cte/period;
dst=RPM;
}
}
E-mail: info@telesys.ru