USART code not sending data

Discussion in 'Embedded Systems and Microcontrollers' started by ozirock, Jun 5, 2011.

  1. ozirock

    Thread Starter Member

    Jan 13, 2011
    44
    0
    Hi guy's,

    I was wondering if anyone can see the problem with my code, I had it set up to receive and transmit using code I found on the net, got the receive part working okay but my transmit wasn't so I cut it down to just the transmit part as you can see below

    Code ( (Unknown Language)):
    1.                 PROCESSOR PIC16F876
    2.                 INCLUDE   <P16F876.inc>
    3.  
    4. #define VERSION "=Serial_Com_A===V0.1=="
    5.  
    6.     __CONFIG        _CP_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_ENABLE_ON & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _XT_OSC
    7.  
    8. ;==========================================================================
    9. ;       Variable Definition
    10. ;==========================================================================
    11.  
    12.     CBLOCK 0x20             ;Start at H'20'
    13.     TIMER1                  ;Used in delay routine
    14.     TIMER2                  ; " "   "
    15.     DATA_TO_SEND
    16.     ENDC
    17.  
    18.         ORG 0       ;Reset vector address
    19.         GOTO    RESET       ;goto RESET routine when boot.
    20.  
    21.  
    22.  
    23. ;       *********************************************
    24. ;       *  Example of a delay routine               *
    25. ;       *********************************************
    26.  
    27. DELAY_ROUTINE   MOVLW   D'255'         ;54 Generate approx 10mS delay at 4Mhz CLK
    28.                 MOVWF   TIMER2
    29. DEL_LOOP1       MOVLW   D'255'         ;60 
    30.                 MOVWF   TIMER1
    31. DEL_LOOP2       DECFSZ  TIMER1,F
    32.                 GOTO    DEL_LOOP2
    33.                 DECFSZ  TIMER2,F
    34.                 GOTO    DEL_LOOP1
    35.         RETLW   0
    36.  
    37.  
    38. ;
    39. ; -------------------------------------------------------------
    40. ; SEND CHARACTER IN W VIA RS232 AND WAIT UNTIL FINISHED SENDING
    41. ; -------------------------------------------------------------
    42. ;
    43. send        movwf   TXREG             ; send data in W
    44.  
    45. TransWt     bsf     STATUS,RP0          ; RAM PAGE 1
    46. WtHere      btfss   TXSTA,TRMT        ; (1) transmission is complete if hi
    47.             goto    WtHere
    48.  
    49.             bcf     STATUS,RP0          ; RAM PAGE 0
    50.             return
    51.  
    52.  
    53.  
    54. ;          **********************************
    55. ;              **  RESET :  main boot routine  **
    56. ;              **********************************
    57.  
    58. RESET       BSF STATUS,RP0  ;Switch to register bank 1
    59.                     ;Disable pull-ups
    60.                     ;INT on rising edge
    61.                     ;TMR0 to CLKOUT
    62.                     ;TMR0 Incr low2high trans.
    63.                     ;Prescaler assign to Timer0
    64.                     ;Prescaler rate is 1:256
    65.                            
    66.                    
    67.         MOVLW   B'11010111' ;Set PIC options (See datasheet).
    68.         MOVWF   OPTION_REG  ;Write the OPTION register.
    69.                     ;
    70.         CLRF    INTCON      ;Disable interrupts
    71.        
    72.         MOVLW   B'10000001'
    73.         MOVWF   TRISC       ;bit 0 and 7 are inputs all others are outputs
    74.        
    75.         MOVLW   B'00000000'
    76.         MOVWF   TRISB       ;all RB ports are outputs
    77.                    
    78.         MOVLW   B'00000000' ;all RA are outputs
    79.         MOVWF   TRISA
    80.        
    81.         movlw   d'25'       ;  
    82.             movwf   SPBRG       ; set Baud rate to9600 @ 4Mhz(crystal)
    83.        
    84.         movlw   B'00100110'         ;      
    85.             movwf   TXSTA       ; enable 8bit data transmission
    86.        
    87.         BCF STATUS,RP0  ;Switch Back to reg. Bank 0
    88.            
    89.             movlw   B'10010000'         ;
    90.         movwf   RCSTA       ; enable 8bit data reception
    91.  
    92.  
    93. main        movlw   B'01100001'
    94.  
    95.         movwf   DATA_TO_SEND
    96.  
    97.         movf    DATA_TO_SEND,W
    98.  
    99.         call    send
    100.        
    101.         call    DELAY_ROUTINE
    102.        
    103.         call    DELAY_ROUTINE
    104.        
    105.         goto    main
    106.        
    107.        
    108.        
    109. ;****End of the program****        
    110.  
    111.         END
    I'm pretty sure the problem is on the microcontroller side of things rather than the PC but I can't see what's wrong.
     
Loading...