Prima di tutto ringrazio aika per le risposte.
Nel codice che inserisco ora, invece di tempo1 e tempo(), per evitare confusioni, ho inserito gli identificatori cronometro e muove() e uso l'indentazione che avevo tolto per accorciare il programma e vederlo meglio in una schermata.
Funziona perfettamente perché ho commentato le righe
// function avvia() {
// }
Ma se si toglie il commento alle due righe, la funzione muove() diventa interna alla funzione avvia() e, non so perché, non viene riconosciuta e dà l'errore "muovi is not a function".
E' da notare che, nel secondo programma che ho inserito precedentemente, la funzione muove(), che è interna ad avvia(), è riconosciuta ed eseguita correttamente.

Il motivo del malfunzionamento non è quindi la confusione di identificatori. Ringraziando ancora per l'aiuto spero di trovare il motivo del malfunzionamento


lanvoel

codice:
<!doctype html>
<html>
<body>
<canvas id="myCanvas" width"300" height="200" style="border:1px solid red; background:cyan";></canvas>
<br>
<input type="button" value="avvia1" onclick="avvia()">
<input type="button" value="ferma" onclick="ferma()">
<script>
var cronometro;
var x=1;
var y=1;
dx=1;
dy=1;
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");


//function avvia() {
      cronometro=window.setInterval("muove()",10);
function muove() {
   ctx.clearRect(0,0,myCanvas.width, myCanvas.height);
   if(dx==1) {
   x++;
   if(x>=280) {dx=-1}
   }
   if(dx==-1){
   x--;
   if(x<=0) {dx=1}
   }
   if(dy==1) {
   y++;
   if(y>=180) {dy=-1}
   }
   if(dy==-1){
   y--;
   if(y<=0) {dy=1}
   }
ctx.beginPath()
ctx.strokeStyle="red";
ctx.lineWidth=4;
ctx.fillStyle="blue"
ctx.arc(10+x,10+y,10,0,2*Math.PI);
ctx.fill();
ctx.stroke();
ctx.closePath();
   } 
//}


function ferma() {
clearInterval(cronometro);
}


</script>
</body>
</html