Не удается правильно перевести числа в 16 сс

В данная программа должна реализовать алгоритмы перевода числа из 10сс в 16сс. При вводе чисел меньше 16 всё верно, однако от 17 и дальше программа игнорирует целые числа. Я предполагаю, что это из-за того что строки не складываются(полученная после первого условия). Как можно исправить данную программу.

<html>
<head>
<meta charset="UTF-8">
<title>Перевод в СС</title>
</head>
<style>
#Input { position: fixed; margin-left: -500px; margin-top: 30px; }
#Button { margin-top: 100px; margin-left: 20px; height: 30px; }
</style>
<body>
<p><input type="text" id="vvod">
<p><input type = "button" id="but" onclick="change1()" value = "Перевод в 16 СС" >
<input type="text" id="vivod1"> 
<script type='text/javascript'>
function change1() 
{
var v = document.getElementById('vvod').value;
var k = document.getElementById('vivod1');
var p = "";
var r = 0;
var znak = " ";
var s= "p";
if(v<0)
{
znak="-";
v=Math.abs(v);
}
do{
r = v % 16;
if (r < 10)
{
p = String.fromCharCode('0'.charCodeAt(0) + r) + p;
}
else
{
p = String.fromCharCode('A'.charCodeAt(0) - 10 + r)+ p;
}
v = v / 16;
} while(v = 0);
k.value=znak+p;
}
</script>
</body>
</html>

Так а зачем предполагать. Используйте отладчик и/или консоль.

Консоль разработчика
Отладка в браузере

прошёлся в отладчике.
главная ошибка в строке

во-первых, это не сравнение, а присвоение переменной v значения ноль
а во-вторых, цикл нужно продолжать пока v не равно нулю.

и деление лучше заменить на целочисленное деление

  v = Math.floor(v / 16);

при получении значения v лучше его переводить в числовой вид. для этого можно просто добавить знак “+” перед строчкой, где берётся значение из текстового поля:

   var v = +document.getElementById('vvod').value;

ну и вызывает вопросы такой сложный способ преобразования кода символа в его шестнадцатеричное представление. Нет, способ безусловно рабочий, но сложный, я бы через строчку с перечислением символов.

в сухом остатке

function change1() 
{
   const Alphabet='0123456789ABCDEF';
   var v = +document.getElementById('vvod').value;
   var k = document.getElementById('vivod1');
   var result = "";
   var znak = " ";
   if(v<0){
      znak="-";
      v=Math.abs(v);
   }
   do{
     var r = v % 16;
     result = Alphabet.charAt(r) + result;
     v = Math.floor(v / 16);
  } while(v > 0);
  k.value=znak+result;
}