|
|
View previous topic :: View next topic |
Author |
Message |
argo
Joined: 11 May 2016 Posts: 2
|
Question |
Posted: Wed May 11, 2016 1:51 pm |
|
|
Hi all
I would like to know if this code uses (is based) "timer interrupts"?
Thank you in advance!
Code: |
#include<12f683.h>
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,NOBROWNOUT
#use delay(CLOCK=8000000) //8MHz
#byte GP=5
#bit IRSIG=GP.3
#define ON 1
#define OFF 0
#define HI 1
#define LOW 0
#define el_on 0x31
#define el_off 0x0e
#define rd_on 0x02
#define rd_off 0x35
signed long th_count,rd_count,el_count;
signed long rev_mix,rd_duty,al_count,rd_trim;
int cycl_count,el_duty;
byte gp_now;
// PWM
#int_rtcc
void soft_pwm()
{
set_timer0(156);
if(cycl_count < rd_duty){ // ON
gp_now=gp_now | rd_on;
GP=gp_now;
}
else{ // OFF
gp_now=gp_now & rd_off;
GP=gp_now;
}
if(cycl_count < el_duty){ // ON
gp_now=gp_now | el_on;
GP=gp_now;
}
else{ // OFF
gp_now=gp_now & el_off;
GP=gp_now;
}
cycl_count++;
cycl_count %=99;
}
main(){
int gcount;
setup_oscillator(OSC_8MHz);
setup_comparator(NC_NC);
setup_ccp1(CCP_PWM);
setup_adc_ports(NO_ANALOGS);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_4);
set_timer0(246);
//0.5us*4*(255-246+1)=0.00002s(=0.02ms)
setup_timer_2(T2_DIV_BY_4,255,1);
enable_interrupts(INT_RTCC); // Timer0
enable_interrupts(GLOBAL);
set_tris_a(0x08); // GP3
/* GP 5 4 3 2 1 0
el3 el2 SG MTR MTT el1
0 0 1 0 0 0
*/
cycl_count=rd_duty=el_duty=0;
th_count=0;
rd_trim=0;
gp_now=OFF;
while(1){
gcount=0;
while(gcount < 30){
if(IRSIG==HI){
delay_us(100);
gcount++;
}
else{
gcount=0;
}
}
While(IRSIG==HI){
}
//**************** Timer0 ******************
disable_interrupts(INT_RTCC);
// 1ch
al_count=0;
while(IRSIG==LOW){ // Low
delay_us(6);
al_count=al_count+1;
}
while(IRSIG==HI){
delay_us(6);
al_count=al_count+1;
}
// 2ch
el_count=0;
while(IRSIG==LOW){
delay_us(6);
el_count=el_count+1;
}
while(IRSIG==HI){
delay_us(6);
el_count=el_count+1;
}
// 3ch
th_count=0;
while(IRSIG==LOW){
delay_us(6);
th_count=th_count+1;
}
while(IRSIG==HI){
delay_us(6);
th_count=th_count+1;
}
// 4ch
rd_count=0;
while(IRSIG==LOW){
delay_us(6);
rd_count=rd_count+1;
}
while(IRSIG==HI){
delay_us(6);
rd_count=rd_count+1;
}
//************** Timer0 ******************
enable_interrupts(INT_RTCC);
if(al_count > 180){
delay_ms(100);
rd_trim=rd_trim+2;
}
if(al_count < 130){
delay_ms(100);
rd_trim=rd_trim-2;
}
if(el_count<105){
el_count=100;
}
if(el_count>180){
el_count=205;
}
if(el_count > 160){
el_duty=(el_count-155)*2;
}
else{
el_duty=0;
}
rev_mix=th_count;
if(th_count<110){
th_count=0;
}
else if(th_count>190){
th_count=1023;
}
else{
th_count=(th_count-100)*10; }
set_pwm1_duty(th_count);
rev_mix=rev_mix-100;
if(rd_count<110){
rd_count=100;
}
if(rd_count>200){
rd_count=200;
}
if(150 <= rd_count && rd_count <=160){
rd_count=155;
}
if(rev_mix < 45){
rd_duty=rev_mix+(rd_count-155)+rd_trim;
}
else{
rd_duty=rev_mix/10*7+14+(rd_count-155)+rd_trim;
}
}
}
|
Last edited by argo on Wed May 11, 2016 2:21 pm; edited 1 time in total |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19475
|
|
Posted: Wed May 11, 2016 1:53 pm |
|
|
Yes.
#int_rtcc
This defines the timer0 (rtcc) interrupt handler. |
|
|
argo
Joined: 11 May 2016 Posts: 2
|
|
Posted: Wed May 11, 2016 2:35 pm |
|
|
Thanks for the reply, Ttelmah. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|