Edmundo 0 19 ноября, 2006 Опубликовано 19 ноября, 2006 · Жалоба У нас mpasmwin, он когда переводишь в hex выдает 5 ошибок, одну нашла не обьявлена перем.count, осталось три, он не указывает какие, но когда комментируешь те две строки MOVLW 0x09 и GOTO V0, он выдает 0 ошибок, я посмотрела, но так прога не работает 5 - 1 = 3, интересная арифметика... 2napper, сорри что влезаю :), но может быть так... 1. Объявите переменную COUNT, она там действительно не объявлена. 2. Переименуйте метку V0 во что-нибудь не буквенно-цифровое, например VZERO, и поставьте соответственно GOTO VZERO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
napper 0 19 ноября, 2006 Опубликовано 19 ноября, 2006 · Жалоба 5 - 1 = 3, интересная арифметика... 2napper, сорри что влезаю :), но может быть так... 1. Объявите переменную COUNT, она там действительно не объявлена. 2. Переименуйте метку V0 во что-нибудь не буквенно-цифровое, например VZERO, и поставьте соответственно GOTO VZERO Edmundo, нет проблем! :) Я ведь тоже могу ошибаться, поэтому только за, если кто-то меня поправит. Вот про переменную забыл... #include P16F84A.inc TEMPA EQU 0x0C TEMPB EQU 0x0D COUNT EQU 0x0E COUNT1 EQU 0x0F COUNT2 EQU 0x10 #DEFINE VD2 PORTA,1;светодиод VD2 #DEFINE R1 PORTA,4;резистор ORG 0 INIT_PORTS ;подпрограмма инициализации портов BSF STATUS,RP0;переход на банк 1 MOVLW 0x1C ;настройка линий RA0 и RA1 на вывод, другие на ввод MOVWF TRISA MOVLW 0x01 ;настройка линии RB0 на ввод, другие на вывод MOVWF TRISB BCF STATUS,RP0;возврат в банк 0 ; LOOP MOVF PORTA,W;чтение состояния порта A в W MOVWF TEMPA ;пересылка W в TEMPA BTFSS TEMPA,4 GOTO LOOP ;перейти на LOOP MOVLW 0x09 MOVWF COUNT ;СЧЕТЧИК МИГАНИЙ 9 РАЗ ГОРИТ, 9 - НЕ ГОРИТ, ИТОГО 18 СЕК ;(ЧАСТОТА МИГАНИЙ 1 ГЕРЦ, ЗНАЧИТ 1 МИГАНИЕ/НЕМИГАНИЕ В СЕКУНДУ), ;ПОСЛЕДНЕЕ НЕМИГАНИЕ НЕ УЧИТЫВАЕМ - ПОЛУЧАЕМ 17 СЕК;-) V0 BSF VD2 ;зажечь светодиод VD2 MOVLW 0xF3 ;пересылка константы ;H'F3' = .243 в W CALL DELAY_E;вызов подпрограммы DELAY_E BCF VD2 ;светодиод мигает MOVLW 0xF3 ;пересылка константы ;H'F3' = .243 в W CALL DELAY_E;вызов подпрограммы DELAY_E DECFSZ COUNT,F GOTO V0 GOTO LOOP ;переход к метке LOOP DELAY_E ;подпрограмма формирования задержки MOVWF COUNT2;загрузка W в регистр COUNT2 CLRF COUNT1;сброс содержимого регистра COUNT1 LOOPD NOP ;пустая команда DECFSZ COUNT1,F;декремент COUNT1 GOTO LOOPD ;повторение цикла 256 раз DECFSZ COUNT2,F;декремент COUNT2 GOTO LOOPD ;повторение цикла RETURN ;возврат из подпрограммы END Что я исправил: 1. Объявил переменную COUNT 2. Добавил команду "#include P16F84A.inc" вместо "LIST p=16F84" (У меня MPLAB на это ругается, а разбираться лень) 3. По поводу меток все нормально, имена допустимые. 4. Убрал объявление стандартных регистров. Откомпилировал в MPLAB, все ОК, ошибок 0 P.S. Версия MPLAB 7.30 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MariSev 0 21 ноября, 2006 Опубликовано 21 ноября, 2006 · Жалоба помогите, пожалуйста с пиком 16f84А, лаба заключается в следующем на любой вывод подключить светодиод, когда 0 светодид горит - 2 секунды, когда 1 светодиод не горит 1 секунду...и так цикл, прогу надо написать на ассемблере, и подробно опишите пожалуйста, чтоб разобраться, спасибо Если нужна еще программа, я могу помочь..., (а вообще то это мой любимый ник :tongue:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться