Хм... Микроконтроллеры при программировании настраиваются при помощи битов конфигурации (они же фьюзы). Во-первых, нужно убедиться, что в самой программе нужные порты сконфигурированы на вход/выход, а то якак-то долго искал ошибку, почему у меня АЦП не работает, а потом оказалось, что я просто забыл включить ножку АЦП как аналоговый вход, и она работала в цифровом режиме.
А во-вторых, нужно биты конфигурации правильно выставить в программе-программаторе перед прошивкой. Я пользуюсь ICProg, там это так выглядит:

Вот описание с одного форума:
Цитата:
bandgap - ставьте default (не помню что за хрень)
WDT - сторожевой таймер (если не знаете, то не используйте)
PWRT - задержка для стабилизации генератора при вкючении питания
MCLR - использовать вход внешнего сброса микроконтроллера (reset)
BODEN - задейств-ть сброс при снижении напр. питания
CP - защитить код программы от считывания
CPD - защитить содержимое EEPROM от считывания
Я обычно только PWRT оставляю. Если эти биты неправильно выставить, контроллер может вообще не запуститься. Ещё проверьте, чтобы осциллятор был правильно настроен. И вот несколько статей, где можно посмотреть настройку контроллера при программировании (для ICProg, но смысл один и тот же везде, просто найдите в Вашей программе кнопку Fuse или что-то вроде того):
http://rxlab.org/knowledgebase/?doc=14 (в самом конце)
http://radiotehnic.narod.ru/data/PIC.htm (в начале)