Перейти к содержанию

P12F675 Перевести .asm В .hex


SabitofF

Рекомендуемые сообщения

Выручайте, какой программой можно перевести в Нех данный код?

Уже пол дня играюс, а никакой прогой это сделать не могу..

;*******************************************************************************
;																			  *
;    Программа адаптера рулевого ДУ.										   *
;    Версия 1.1.															   *
;																			  *
;    Автомобиль: Honda Accord.												 *
;    Протокол: Проводное управление Alpine.								    *
;    Аппаратная ревизия адаптера: 1.x.										 *
;																			  *
;    Требуется файл P12F675.INC											    *
;																			  *
;*******************************************************************************
;																			  *
;    История версий:														   *
;																			  *
;    1.1 Оптимизация объема кода.											  *
;    1.0 Начальный релиз.													  *
;																			  *
;*******************************************************************************
 list p=12f675
 #include <p12f675.inc>
 errorlevel -302
 __CONFIG _CP_OFF&_CPD_OFF&_BODEN_OFF&_MCLRE_ON&_WDT_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT
;*******************************************************************************
; Определение используемых портов контроллера.
#define  WPort Port,GP1 ; Порт выхода на магнитолу.
#define  CtlPort Port,GP2 ; Порт контрольного светодиода.
; Определение адреса ИК-протокола.
WAdrH  EQU 0x72  ; Старший байт адреса протокола.
WAdrL  EQU 0x86  ; Младший байт адреса протокола.
; Определение команд ИК-протокола.
WCmd0  EQU 0x15  ; Команда для кнопки Btn0 (Vol-).
WCmd1  EQU 0x14  ; Команда для кнопки Btn1 (Vol+).
WCmd2  EQU 0x13  ; Команда для кнопки Btn2 (Ch-).
WCmd3  EQU 0x12  ; Команда для кнопки Btn3 (Ch+).
WCmd4  EQU 0x0A  ; Команда для кнопки Btn4 (Mode).
WCmd5  EQU 0x0D  ; Команда для кнопки Btn5 (Mute).
WCmd6  EQU 0x0E  ; Команда для кнопки Btn6 (Up).
WCmd7  EQU 0x0F  ; Команда для кнопки Btn7 (Down).

; Определение соответствия значений АЦП кнопкам на пульте.
Btn0  EQU .8  ; Порог кнопки Vol-.
Btn1  EQU .15  ; Порог кнопки Vol+.
Btn2  EQU .21  ; Порог кнопки Ch-.
Btn3  EQU .26  ; Порог кнопки Ch+.
Btn4  EQU .36  ; Порог кнопки Mode.
Btn5  EQU .44  ; Порог кнопки Mute.
Btn6  EQU .92  ; Порог кнопки Up.
Btn7  EQU .186  ; Порог кнопки Down.

; Определение регистров.
cblock 0x20
 Port   ; "Зеркало" GPIO
 WCmd   ; Байт команды протокола.
 SendB   ; Байт, посылаемый процедурой SendByte.
 Btn   ; Результат опроса кнопок
 ; (0-4 или 5 - не нажата).
 BtnPrev   ; Предыдущий результат опроса кнопок.
 BtnTmp   ; Временный результат опроса кнопок.
 ADCRes   ; Результат АЦП.
 P1   ; Переменная цикла для процедур паузы.
 P2   ; Переменная цикла для процедур паузы.
endc
;*******************************************************************************
; Макросы.
; Вывод в порт.
out macro
 movf Port,W
 movwf GPIO
endm
;*******************************************************************************
 ORG 0x000  ; Вектор сброса.
 goto Main  ; Переход к началу программы.
;*******************************************************************************
; Пауза 560 us.
P560  movlw .185  ; Пауза 556 us
 movwf P1  ; +2 us на вызвов этой процедуры
 decfsz P1,F  ; +2 us на возврат из нее.
 goto $-1
 return
;*******************************************************************************
; Стартовая посылка.
; Импульс 9 ms и пауза 4.5 ms.
WStart  bsf WPort  ; Включаем выход.
 out   ; Выдаем в порт.
 movlw .175  ; Пауза 9 ms.
 movwf P1
 movlw .12
 movwf P2
 decfsz P1,F
 goto $-1
 decfsz P2,F
 goto $-3
 bcf WPort  ; Выключаем выход.
 out   ; Выдаем в порт.
 movlw .215  ; Пауза 4.5 ms.
 movwf P1
 movlw .6
 movwf P2
 decfsz P1,F
 goto $-1
 decfsz P2,F
 goto $-3
 return
