Сразу бросилось в глаза...ошибка по невнимательности, у меня один раз тож такой баг был...
Цитата
movwf 0x07
movlw CMCON
По логике вы хотите записать 0х07 в CMCON, только посмотрите внимательно, вы перепутали команды местами.
У вас выполняется
запись W->0x07
содержимое CMCON->W
Хотя по логике нужно
константа 0х07->W
содержимое W->CMCON
Таким образом, правильно будет написать
movlw 0x07
movwf CMCON
PS: ниже по ходу программы нужно все поправить по аналогии!