位操作,ASCII二进制

时间:2018-11-15 14:52:17

标签: c pic

如何对二进制文件中的每个位应用位操作(AND清除,OR设置以及可能的XOR检查)?我想做的是输入一个字符或字符串,然后以二进制形式将消息输出到我的MCU上的特定输出引脚。我想使用位操作,因为为ascii表上的每个字符创建一个函数会占用我的MCU大量的内存。

到目前为止,我看到的是我已经设置了引脚输出并将每个位声明为变量。到目前为止,这有意义吗?

void bits (void)
{
    #define RSTEST PORTBbits.RB5 //Declaring the port for serial
    #define RSOUT   TRISBbits.RB5 = 0 //Sets the port RB5 as an output

    unsigned int b0 = 0 ; // Binary 00000000
    unsigned int b1 = 0 ;
    unsigned int b2 = 0 ;
    unsigned int b3 = 0 ;
    unsigned int b4 = 0 ;
    unsigned int b5 = 0 ;
    unsigned int b6 = 0 ;
    unsigned int b7 = 0 ;

}

我要这样做的原因是因为为每个ASCII代码编写一个函数很长且不必要的存储空间。

void main(void)
{

      while (1)
    {
             RSTEST ; // same config as above
//           RSOUT = 1 ; // MSB
//           __delay_ms(10); 
//           RSOUT = 0 ; // START
//           __delay_us(25);
//           RSOUT = 0 ; // 1
//           __delay_us(25);
//           RSOUT = 1 ; // 2
//           __delay_us(25);
//           RSOUT = 0 ; // 3
//           __delay_us(25);
//           RSOUT = 1 ; // 4
//           __delay_us(25);
//           RSOUT = 0 ; // 5
//           __delay_us(25);
//           RSOUT = 0 ; // 6
//           __delay_us(25);
//           RSOUT = 1 ; // 7
//           __delay_us(25);
//           RSOUT = 0 ; // 8
//           __delay_us(25);
//           RSOUT = 1 ; // STOP
//           
//           RSOUT = 1 ; // MSB
//           __delay_ms(10); 
//           RSOUT = 0 ; // START
//           __delay_us(25);
//           RSOUT = 0 ; // 1
//           __delay_us(25);
//           RSOUT = 0 ; // 2
//           __delay_us(25);
//           RSOUT = 0 ; // 3
//           __delay_us(25);
//           RSOUT = 0 ; // 4
//           __delay_us(25);
//           RSOUT = 1 ; // 5
//           __delay_us(25);
//           RSOUT = 1 ; // 6
//           __delay_us(25);
//           RSOUT = 0 ; // 7
//           __delay_us(25);
//           RSOUT = 0 ; // 8
//           __delay_us(25);
//           RSOUT = 1 ; // STOP
//           
//           RSOUT = 1 ; // MSB
//           __delay_ms(10); 
//           RSOUT = 0 ; // START
//           __delay_us(25);
//           RSOUT = 1 ; // 1
//           __delay_us(25);
//           RSOUT = 0 ; // 2
//           __delay_us(25);
//           RSOUT = 1 ; // 3
//           __delay_us(25);
//           RSOUT = 0 ; // 4
//           __delay_us(25);
//           RSOUT = 0 ; // 5
//           __delay_us(25);
//           RSOUT = 0 ; // 6
//           __delay_us(25);
//           RSOUT = 1 ; // 7
//           __delay_us(25);
//           RSOUT = 0 ; // 8
//           __delay_us(25);
//           RSOUT = 1 ; // STOP

    }
}

所有这些行仅用于打印JOE。

我可以和printf(“ JOE”)类似吗?

我不想使用Tx和Rx硬件EUSART,而要使用软件EUSART。

1 个答案:

答案 0 :(得分:1)

我认为您需要这样的功能,首先使用MSB:

@Test