以下代码显示,检查硬件上PORTB的数字输出。那个PORTB有UI1-UI12。 当它没有短路时,该值将为1.
所以如果没有什么东西短缺,当我在超级终端中编写UI5-UI7时,它将显示0x03(二进制为111位)
这里是代码:
void decode(unsigned char* msg) {
AD1PCFGL = 0xFFFF; //set all analog pin to digital
int y, z, x;
unsigned char* lala[50];
if (strstr(msg, "UI") == msg) {//UI[2]-UI[6]
x = msg[2] - '0'; // char to integer
y = msg[6] - '0'; // char to integer
//UI[2]-UI[6]
int start = x - 1; //get offset, start from zero
int end = y; // end
int pinValue; // each pin value
int output_value=0; // result
int j = 0, i; // j, start from 0
for (i = start; i < end; i++) {
pinValue = ((PORTB & (1 << i)) > 0 )?1:0; // get current pin value from RB3, RB4, RB5, RB6, RB7->UI4, UI5, UI6, UI7, UI8
output_value |= (pinValue << j++);
}
sprintf(lala, "0x%X \r\n", output_value); //%02x(hex),%X(HEX)
sendString(lala);// send to Hyper-Terminal
}
}
如何用两位数字包含msg [2]和msg [6]? 因为,从上面的代码来看,当我写UI10-UI12时出现问题,它会给出错误的结果。