You can add a delay with the "timer()" command. Using "timer()" makes sure the delay is consistently accurate.
I changed your code around a bit. It's better to check for the key and the delay first then do a check to see if it's within the bounds of the screen. If the routines for actually moving the player aren't that big I suggest you remove the "gosub"s and put the actual moving code within the arrow key checking. There's no need to go somewhere else to do what you can do right where you are.
It's also indented your code. Indenting helps us to prevent and quickly find those annoying nesting errors. Its makes code easier to read too.
sync on : sync rate 60
width=screen width()
height=screen height()
player_x=100
player_y=100
` Set the timer
tim=timer()
` The timer() command tracks time by milliseconds so 1000 = one second
delay=200
do
Rem move the player with right arrow key
` Check key and timer to see if the time is up
if rightkey() and timer()>tim+delay
if player_x < width then gosub go_right
` Reset timer
tim=timer()
endif
if leftkey() and timer()>tim+delay
if player_x > 1 then gosub go_left
` Reset timer
tim=timer()
endif
if upkey() and timer()>tim+delay
if player_y > 1 then gosub go_up
` Reset timer
tim=timer()
endif
if downkey() and timer()>tim+delay
if player_y < height then gosub go_down
` Reset timer
tim=timer()
endif
Rem update the player
`worldmap(player_y, player_x) = player_id
`gosub render_game
sync
loop
go_right:
print "right"
return
go_left:
print "left"
return
go_up:
print "up"
return
go_down:
print "down"
return