hi all
am working in the following program and has two problems
i will talk about what th eprogram do and the problems
and please help me to solve it
first it for PIC 16F877A 4Mhz
its 5 inputs
RD2 FOR INCREASE SPEED
RD3 DOR DECREASE SPEED
RD4 TO START PROGRAM
RB0 (INTERRUPT)STOP PWM AND WHOLE PROGRAM THEN DISPLAY "STOP"
RA4 ENXTERNAL COUNTER
IN ADITION TO TIMER SECOUNDES AND MINUETES START WITH THE PROGRAM AND DISPLAYED ON LCD
THE SPEED AND DISTANCE DISPALYED ON LCD ..
THE PROBLEMS
1. WHEN INTERRUPT RB0 CANT USE THE DISPLAY AND I DONT KNOW HOW TO DO IT
2. FOR THE TIMER ITS LAG 18SEC FROM THE PROGRAM START AND IF PRESS OUN RD2 AND RD3 THE TIMER STOP AND LAG 18 SEC
SO PEASE HELP ME TO SOLVE THAT...
am working in the following program and has two problems
i will talk about what th eprogram do and the problems
and please help me to solve it
first it for PIC 16F877A 4Mhz
its 5 inputs
RD2 FOR INCREASE SPEED
RD3 DOR DECREASE SPEED
RD4 TO START PROGRAM
RB0 (INTERRUPT)STOP PWM AND WHOLE PROGRAM THEN DISPLAY "STOP"
RA4 ENXTERNAL COUNTER
IN ADITION TO TIMER SECOUNDES AND MINUETES START WITH THE PROGRAM AND DISPLAYED ON LCD
THE SPEED AND DISTANCE DISPALYED ON LCD ..
THE PROBLEMS
1. WHEN INTERRUPT RB0 CANT USE THE DISPLAY AND I DONT KNOW HOW TO DO IT
2. FOR THE TIMER ITS LAG 18SEC FROM THE PROGRAM START AND IF PRESS OUN RD2 AND RD3 THE TIMER STOP AND LAG 18 SEC
SO PEASE HELP ME TO SOLVE THAT...
Code:
Rich (BB code):
program functiontestpwm
dim z1 as byte
dim cnt as byte
sub procedure delay800 'delay 800ms
delay_ms(800)
end sub
sub procedure delay100 'delay 100ms
delay_ms(100)
end sub
sub procedure interrupt
if INTCON.INTF=1 then
intcon.intf=0
pwm_stop
end if
cnt = cnt + 1
pir1.0 = 0 ' Clear TMR1IF
end sub
sub function upspeed(dim x as byte) as byte 'increase speed
dim j as byte
j=x+10
if j>190 then
j=190
end if
result=j
end sub
sub function downspeed(dim r as byte)as byte 'decrease speed
dim f as byte
f=r-10
if f>200 then
f=0 end if
result=f
end sub
dim sec,min,a as byte 'decleration
dim min1,sec1 as string[3]
dim y,b,w,q,dist,se as byte
dim y1,q1,dist1 as string[3]
main:
b=1
z1=0
q=0
w=0
dist=0
tmr0=0
T1CON = 1
PIR1.TMR1IF = 0 ' Clear TMR1IF
PIE1 = 1 ' Enable interrupts
cnt = 0 ' Initialize cnt
option_reg=$68
intcon=$D0 'timer1 and RB0 interrupt
trisd=$ff
trisb=$00
trisa=$ff
portc=0
lcd_config(portb,7,6,5,4,portb,1,2,3)'display primary parameters
delay800
lcd_cmd(lcd_cursor_off)
lcd_out(1,1,"wait start.")
start:
delay800
lcd_cmd(lcd_clear)
delay800
lcd_out(1,1,"time spd dist.") 'dispay promary parameters
pwm_init(8000)'pwm initiat
delay100
pwm_start 'start pwm D.C=0
run:
'If cnt is 15, then inc sec untill =60 inc min and reset cnt
if cnt = 15 then 'timer
inc(sec)
bytetostr(sec,sec1)
lcd_out(2,3,sec1)
cnt = 0
if sec=59 then
inc(min)
sec=0
end if
end if
bytetostr(min,min1)
lcd_out(2,0,min1)
if portd.2=0 then'up-speed switch
delay800
z1=upspeed(z1)
end if
if portd.3=0 then 'down speed switch
delay800
z1=downspeed(z1)
end if
pwm_change_duty(z)'change speed
bytetostr(z1,y1)
lcd_out(2,8,y1) 'display speed
if tmr0=5 then 'shaft encoder signal to calvulate distance
inc(q)
tmr0=0
end if
bytetostr(q,q1)
lcd_out(2,12,q1)
goto run
end.
Last edited: