Here is my latest code. All this really does is check for switches and disable drives, and shift PORTa to PORTc every 5 uS. It also sends a servo pulse out every 20mS with a pulse time sweeping from 1-2 ms just for testing purposes.
Right now, everything seems to work, but I need to remove the RED line from the interupt. When I comment it out, it seems to hang in the interupt and never leave. Uncomment and it works again. I have been struggling with this for a week, so I figured I would just ask and get the answer.
Code:' Name : Interface card.pbp ' Compiler : PICBASIC PRO Compiler 2.6A ' Assembler : MPASM ' Target PIC : 16F1947 ' Hardware : PIMill Interface ' Oscillator : internal ' Keywords : ' Description : PICBASIC PRO program to interface parallel port ' to 4 stepper drives and limit switches ' ' ' ' ' Configure ports ' ' ANSELA = %00000000 'port A all digital ANSELE = %00000000 'port E all digital ANSELF = %00000000 'port F all digital ANSELG = %00000000 'port G all digital CM1CON0 = %00000000 'No comparaters CM1CON1 = %00000000 CM2CON0 = %00000000 CM2CON1 = %00000000 ' preload latches before setting direction LATB = %00000000 LATC = %00000000 LATD = %00010000 'LED's 0 for red, 1 FOR GREEN should start red LATF = %00001111 ' low nibble is drive enable. 1 disables LATG = %00000000 ' I/O direction TRISA = %11111111'step and dir inputs TRISB = %11000001'7-0 icsp,icsp,h4o,h3o,h2o,h1o,estopO,enable In TRISC = %00000000'step and dir outputs TRISD = %00000000'led6,i2c,i2c,led5,led4,led3,led2,led1 TRISE = %11111111'ls4,lsh4.ls3,lsh3,ls2,lsh2,ls1,lsh1 TRISF = %00010000'spindle dir,servo out,dac out,flood input,4en,3en,2en,1en TRISG = %11100111'x,x,icsp/mclr,rly2,rly1,Rx2,Tx2,DI 'REMOVE THIS LINE IF NOT SETTING THE CONFIGS IN CODE SPACE @ __config _CONFIG1,_FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF @ __config _CONFIG2,_WRT_OFF & _VCAPEN_OFF & _PLLEN_ON & _STVREN_OFF & _BORV_25 & _LVP_OFF 'Internal osc setup OSCCON = %11110000 'clock is 8 meg. turn on PLL for 32 meg clock DEFINE OSC 32 'Variables LED0 VAR PORTD.0 ' Assign name "LED" to PORTD LED1 VAR PORTD.1 LED2 VAR PORTD.2 LED3 VAR PORTD.3 LED4 VAR PORTD.4 LED5 VAR PORTD.7 SERVO VAR PORTF.6 CNT VAR BYTE MYFLAGS VAR BYTE COUNTUP VAR MYFLAGS.0 COUNTDN VAR MYFLAGS.1 MS VAR MYFLAGS.2 ENALL VAR PORTB.0 TEMPF VAR BYTE FRAMECOUNT VAR BYTE POS VAR BYTE EN1 VAR PORTF.0 EN2 VAR PORTF.1 EN3 VAR PORTF.2 EN4 VAR PORTF.3 COUNTUP = 1 COUNTDN = 0 POS = 1 FRAMECOUNT = 0 MS = 0 CNT = 0 '5.0 uSec OR 200,000 Hz INTERRUPTS 'PRELOAD 39 PR = NUMBER OF CYCLES-1 'INT HANDLER COMPLIMENTS OF DARREL TAYLOR PRELOAD VAR byte PRELOAD = 39 ' FROM TESTING TO FIND THE RIGHT NUMBER PR2 = PRELOAD PIE1.1 = 1 ; Enable Timer2 interrupts INTCON.6 = 1 ; enable PEIE INTCON.7 = 1 ; enable GIE T2CON = %00000100 ; Start Timer2 DEFINE INTHAND _FiveMicroSec '---[TMR2 - interrupt handler]-------------------------------------------------- FiveMicroSec: LATF = LATF ^ 1 ; TOGGLE EN1 CNT =CNT+1 PORTC = PORTA PIR1.1 = 0 ; clear the interrupt flag @ NOP @ RETFIE Main: 'DO WHATEVER YOU WANT HERE IF ENALL = 0 THEN GOTO NOTREADY ELSE GOTO READY ENDIF READYRETURN: IF CNT >= 200 THEN ' TOGGLE EN2 TOGGLE LED5 CNT=0 FRAMECOUNT = FRAMECOUNT + 1 MS = 1 ENDIF IF FRAMECOUNT >=20 THEN FRAMECOUNT = 0 MS=0 HIGH SERVO IF COUNTUP THEN POS = POS + 1 IF COUNTDN THEN POS = POS - 1 ENDIF ' TOGGLE LED2 IF PORTE != $FF THEN SWITCHHIT GOTO SERVOCHECK GOTO Main SERVOCHECK: IF MS =1 THEN IF CNT >= POS THEN LOW SERVO MS =0 IF (COUNTUP = 1) AND (POS=199) THEN COUNTUP = 0 COUNTDN = 1 ELSE IF POS = 1 THEN COUNTUP = 1 COUNTDN = 0 ENDIF ENDIF ENDIF ENDIF GOTO MAIN SWITCHHIT: PORTF = PORTF | $0F IF (PORTE = 253) OR (PORTE = 254) THEN LED0 = 0 IF (PORTE = 247) OR (PORTE = 251) THEN LED1 = 0 IF (PORTE = 223) OR (PORTE = 239) THEN LED2 = 0 IF (PORTE = 127) OR (PORTE = 191) THEN LED3 = 0 ' ELSE PORTE = PORTE |$0F GOTO MAIN NOTREADY: PORTD = PORTD & $F0 PORTF = PORTF | $0F IF ENALL = 0 THEN NOTREADY PORTD = PORTD | $0F PORTF = PORTF & $F0 GOTO MAIN READY: PORTF = PORTF & $F0 PORTD = PORTD | $0F GOTO READYRETURN




Bookmarks