Estoy tratando de enviar un dato = 40 de matlab gui a pic16f877A a través de comunicación serial. Para la verificación cruzada, el valor se transmite correctamente a la imagen. También se transmitieron esos datos de imagen a matlab y se mostraron esos datos en texto editado en matlab gui. Me di cuenta de que el valor de edittext es 75. los datos recibidos se transmitieron tal como están sin ninguna manipulación, entonces ¿por qué cambió el valor? Alguien puede ayudarme . ¿Hay algún problema en mi encasillamiento?
código mikroc:
unsigned int setPoint;
char start;
función principal
void main() {
UART1_Init(9600);
setPoint=100; // initially setpoint is set to 100
.
.
.
while(1){
if (UART1_Data_Ready()){
start = UART1_Read();
}
if(start=='s'){ // if start button is pressed
do something....
}
else if(start=='g'){ // if stop button is pressed
do something....
}
else if(start=='r'){ // if refresh button is pressed
UART1_Write(1);
refresh=1;
while(refresh==1){
if(UART1_Data_Ready()){
setPoint=UART1_Read(); // reads data from matlab
refresh=0;
UART1_Write(setPoint); //transmits back to matlab
}
}
}
}
}
Código Matlab:
se ejecuta cuando se presiona el botón de inicio
function start_Callback(hObject, eventdata, handles) // start button in matlab
s = serial('COM2');
set(s,'BaudRate',9600);
set(s,'Timeout',10);
set(s,'ReadAsyncMode','continuous');
fopen(s);
handles=guidata(hObject);
handles.set=s; //passed serial comuunication object(s),so that it can be accessed in other callbacks
guidata(hObject,handles);
fprintf(s,'%c','s'); // send 's' to mikroc
i=1;
do something here....
ejecutado cuando se presiona el botón de parada
function stop_Callback(hObject, eventdata, handles) //stop button in matlab
setup=handles.set; //setup is serial communication object(setup=s)
fprintf(setup,'%c','g'); //send 'g' to mikroc
do something here.....
se ejecuta cuando se presiona el botón de actualización (el problema se encuentra en el botón de actualización)
function Refresh_Callback(hObject, eventdata, handles) //refresh button in matlab
setup=handles.set;
fprintf(setup,'%c','r'); // send r to mikroc
refresh=0;
while(refresh==0)
if(setup.BytesAvailable>0)
refresh = fread(setup,1,'uint8');
end
end
setpoint=str2num(get(handles.edit1,'String')); // take data from edit box (data =40)
fwrite(setup,setpoint); //writes data(40) to pic
setp=fread(setup,1,'uint8'); // receive data from pic
string1 = sprintf('set = %i', setp); //display in edit text
set(handles.edit5, 'String', string1);
fclose(setup)
delete(setup)
La salida que se muestra en el texto de edición es 75 y 40 cambian a 75. Soy nuevo en matlab gui.