如何对二进制文件中的每个位应用位操作(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。
答案 0 :(得分:1)
我认为您需要这样的功能,首先使用MSB:
@Test