;*******************************************************************************
; Посылка "1".
; Импульс 560 us и пауза 1.68 ms.
W1  bsf WPort  ; Включаем выход.
 out   ; Выдаем в порт.
 call P560  ; Пауза 560 us.

 bcf WPort  ; Выключаем выход.
 out   ; Выдаем в порт.
 call P560  ; Пауза 560 us.
 call P560  ; Пауза 560 us.
 call P560  ; Пауза 560 us.
 return
;*******************************************************************************
; Посылка "0".
; Импульс 560 us и пауза 560 us.
W0  bsf WPort  ; Включаем выход.
 out   ; Выдаем в порт.
 call P560  ; Пауза 560 us.

 bcf WPort  ; Выключаем выход.
 out   ; Выдаем в порт.
 call P560  ; Пауза 560 us.
 return
;*******************************************************************************
; Посылка байта.
SendByte btfss SendB,0  ; Если бит "1",
 call W0  ; не посылаем "0".
 btfsc SendB,0  ; Если бит "0",
 call W1  ; не посылаем "1".
 btfss SendB,1
 call W0
 btfsc SendB,1
 call W1
 btfss SendB,2
 call W0
 btfsc SendB,2
 call W1
 btfss SendB,3
 call W0
 btfsc SendB,3
 call W1
 btfss SendB,4
 call W0
 btfsc SendB,4
 call W1
 btfss SendB,5
 call W0
 btfsc SendB,5
 call W1
 btfss SendB,6
 call W0
 btfsc SendB,6
 call W1
 btfss SendB,7
 call W0
 btfsc SendB,7
 call W1
 return
;*******************************************************************************
; Посылка команды.
; Стартовая посылка, WAdrL, WAdrH, WCmd, инвертированная WCmd, стоп-бит ("0").
SendCmd  bcf CtlPort  ; Выключаем контрольный светодиод.
 out   ; Выдаем в порт.
 call WStart  ; Стартовая посылка.
 movlw WAdrL  ; Берем нижний байт адреса протокола,
 movwf SendB  ; кладем в регистр для отправки
 call SendByte ; и отправляем.
 movlw WAdrH  ; Берем верхний байт адреса протокола
 movwf SendB  ; и т.д.
 call SendByte
 movf WCmd,W  ; Берем команду протокола и т.д.
 movwf SendB
 call SendByte
 comf WCmd,W  ; Инвертируем команду протокола и т.д.
 movwf SendB
 call SendByte
 call W0  ; Стоп-бит.
 bsf CtlPort  ; Включаем контрольный светодиод.
 out   ; Выдаем в порт.
 return
;*******************************************************************************
; АЦП и получение нажатой кнопки.
ADC2Btn  bsf ADCON0,GO ; Начинаем преобразование.
 btfsc ADCON0,GO ; Ожидаем, пока преобразование
 goto $-1  ; не будет завершено.
 movf ADRESH,W ; Берем верхний байт результата
 movwf ADCRes  ; преобразования и запомнинаем как
 ; результат ("загрубляем" до 8bit).
; Определение нажатой кнопки по результату преобразования.
 clrf Btn  ; Очищаем результат опроса кнопок.
 movf ADCRes,W ; Берем результат АЦП.
 sublw Btn0  ; Вычитаем из порога результат АЦП.
 btfss STATUS,C ; Если не было заема - пропускаем,
 incf Btn,F  ; иначе увеличиваем значение результата.
 movf ADCRes,W
 sublw Btn1
 btfss STATUS,C
 incf Btn,F
 movf ADCRes,W
 sublw Btn2
 btfss STATUS,C
 incf Btn,F
 movf ADCRes,W
 sublw Btn3
 btfss STATUS,C
 incf Btn,F
 movf ADCRes,W
 sublw Btn4
 btfss STATUS,C
 incf Btn,F
 return
;*******************************************************************************
; Опрос кнопок пульта.
GetBtn  call ADC2Btn  ; Получаем нажатую кнопку.
 movf Btn,W  ; Запоминаем полученную кнопку
 movwf BtnTmp  ; как временную.
 movlw .251  ; Пауза 10 ms.
 movwf P1
 movlw .13
 movwf P2
 decfsz P1,F
 goto $-1
 decfsz P2,F
 goto $-3
 goto $+1
 call ADC2Btn  ; Повторно получаем нажатую кнопку.
; Проверка, на идентичность 2 запросов (Btn=BtnTemp?).
 movf Btn,W  ; Берем значение нажатой кнопки,
 subwf BtnTmp,W ; и вычитаем его из временного.
 btfsc STATUS,Z ; Если результат ненулевой, идем дальше,
 return   ; иначе возврат.
 movlw .5  ; Btn<>BtnTmp - считаем, что ничего
 movwf Btn  ; не нажато (Btn=5).
 return
