This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

assembler in c, UART

Hi i have got code for an assembler software UART in c51.
normally putchar() is of type unsigned char but with the assembler code how do i do this?

void putc()
{
#pragma asm
  * Transmit character in A via TXD line
  *
  putc  CLR     TXD             Drop line for start bit
        MOV     R0,#BITTIM      Wait full bit-time
        DJNZ    R0,*            For START bit
        MOV     R1,#8           Send 8 bits
  putc1 RRC     A               Move next bit into carry
        MOV     TXD,C           Write next bit
        MOV     R0,#BITTIM      Wait full bit-time
        DJNZ    R0,*            For DATA bit
        DJNZ    R1,putc1        write 8 bits
        SETB    TXD             Set line high
        RRC     A               Restore ACC contents
        MOV     R0,#BITTIM      Wait full bit-time
        DJNZ    R0,*            For STOP bit
        RET
  *
#pragma endasm
}

Parents
  • ok i have done that but it is still not working?

    void putc(unsigned char c)
    {
    #pragma asm
    * Transmit character in A via TXD line
    *
            MOV     DPTR,#c?441
            MOV     A,R7
            MOVX    @DPTR,A
    putc    CLR     TXD             Drop line for start bit
    
            MOV     R0,#BITTIM      Wait full bit-time
            DJNZ    R0,*            For START bit
            MOV     R1,#8           Send 8 bits
    putc1   RRC     A               Move next bit into carry
            MOV     TXD,C           Write next bit
            MOV     R0,#BITTIM      Wait full bit-time
            DJNZ    R0,*            For DATA bit
            DJNZ    R1,putc1        write 8 bits
            SETB    TXD             Set line high
            RRC     A               Restore ACC contents
            MOV     R0,#BITTIM      Wait full bit-time
            DJNZ    R0,*            For STOP bit
            RET
    *
    #pragma endasm
    }
    
    

    these are the new lines that were created:

            MOV     DPTR,#c?441
            MOV     A,R7
            MOVX    @DPTR,A
    

Reply
  • ok i have done that but it is still not working?

    void putc(unsigned char c)
    {
    #pragma asm
    * Transmit character in A via TXD line
    *
            MOV     DPTR,#c?441
            MOV     A,R7
            MOVX    @DPTR,A
    putc    CLR     TXD             Drop line for start bit
    
            MOV     R0,#BITTIM      Wait full bit-time
            DJNZ    R0,*            For START bit
            MOV     R1,#8           Send 8 bits
    putc1   RRC     A               Move next bit into carry
            MOV     TXD,C           Write next bit
            MOV     R0,#BITTIM      Wait full bit-time
            DJNZ    R0,*            For DATA bit
            DJNZ    R1,putc1        write 8 bits
            SETB    TXD             Set line high
            RRC     A               Restore ACC contents
            MOV     R0,#BITTIM      Wait full bit-time
            DJNZ    R0,*            For STOP bit
            RET
    *
    #pragma endasm
    }
    
    

    these are the new lines that were created:

            MOV     DPTR,#c?441
            MOV     A,R7
            MOVX    @DPTR,A
    

Children