this code is for length measurements with encoder. Main aim is to count pulse from encoder and Synchronously shift out counter Var on ClockPin and Data Pin to another PIC.
Problem is, counter section and SHIFOUT is working but SHIFTIN on another PIC not working.
@Config = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _BODEN_OFF
Define PIC16F877A
DEFINE OSC 4
INCLUDE "MODEDEFS.BAS"
CMCON = 7
ADCON1 = 7
CVRCON = %00000000 'CVref turned off
TRISA = %11111111
TRISB = %11111111 ' Portb.0 = Encoder input
TRISC = %11111111
TRISD = %11111111
TRISE = %000
Symbol HC_latch = PORTE.2 ' pin 10
symbol HC_Data = PORTE.1 ' pin 9
SYMBOL HC_Clk = PORTE.0 ' pin 8
Dummy VAR WORD
pitch var word
pitch = 62206
W1 var word
B1 VAR BYTE
B2 VAR BYTE
B3 VAR BYTE
B4 VAR BYTE
B5 VAR BYTE
W0 VAR WORD
DIGIT1 VAR BYTE
DIGIT2 VAR BYTE
DIGIT3 VAR BYTE
DIGIT4 VAR BYTE
DIGIT5 VAR BYTE
DIGIT6 VAR BYTE
MASK VAR BYTE
B1 = 0
B2 = 0
B3 = 0
B4 = 0
B5 = 0
W0 = 0
E1 VAR BYTE
E2 VAR BYTE
E3 VAR BYTE
E4 VAR BYTE
E5 VAR BYTE
PAUSE 500
OPTION_REG = %00000000
On Interrupt Goto myint
INTCON = $90
LOOP: IF PORTA.0 = 1 THEN W0 = 0 'Reset Counter
dummy = pitch * W0
w1 = div32 1000
w1 = w1/10
w1 = w1/6
B1 = W1 DIG 0
B2 = W1 DIG 1
B3 = W1 DIG 2
B4 = W1 DIG 3
B5 = W1 DIG 4
'------------------------------------------
DIGIT1 = B1
LOOKUP DIGIT1,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],MASK
E1 = MASK
'------------------------------------------
DIGIT2 = B2
LOOKUP DIGIT2,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],MASK
E2 = MASK
'-------------------------------------------
DIGIT3 = B3
LOOKUP DIGIT3,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],MASK
E3 = MASK
'----------------------------------------
DIGIT4 = B4
LOOKUP DIGIT4,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],MASK
E4 = MASK
'---------------------------------------
DIGIT5 = B5
LOOKUP DIGIT5,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],MASK
E5 = MASK
'---------------------------------------
HC_Latch=0
shiftout HC_data, HC_Clk, MSBFIRST,[E1,E2,E3,E4,E5,$ff]
pauseus 1
HC_Latch=1
'---------------------------------------
GOTO LOOP
Disable
myint:
W0 = W0 +1
INTCON.1 = 0
resume
Enable
__________________________________________________ ______________
Recive data on another chip
@Config = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _BODEN_OFF
Define PIC16F877A
DEFINE OSC 4
INCLUDE "MODEDEFS.BAS"
INCLUDE "MYLCD.BAS"
CMCON = 7
ADCON1 = 7
CVRCON = %00000000 'CVref turned off
TRISA = %11111111
TRISB = %11111111
TRISC = %11111111
TRISD = %11111111
TRISE = %111
Symbol HC_latch = PORTE.2 ' pin 10
symbol HC_Data = PORTE.1 ' pin 9
SYMBOL HC_Clk = PORTE.0 ' pin 8
E1 VAR BYTE
E2 VAR BYTE
E3 VAR BYTE
E4 VAR BYTE
E5 VAR BYTE
main: HC_Latch=0
shiftin HC_data, HC_Clk, MSBFIRST,[E1,E2,E3,E4,E5,$ff]
pauseus 1
HC_Latch=1
lcdout $fe,1
lcdout E5,E4,E3,E2,E1
pause 500
goto main
.
Bookmarks