code under modal operator gets executed only when mouse is moved or a key is pressed
What you are looking for probably, is running a timer alongside the modal operator, so you can check the serial data whenever the operator gets executed with a timer event.

There already is a code template in blender, that shows you how to do this.
Look for the Template menu entry at the bottom of the Text Editor and select Python > Operator Modal Timer 

The relevant code is in the execute function:

wm = context.window_manager
self._timer = wm.event_timer_add(0.1, context.window)


The 0.1 controls the time interval between successive timer events in seconds.

Then you can check for a timer event in modal with:

if event.type == 'TIMER':


And for cleanup in the cancel function:

wm = context.window_manager
wm.event_timer_remove(self._timer)