我们正在对图片进行编程,并且我们已经诊断出,如果我们在尝试向我们发送数据时将数据发送到串行端口,则程序将锁定(我们的 python 代码和超级终端在测试时都会崩溃)。它在超级终端中工作并缓慢输入(笔画之间>.5 秒),并且在敲击键盘时会崩溃。所以我们所做的是引入一个超过 0.5 秒的 time.sleep,但它仍然无法正常工作。
这是我们的测试代码。
import serial
import time
ser = serial.Serial("COM1")
ser.baudrate=2400
while 1:
for i in range(23):
ser.write(0x41)
time.sleep(.5)
print("ok")
rec = ser.read()
rec2 = ser.read()
rec3 = ser.read()
print(rec)
print(rec2)
print(rec3)
for i in range(23):
data = ser.read()
print(data)
print("ok")
time.sleep(5)
我们的接收数据功能。我们过去每次收到一个字符时都会发送“ok”(这就是我们知道它在 3 次迭代后冻结的方式)。我们把它带到了循环之外,看看这是否导致了问题,但事实并非如此。它根本没有用这个代码发送“ok”。
unsigned char receiveData(unsigned char *rxData, int length){
// 1. Flag bit, RCIF, will be set when reception is complete and an interrupt will be generated if enable bit, RCIE, was set.
char send[3] = "ok";
int index = 0;
if(rxData==(void*)0 || rxInitialized==FALSE) return FAILURE;
while(index<length){
while(PIR1bits.RCIF==0);
rxData[index]= RCREG;
Delay1KTCYx(5);
index++;
}
configureTransmission();
sendData(send,3);
// 2. Read the RCSTA register to get the 9th bit (if enabled) and determine if any error occurred during reception.
// 3. Read the 8-bit received data by reading the RCREG register.
// 4. If any error occurred, clear the error by clearing enable bit CREN.
return SUCCESS;
}