Serout2/serin2 Pbp Problem


Closed Thread
Results 1 to 4 of 4
  1. #1
    Join Date
    Dec 2006
    Location
    WADSWORTH OHIO USA
    Posts
    37

    Question Serout2/serin2 Pbp Problem

    GREETINGS ALL!!
    AS USUAL I'M IN SEARCH OF THE OBVIOUS.
    I'M USING 2 PIC16F870'S AND PBP.
    IT CAN NOT BE THIS DIFFICULT TO TRANSFER A FOUR DIGIT NO. ie 1234
    FROM ONE PIC TO ANOTHER WITH ALL THE MAGIC PBP HAS.
    I SEEM TO BE MISSING THE INCANTATION, AND AM ASKING IF SOMEONE
    COULD RECITE IT FOR ME. FOLLOWING IS THE CODE.

    'PIC7 SENDING

    DEFINE OSC 20 'DEFINE OSCILLATOR
    DEFINE SER2_BITS 8

    AMP VAR WORD 'DEFINE VARIABLES
    AMPS VAR WORD
    ARX VAR BYTE[4]
    TDIR VAR BYTE
    CDIR VAR BYTE
    SDIR VAR BYTE
    STR1 VAR BYTE
    TIME VAR WORD
    TIMES VAR WORD
    ATEST VAR WORD
    TTEST VAR WORD
    TRX VAR BYTE[4]
    C VAR BYTE

    'EQUATES SECTION
    TRISA = %00110001 'SET PORTS I/O
    TRISB = %10011101
    TRISC = %00001111
    ADCON0 = %00000000
    ADCON1 = %00000011 'PORTA ALL DIGITAL
    TIME = 1234 'SET FOR TEST
    AMP=5678

    'MISC CODE xxxx OMITTED FOR BREVITY

    GOSUB SND6


    SND6: 'SEND DIGITS TO PIC6
    HIGH PORTB.2
    PAUSEUS 40
    Serout2 PORTB.5 \PORTB.6,84,[TIME,AMP]
    LOW PORTB.2
    RETURN

    'PIC6 RECIEVE

    DEFINE OSC 20 'DEFINE OSCILLATOR
    DEFINE SER2_BITS 8

    AS VAR WORD 'DEFINE VARIABLES
    A VAR WORD
    B VAR BYTE
    C VAR BYTE
    F VAR BYTE
    T VAR WORD
    TRC VAR BYTE[4]
    ARC VAR BYTE[4]

    'EQUATES SECTION
    TRISA = %00111110 'SET PORTS I/O
    TRISB = %00000000
    TRISC = %00000000
    ADCON0 = %00000000
    ADCON1 = %00000011 'PORTA ALL DIGITAL

    EEPROM 0,[129,243,73,97,51,37,5,241,1,49] 'STORE CONSTANTS

    LOOP: 'GET T & A FROM PIC 7
    IF PORTA.4 = 1 THEN
    SERIN2 PORTA.0 \PORTA.1,813,[T,A]
    AS = A * 10
    ENDIF

    LOOP1: 'DISPLAY T & A
    FOR C = 0 TO 3
    READ T DIG C, PORTB SET SEGMENT
    LOOKUP C,[$7F,$BF,$DF,$EF],PORTC 'SET DIGIT
    PAUSE f
    PORTC = $FF
    NEXT C
    FOR B = 0 TO 3
    READ AS DIG B, PORTB
    LOOKUP B,[$FE,$FD,$FB,$F7],PORTC
    PAUSE f
    PORTC = $FF
    NEXT B
    GOTO LOOP


    THANKS ALL!
    Last edited by SOMRU; - 7th December 2006 at 20:07.
    Thanks !
    SOMRU
    TWE/TFP/EE

  2. #2
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default check this

    Quote Originally Posted by SOMRU
    GREETINGS ALL!!
    AS USUAL I'M IN SEARCH OF THE OBVIOUS.
    I'M USING 2 PIC16F870'S AND PBP.
    IT CAN NOT BE THIS DIFFICULT TO TRANSFER A FOUR DIGIT NO. ie 1234
    FROM ONE PIC TO ANOTHER WITH ALL THE MAGIC PBP HAS.
    I SEEM TO BE MISSING THE INCANTATION, AND AM ASKING IF SOMEONE
    COULD RECITE IT FOR ME. FOLLOWING IS THE CODE.

    'PIC7 SENDING

    DEFINE OSC 20 'DEFINE OSCILLATOR
    DEFINE SER2_BITS 8

    AMP VAR WORD 'DEFINE VARIABLES
    AMPS VAR WORD
    ARX VAR BYTE[4]
    TDIR VAR BYTE
    CDIR VAR BYTE
    SDIR VAR BYTE
    STR1 VAR BYTE
    TIME VAR WORD
    TIMES VAR WORD
    ATEST VAR WORD
    TTEST VAR WORD
    TRX VAR BYTE[4]
    C VAR BYTE

    'EQUATES SECTION
    TRISA = %00110001 'SET PORTS I/O
    TRISB = %10011101
    TRISC = %00001111
    ADCON0 = %00000000
    ADCON1 = %00000011 'PORTA ALL DIGITAL
    TIME = 1234 'SET FOR TEST
    AMP=5678

    'MISC CODE xxxx OMITTED FOR BREVITY

    GOSUB SND6


    SND6: 'SEND DIGITS TO PIC6
    HIGH PORTB.2
    PAUSEUS 40
    Serout2 PORTB.5 \PORTB.6,<font color=red>84</font color>,[TIME,AMP]
    LOW PORTB.2
    RETURN

    'PIC6 RECIEVE

    DEFINE OSC 20 'DEFINE OSCILLATOR
    DEFINE SER2_BITS 8

    AS VAR WORD 'DEFINE VARIABLES
    A VAR WORD
    B VAR BYTE
    C VAR BYTE
    F VAR BYTE
    T VAR WORD
    TRC VAR BYTE[4]
    ARC VAR BYTE[4]

    'EQUATES SECTION
    TRISA = %00111110 'SET PORTS I/O
    TRISB = %00000000
    TRISC = %00000000
    ADCON0 = %00000000
    ADCON1 = %00000011 'PORTA ALL DIGITAL

    EEPROM 0,[129,243,73,97,51,37,5,241,1,49] 'STORE CONSTANTS

    LOOP: 'GET T & A FROM PIC 7
    IF PORTA.4 = 1 THEN
    SERIN2 PORTA.0 \PORTA.1,<font color=red>813</font color>,[T,A]
    AS = A * 10
    ENDIF

    LOOP1: 'DISPLAY T & A
    FOR C = 0 TO 3
    READ T DIG C, PORTB SET SEGMENT
    LOOKUP C,[$7F,$BF,$DF,$EF],PORTC 'SET DIGIT
    PAUSE f
    PORTC = $FF
    NEXT C
    FOR B = 0 TO 3
    READ AS DIG B, PORTB
    LOOKUP B,[$FE,$FD,$FB,$F7],PORTC
    PAUSE f
    PORTC = $FF
    NEXT B
    GOTO LOOP


    THANKS ALL!
    Hi, now calm down and please stop shouting
    look at the red highlights, I cannot find 84 as valid for serout2 - serin2 yes. if you are trying to send at 9600 baud then why receive at 1200 baud?

  3. #3
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by SOMRU
    GREETINGS ALL!!

    GOSUB SND6


    SND6: 'SEND DIGITS TO PIC6
    HIGH PORTB.2
    PAUSEUS 40
    Serout2 PORTB.5 \PORTB.6,84,[TIME,AMP]
    LOW PORTB.2
    RETURN

    THANKS ALL!

    In the above chunk, you Gosub SND6, the subroutine returns from it, and then you enter SND6, AND it RETURNS...to...nothing. Unless you've got some other code in there somewhere that you took out for brevity, it looks like you've got one of those deals where you're returning without GoSub'ing. That tends to send the PIC into la'la land. Check it out...
    JDG

  4. #4
    Join Date
    Dec 2006
    Location
    WADSWORTH OHIO USA
    Posts
    37


    Did you find this post helpful? Yes | No

    Default Sending It All

    GREETINGS AGAIN,
    HERE IS THE ENTIRE CODE FOR PIC7

    DEFINE OSC 20 'DEFINE OSCILLATOR
    DEFINE SER2_BITS 8

    AMP VAR WORD 'DEFINE VARIABLES
    AMPS VAR WORD
    ARX VAR BYTE[4]
    TDIR VAR BYTE
    CDIR VAR BYTE
    SDIR VAR BYTE
    STR1 VAR BYTE
    TIME VAR WORD
    TIMES VAR WORD
    ATEST VAR WORD
    TTEST VAR WORD
    TRX VAR BYTE[4]
    C VAR BYTE

    'EQUATES SECTION
    TRISA = %00110001 'SET PORTS I/O
    TRISB = %10011101
    TRISC = %00001111
    ADCON0 = %00000000
    ADCON1 = %00000011 'PORTA ALL DIGITAL

    AMP = 50 'INITIATE VARIABLES
    AMPS = 50
    CDIR = 0
    STR1 = 0
    TDIR = 0
    TIME = 1000
    TIMES = 1000

    'IT ALL STARTS HERE

    PAUSE 200 'RESTORE PREVIOUS VALUES
    READ 0,TIMES
    READ 1,AMPS
    READ 2,TIME
    READ 3,AMP
    PAUSE 100
    GOSUB SND6 'SEND TO PIC6
    LOP1: 'MAIN LOOP
    'IF PORTA.4 = 1 AND PORTA.5 = 0 THEN SND5 'SEND T&C TO PIC5
    IF PORTC.1 = 1 AND PORTC.2 = 0 THEN TADJ 'TIME ADJUST
    IF STR1 = 1 AND PORTC.1 = 0 THEN TADW 'SAVE TIME WHEN DONE
    IF PORTC.2 = 1 AND PORTC.1 = 0 THEN CADJ 'AMPS ADJUSTMENT
    IF STR1 = 2 AND PORTC.2 =0 THEN CADW 'SAVE AMPS WHEN DONE
    GOTO LOP1



    TADJ: TDIR = 1 'ADJUST TIME SETTING
    IF PORTB.3 = 0 AND PORTB.4 = 0 THEN TDIR = 2 'ZERO NOTCH
    IF TDIR = 2 THEN
    IF PORTB.3 = 1 AND PORTB.4 = 0 AND PORTC.3 = 0 THEN TDIR = 3
    IF PORTB.3 = 0 AND PORTB.4 = 1 AND PORTC.3 = 0 THEN TDIR = 4
    IF PORTB.3 = 1 AND PORTB.4 = 0 AND PORTC.3 = 1 THEN TDIR = 5
    IF PORTB.3 = 0 AND PORTB.4 = 1 AND PORTC.3 = 1 THEN TDIR = 6
    ENDIF
    SELECT CASE TDIR
    CASE 1
    GOTO LOP1
    CASE 2
    GOTO LOP1
    CASE 3
    IF TIME < 2790 THEN TIME = TIME + 10
    CASE 4
    IF TIME > 19 THEN TIME = TIME - 10
    CASE 5
    IF TIME < 2799 THEN TIME = TIME + 1
    CASE 6
    IF TIME > 9 THEN TIME = TIME - 1
    END SELECT
    STR1 = 1
    GOSUB SND6 'T OR C CHANGED
    GOTO LOP1

    TADW: READ 0, TIMES 'STORE TIME
    IF TIMES <> TIME THEN WRITE 0, TIME
    READ 0, TTEST
    IF TTEST <> TIME THEN WRITE 2, TIME
    STR1 = 0
    GOTO LOP1

    CADJ: CDIR = 0
    IF PORTB.3 = 0 AND PORTB.4 = 0 THEN CDIR = 2 'ZERO NOTCH
    IF CDIR = 2 THEN
    IF PORTB.3 = 1 AND PORTB.4 = 0 AND PORTC.3 = 0 THEN CDIR = 3
    IF PORTB.3 = 0 AND PORTB.4 = 1 AND PORTC.3 = 0 THEN CDIR = 4
    IF PORTB.3 = 1 AND PORTB.4 = 0 AND PORTC.3 = 1 THEN CDIR = 5
    IF PORTB.3 = 0 AND PORTB.4 = 1 AND PORTC.3 = 1 THEN CDIR = 6
    ENDIF
    SELECT CASE CDIR
    CASE 1
    GOTO LOP1
    CASE 2
    GOTO LOP1
    CASE 3
    IF AMP < 2550 THEN AMP = AMP + 10
    CASE 4
    IF AMP > 50 THEN AMP = AMP - 10
    CASE 5
    IF AMP < 2549 THEN AMP = AMP + 1
    CASE 6
    IF AMP > 50 THEN AMP = AMP - 1
    END SELECT
    STR1 = 2
    GOSUB SND6
    GOTO LOP1

    CADW: READ 1, AMPS 'STORE AMPS
    IF AMPS <> AMP THEN WRITE 1, AMP
    READ 1, ATEST
    IF ATEST <> AMP THEN WRITE 3, AMP
    STR1 = 0
    GOTO LOP1

    SND5: IF TIMES <> TIME THEN TIMES = TIME 'SEND TO PIC5
    WRITE 0, TIME
    IF AMPS <> AMP THEN AMPS = AMP
    WRITE 2, AMP
    SEROUT2 PORTC.5\PORTC.6,84,[TIME,AMP]
    GOTO LOP1

    'SUBPROGRAM SECTION

    SND6: 'SEND DIGITS TO PIC6
    HIGH PORTB.2
    PAUSEUS 40
    Serout2 PORTB.5 \PORTB.6,84,[TIME,AMP]
    LOW PORTB.2
    RETURN

    AND HERE IS THE ENTIRE CODE FOR PIC6

    DEFINE OSC 20 'DEFINE OSCILLATOR
    DEFINE SER2_BITS 8

    AS VAR WORD 'DEFINE VARIABLES
    A VAR WORD
    B VAR BYTE
    C VAR BYTE
    F VAR BYTE
    T VAR WORD
    TRC VAR BYTE[4]
    ARC VAR BYTE[4]

    'EQUATES SECTION
    TRISA = %00111110 'SET PORTS I/O
    TRISB = %00000000
    TRISC = %00000000
    ADCON0 = %00000000
    ADCON1 = %00000011 'PORTA ALL DIGITAL

    A = 0 'INITIATE VARIABLES
    AS = 0
    B = 0
    C = 0
    F = 2
    T = 0

    'IT ALL STARTS HERE
    PAUSE 200
    EEPROM 0,[129,243,73,97,51,37,5,241,1,49] 'STORE CONSTANTS

    LOOP: 'GET T & A FROM PIC 7
    IF PORTA.4 = 1 THEN
    SERIN2 PORTA.0 \PORTA.1,84,[T,A]
    ENDIF

    LOOP1: 'DISPLAY T & A
    FOR C = 0 TO 3
    READ T DIG C, PORTB
    LOOKUP C,[$7F,$BF,$DF,$EF],PORTC 'SET DIGIT
    PAUSE f
    PORTC = $FF
    NEXT C
    FOR B = 0 TO 3
    READ AS DIG B, PORTB
    LOOKUP B,[$FE,$FD,$FB,$F7],PORTC
    PAUSE f
    PORTC = $FF
    NEXT B
    GOTO LOOP

    PIC7 IS TO STORE AND ADJUST THE TWO VARIABLES FOR TIME AND CURRENT,
    SEND IT TO PIC5 AND PIC6 UPON DEMAND
    TRYING TO PULL RABBITS FROM HAT AT THIS POINT,

    APPOLOGIES FOR SHOUTING

    THANKS ALL!!
    Thanks !
    SOMRU
    TWE/TFP/EE

Similar Threads

  1. PBP 2.60 & ADCON1 problem
    By bitbangerbob in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 21st October 2009, 12:06
  2. Strange problem with PBP 2.50
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 16th October 2007, 20:45
  3. Big Problem in PBP To receive DMX
    By programmer07 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 4th March 2007, 18:49
  4. Problem with PBP interrupt and Serin, please help
    By rgregor in forum mel PIC BASIC
    Replies: 0
    Last Post: - 22nd August 2006, 19:02
  5. Problem DEFINE OSCCAL and PBP 2.46
    By David in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 22nd April 2005, 17:19

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts