Наброшу ка и я пару ложек...
Во первых асм. Его знать надо для эффективности. Да, можно не зная ни одной ассемблерной мнемоники все сделать на Си-васике.
Но вот только петух интуиции будет спать и в задницу тебя не клюнет когда ты будешь в прерывании и фоне делать обращение к одной и той же многобайтной переменной. А место то стремное! Словишь глюк атомарного доступа (погугли, кстати, об этом) только вперед. И будешь потом его ловить неделями. После ассемблера же такие вещи просекаются сразу же. Как говорится задницей чую что тут косяк. Также, после ассемблерной практики куда проще ловить баги связаные со всякими срывами и левыми инициализациями прерываний. Вот случайно где то разрешил прерывание, а обработчик не поставил. ВОт у тебя и сбрасывается программа не пойми с чего. Дооолго будешь ловить причину, уверяю тебя. А увидеть вот так сразу в большой программе что где то там ошибся на один битик это очень сложно. Это надо свежим глазом окинуть программу. А где его взять то, особенно после недели отладки

А зная как на асме идет вызов тех же прерываний -- в симуляторе, в ассемблерном режиме, навтыкал брейкпоинтов в потенциально стремные места и ловишь ошибки с одного-двух прогонов. Как знать где искать? Надо разобраться с тем как работает проц. При писании на асме это изучается само собой. Да и нет там ничего сложного. Просто парадигма несколько иная. Никаких функций котоыре там куда то что то возвращают. Все в регистрах/памяти. Все линейно и плоско.
Во вторых Си. Рекомендую не отвлекаться на всякие там бейсики и паскали. Некоторые их компиляторы под PIC/AVR ой чудо как хороши. Тот же микропаскаль. И библиотечки, и на всем готовом. И все сразу и все работает. Но это только для начинающего критично, чуть больше опыта и все это уже не нужно и сам с усами. Так не ведись на халяву и кури сразу Си. Причем компилятор максимально близкий к классическому (GCC например или IAR) без всяких извращений вроде аля "PORTD.7" (Камень в огород CVAVR) Нет этого в языке C! Этото какой то местечковый диалект. Зачем изучать именно Си и именно стандарт? Да чтобы потом скакать с контроллера на контроллер как захочется. Я вот сейчас сижу на AVR, C51 и ARM CortexM3 практически одновременно. Скачу с контроллера на контроллер от проекта к проекту. Везде за собой таскаю алгоритмические наработки. А т.к. компилятор единый и стандартизованный под самое нехочу, то код таскается копипастой! Попробуй под ARM свой бейсиковый проект перетащи, ага. А у меня перебрсока весьма толстой проги заняло пару часов -- подправить только аппаратные зависимости от периферии, да ряд мест исправить с учетом другой архитектуры (работало бы и так, но менее эффективно).
Все то же справедливо и для PIC