;*******************************************************************************
; Табличное соответствие кнопки и ИК-команды.
Btn2W  addwf PCL,F  ; Делаем вычисляемый переход.
 retlw WCmd0  ; Команда для кнопки Btn0.
 retlw WCmd1  ; Команда для кнопки Btn1.
 retlw WCmd2  ; Команда для кнопки Btn2.
 retlw WCmd3  ; Команда для кнопки Btn3.
 retlw WCmd4  ; Команда для кнопки Btn4.
 retlw WCmd5  ; Команда для кнопки Btn5.
 retlw WCmd6  ; Команда для кнопки Btn6.
 retlw WCmd7  ; Команда для кнопки Btn7.
;*******************************************************************************
; Основной модуль.
Main
; Калибровка внутреннего тактового RC-генератора.

 call 0x3FF  ; Берем значение заводской калибровки.
 bsf STATUS,RP0 ; Банк 1.
 movwf OSCCAL  ; Загружаем значение калибровки.
 bcf STATUS,RP0 ; Банк 0.
; Первоначальная настройка регистров.
 clrf GPIO  ; Обнуляем все порты.
 bsf STATUS,RP0 ; Банк 1.
 movlw b'010000' ; Значение для установки портов
 movwf TRISIO  ; загружаем в регистр.
 bcf STATUS,RP0 ; Банк 0.
; Инициализация модуля АЦП.
 bcf ADCON0,ADFM ; Левое выравнивание.
 bcf ADCON0,VCFG ; Опорное напряжение Vdd.
 bsf ADCON0,CHS1 ; Аналоговый
 bsf ADCON0,CHS0 ; канал AN3.
 bcf ADCON0,GO ; Преобразование не выполняется.
 bsf ADCON0,ADON ; Включить модуль АЦП.
 bsf STATUS,RP0 ; Банк 1.
 bsf ANSEL,ADCS2 ; Выбраем источник
 bcf ANSEL,ADCS1 ; тактового сигнала
 bsf ANSEL,ADCS0 ; Fosc/16.
 bsf ANSEL,ANS3 ; Определяем канал AN0 как аналоговый,
 bcf ANSEL,ANS2 ; остальные
 bcf ANSEL,ANS1 ; нам не
 bcf ANSEL,ANS0 ; нужны.
 bcf STATUS,RP0 ; Банк 0.
 clrf Port  ; Сбрасываем порт.
 bsf CtlPort  ; Включаем контрольный светодиод.
 out   ; Вывод в порт.
; Основной цикл.
MainLoop call GetBtn  ; Опрос кнопок.
; Проверка, была ли нажата кнопка.
 movf Btn,W  ; Берем код нажатой кнопки,
 sublw .5  ; проверяем не равен ли он 5.
 btfsc STATUS,Z ; Если не равен 5, то идем дальше,
 goto MainLoop ; иначе все с начала.
; Пауза 30 миллисекунд. Вместе с длиной посылки и остальными задержками дает
; паузу между посылками ~110 миллисекунд в соответствие с протоколом.
 movlw .245
 movwf P1
 movlw .39
 movwf P2
 decfsz P1,F
 goto $-1
 decfsz P2,F
 goto $-3
; Проверяем, новая это кнопка или повтор (Btn=BtnPrev?).
 movf Btn,W  ; Берем значение нажатой кнопки,
 subwf BtnPrev,W ; и вычитаем его из предыдущей кнопки.
 btfss STATUS,Z ; Если Btn=BtnTmp - к отправке повтора,
 goto SendNewCmd ; иначе к отправке новой команды.
; Посылка повтора
 call SendCmd  ; Посылаем старую команду и
 goto MainLoop ; переходим снова к циклу подтверждения.
; Посылка новой команды
SendNewCmd movf Btn,W  ; Берем значение нажатой кнопки,
 movwf BtnPrev  ; запоминаем как предыдущее значение,
 call Btn2W  ; находим по таблице нужную команду ИК,
 movwf WCmd  ; готовим ее к посылке
 call SendCmd  ; и посылаем.
 goto MainLoop ; Переходим снова к циклу подтверждения.
 END   ; Конец программы.

Citroen_Jumpy_alpine-wired.rar

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выручайте, какой программой можно перевести в Нех данный код?

Это называется скомпилировать :crazy:

С поиском в гугле как скомпилировать справитесь? :)

Ссылка на комментарий
Поделиться на другие сайты

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...