Путин произвёл Мерседес — расписывался на Мерсе зачем?
MuteCRT (MuteCRT) писал (а) в ответ на сообщение :Развернуть начало сообщения > александр74мар (александр74мар) писал (а) в ответ на сообщение:
Развернуть начало сообщения >> MuteCRT (MuteCRT) писал (а) в ответ на сообщение:
Развернуть начало сообщения >>> александр74мар (александр74мар) писал (а) в ответ на сообщение: >>>> Неуверенность произошла от вас…))) Кстати…))) >>>> >>> >>> Ок. Не знаю в какой области ты технарь, найди ошибку в коде. >>> >>> [spoiler '*********'].CHIP 8052 ;21.10.2011. BEEP приналичии ошибок. >>> .RAMCHK OFF; >>> CkCON0 .reg 8fh ;регистр выбора режима х2 для процессора и периферии (стр18) >>> CkCON1 .reg 0afh ;регистр выбора режима х2 для SPI интерфейса (стр19) >>> Auxr .reg 8eh ;выключение ALE, разрешение XRAM, изменение объема >>> ;XRAM, выключение PUL-UP резисторов (стр24) >>> CKRL .reg 97h ;8 — битовый предделитель частоты процессора (стр15) >>> EeCON .reg 0d2h ;регистр управления флэш памятю. (стр91) >>> T2mod .reg 0c9h ;регистр управления таймера 2.(стр34) >>> BRL .reg 9ah ;регистр задания скорости com порта (стр55) >>> bdrcon .reg 9bh ;регистор режимов COM — порта (стр58) >>> >>> KBF .reg 9eh ;регистр флагов клавиатурного прерывания (стр60) >>> KBE .reg 9dh ;регистр переназначения выводов порта P1 на клавиатуру (стр61) >>> IEN1 .reg 0b1h ;регистр разрешения прерывания (SPI, клавиатура) (стр77) >>> KBLS .reg 9ch ;регистр уровней >>> >>> CH .reg 0f9h ;регистр временной базы PCA. Старший байт (стр42) >>> CL .reg 0e9h ;регистр временной базы PCA. Младший байт (стр42) >>> Ccon .reg 0d8h ;регистр управления PCA (стр38) >>> cmod .reg 0d9h ;регистр режимов PCA (стр37) >>> Ccapm0 .reg 0dah ;регистр режима модуля 0 PCA (стр40) >>> Ccapm1 .reg 0dbh ;регистр режима модуля 1 PCA (стр40) >>> Ccapm2 .reg 0dch ;регистр режима модуля 2 PCA (стр40) >>> Ccapm3 .reg 0ddh ;регистр режима модуля 3 PCA (стр40) >>> Ccapm4 .reg 0deh ;регистр режима модуля 4 PCA (стр40) >>> CcaP0h .reg 0fah ;регистр значений модуля 0. Старший байт (стр41) >>> CcaP1h .reg 0fbh ;регистр значений модуля 1. Старший байт (стр41) >>> CcaP2h .reg 0fch ;регистр значений модуля 2. Старший байт (стр41) >>> CcaP3h .reg 0fdh ;регистр значений модуля 3. Старший байт (стр41) >>> CcaP4h .reg 0feh ;регистр значений модуля 4. Старший байт (стр41) >>> CcaP0l .reg 0EAh ;регистр значений модуля 0. Младший байт (стр42) >>> CcaP1l .reg 0ebh ;регистр значений модуля 1. Младший байт (стр42) >>> CcaP2l .reg 0ech ;регистр значений модуля 2. Младший байт (стр42) >>> CcaP3l .reg 0edh ;регистр значений модуля 3. Младший байт (стр42) >>> CcaP4l .reg 0eeh ;регистр значений модуля 4. Младший байт (стр42) >>> >>> CS .reg P2.3 ;линия выбоpа микpосхемы = CS, 10 >>> MOSI .reg P2.2 ;линии = Din, 11 ;P2.4 — макет ;P2.2 >>> MISO .reg P2.1 ;поpта = Dout, 12 ;P2.5 — макет ;P2.1 >>> SCK .reg P2.0 ;SPI = CLK, 13 ;P2.2 — макет ;P2.0 >>> >>> ;Сохраняемые ячейки >>> Serv .reg 20h.1 ;бит режима настроек >>> Left .reg 20h.2 ;бит признака вращения энкодера влево >>> Right .reg 20h.3 ;бит признака вращения энкодера вправо >>> Dzdec .reg 20h.4 ;бит запрета анализа сигнала от энкодера >>> Strob .reg 20h.5 ;строб вывода информации на ЖКИ >>> Strob1s .reg 20h.6 ;секундный строб >>> Knobf .reg 20h.7 ;бит признака нажатия кнопки >>> Knobl .reg 21h.0 ;бит признака долгого нажатия кнопки >>> Moving .reg 21h.1 ;бит признака движения >>> PIC .reg 21h.2 ;отслеживание в канале поворотника изменения уровня >>> ErrCon .reg 21h.3 ;бит признака ошибка связи с ЭБУ >>> ErrBeep .reg 21h.4 ;бит подачи звукового сигнала при наличии ошибок >>> Status .equ 22h ;ячейка статуса программы >>> ComState .equ 23h ;статус обработчика COM порта >>> >>> Beep .equ 24h ;таймер звукового сигнала >>> ddd .equ 25h ;таймер 150мс >>> t1s .equ 26h ;таймер 1с >>> KnobCnt .equ 27h ;счетчик времени нажатия кнопки >>> Lite .equ 28h ;память яркости подсветки >>> >>> ;Время в пути. Обрабатывается с секундным интервалом от таймера 2. Общее время >>> ;считается в ячейках Chas: Minut: Secund. Время в движении считается в ячейках >>> ;ChasM:MinutM:SecundM если бит Moving установлен. Время в стоянке считается в >>> ;ячейках ChasS: MinutS: SecundS если бит Moving сброшен. >>> Chas .equ 29h ;счетчик >>> Minut .equ 2ah ;времени >>> Secund .equ 2bh ;поездки >>> Chass .equ 2ch ;счетчик >>> Minuts .equ 2dh ;времени >>> Secunds .equ 2eh ;простоя >>> Chasm .equ 2fh ;счетчик >>> Minutm .equ 30h ;времени >>> Secundm .equ 31h ;в пути >>> >>> ;Подсчет расхода. Расход в секунду. Счетчик MLSECC увеличивается в прерывании >>> ;по расходу. Раз в секунду (прерывание от таймера 2) значение MLSECC переписы- >>> ;вается в MLSECM и MLSECC обнуляется. Значение в мл. Расход по расстоянию. >>> ;Счетчик MLDISTC увеличивается в прерывании по расходу. В прерывании от датчика >>> ;скорости обрабатывается счетчик дистанции RASHDST. По обнулению счетчика >>> ;дистанции значение MLdistC переписывается в MLDISTM. MLdistC обнуляется и >>> ;счетчик RASHDST инициализируется вновь. >>> R16D .equ 32h ;счетчик делитель импульсов расхода >>> MLsecC .equ 33h ;расход в секунду. Счетчик >>> MLsecM .equ 34h ;расход в секунду. Память >>> MLdistC .equ 35h ;расход по дистанции. Счетчик >>> MLdistM .equ 36h ;расход по дистанции. Память >>> Rashdst .equ 37h ;дистанция для подсчета расхода >>> Rash1L .equ 38h ;общий расход1 в мл. Младший байт >>> Rash1H .equ 39h ;общий расход1 в мл. Старший байт >>> Rash2L .equ 3ah ;общий расход1 в мл. Младший байт >>> Rash2H .equ 3bh ;общий расход1 в мл. Старший байт >>> ;Напряжение бортсети. Измеряется вначале основного процесса. К измеренному >>> ;значению прибавляется корректирующее значение UCORR Запоминаются текущее >>> ;значение и вычесленный максимум и минимум. >>> Utek .equ 3ch ;текущее значение напряжения бортсети >>> Umin .equ 3dh ;минимальное значение напряжения бортсети >>> Umax .equ 3eh ;максимальное значение напряжения бортсети >>> Ucorr .equ 3fh ;коррекция измеренного напряжения БС >>> ;Рассояние и скорость. Пройденное рассояние считается в метрах трехбайтовым >>> ;счетчиком DIST3 1. Для подсчета скорости число импульсов в секунду >>> ;накапливается в SPSECH: SPSECL. Раз в секунду (прерывание от таймера 2) результат >>> ;переписывается SPSECH: SPSECL -> SpeedH: SpeedL. Ячейки SPSECH: SPSECL обнуляются. >>> ;Раз в секунду (прерывание от таймера 2) значение SpeedH: SpeedL проверяется на >>> ;максимум и максимальное значение запоминается в SPMAXL: SpmaxH. Все значени >>> ;скорости в импульсах для повышения точности расчета. >>> V6S .equ 40h ;счетчик делитель импульсов расстояния >>> Dist1 .equ 41h ;пройденное рассотяние. Младший байт >>> Dist2 .equ 42h ;пройденное рассотяние. Средний байт >>> Dist3 .equ 43h ;пройденное рассотяние. Старший байт >>> SpsecL .equ 44h ;счкетчик пройденых импульсов младший байт >>> SpsecH .equ 45h ;счкетчик пройденых импульсов старший байт >>> SpeedL .equ 46h ;ячейка подсчета скорости старший байт >>> SpeedH .equ 47h ;ячейка подсчета скорости старший байт >>> SpmaxL .equ 48h ;ячейка подсчета максимальной скорости младший байт >>> SpmaxH .equ 49h ;ячейка подсчета максимальной скорости старший байт >>> >>> ;Передача и прием по COM порту. >>> CntRx .equ 50h ;адрес буфера приема XRAM >>> WaitCom .equ 51h ;таймер ожадания >>> W_Start .equ 52h ;таймер неактивности COM порта >>> Tcorr .equ 53h ;коррекция температуры двигателя >>> TDmax .equ 54h ;максимальная температура двигателя >>> >>> Bufish .equ 55h ;буфеp шестнадцатиpичных отобpажаемых данных >>> MEM .equ Bufish+4 ;+4 пpи четыpех шестнадцатиpичных pазpядов >>> Bufout .equ MEM+1 ;выходной буфер преобразвания >>> >>> jmp M0 ;обход адpесов прерываний >>> >>> .org 3 ;внешнее прерывание 0 (int0 3H, P3.2) >>> jmp Ex_int0 ;Расстояние. >>> >>> .org 0bh ;адpес пpеpывания по таймеpу 0 >>> jmp TR0_int ;точка входа в прерывание по таймеру 0(0bh) >>> >>> .org 13h ;внешнее прерывание 1 (int1,13H, P3.3) >>> jmp Ex_int1 ;Расход. >>> >>> .org 23h ;прерывание по приему и передаче >>> jbc RI, ComRx ;прерывание по приему — переход >>> jmp ComRx1 ;прерывание по передаче — переход >>> ComRx: push 0 ;прием: сохранить >>> push acc ;изменяемые регистры >>> mov R0, CntRx ;загрузить счетчик адреса для косвенной адресации >>> mov A, sbuf ;принятый байт >>> movx @R0,A ;записать в XRAM принятый байт >>> inc CntRx ;следующий адрес буфера приема в XRAM >>> pop acc ;восстановить >>> pop 0 ;изменяемые регистры >>> ComRx1: reti; >>> >>> .org 3bh ;адpес пpеpывания от энкодера >>> jmp KBF1 ;обработчик энкодера >>> >>> M0: mov SP,#80h ;верхушка стека >>> mov tmod,#11h ;режим работы таймеров >>> mov T2mod,#2 ;таймер 2 — в режим генератора частоты на порт P1.0 >>> orl pcon,#80h ;удвоенная скорость COM порта (sdmod1=1) >>> mov BRL,#196 ;скорость COM порта: 10 000 000/(16×10400)=196 >>> mov scon,#40h ;SM0=0, SM1=1, SM2=0-режим 3, прием запрещен >>> mov bdrcon,#1eh ;COM порт от внутр. ген-ра (BRR=1) на удв. ч-nе (spd=1) >>> orl CkCON0,#57h ;режим х2 для PCA, TR2 и CPU (X2=0,T2X2=PCAX2=1) >>> mov cmod,#2 ;регистр режимов PCA (стр37). Режим повышенной частоты >>> mov Ccon,#40h ;регистр управления PCA (стр38). Запустить PCA >>> mov KBE,#00001100b;P1.2,P1.3 назначить на энкодер >>> orl IEN1,#1 ;разрешить прерывание от клавиатуры >>> mov P0,#10001111b ;поpт ЖКИ. >>> mov P1,#11111110b ;P1.0 — динамик >>> setb ex0 ;разрешить внешнее прерывание int0 >>> setb ex1 ;разрешить внешнее прерывание int1 >>> setb it0 ;пpеpыванию int0 pеагиpовать на задний фpонт >>> setb it1 ;пpеpыванию int1 pеагиpовать на задний фpонт >>> setb et0 ;pазpешить пpеpывание от таймеpа 0 >>> setb tr0 ;запуск таймера 0 (временная база) >>> mov W_Start,#10 ;обнуление памяти XRAM: >>> call StartCom ;при W_Start <>0 обнуляется только XRAM >>> call Initlcd ;инициализация ЖКИ >>> call Rdprof ;чтение профиля из ПЗУ. Бит EA устанавливается там >>> mov V6S,#6 ;счетчик делитель импульсов расстояния >>> mov R16D,#16 ;счетчик делитель импульсов расхода >>> mov t1s,#20 ;инициализация счетчика вpемени 50мс * 20 = 1с >>> mov Umax,#50 ;инициировать Umax напряжением 5 В >>> mov Umin,#160 ;инициировать Umin напряжением 16 В >>> mov SpmaxL,#0 ;обнуление >>> mov SpmaxH,#0 ;максимальной скорости >>> mov MLdistM,#0 ;обнулить счетчик расхода по расстоянию >>> mov Rashdst,#100 ;подсчет расхода за 100 м >>> mov ComState,#0 ;статус обработчика COM порта >>> mov CcaP1h, Lite ;установить яркость подсветки >>> mov Ccapm1,#42h ;установить бит ECOM модуля 1 PCA. Режим — ШИМ >>> mov W_Start,#0 ;обнулить, иначе возможен пропуск старта при включении >>> clr Knobf; >>> ;------------------------------Основной: цикл--------------------------------- >>> Start: mov A,#66h ;номер канала АЦП >>> call Readv ;измерить напряжение в канале >>> mov Utek, A ;сохранить значение >>> clr C ;подсчет максимума и минимума >>> mov A, Umin ;поиск минимального значения: >>> subb A, Utek ;из текущего значения вычесть Umin >>> jc ST1 ;если Umin < текущего, С = 0, переход >>> mov Umin, Utek ;иначе — запомнить новое минимальное значение >>> ST1: clr C; >>> mov A, Umax ;поиск максимального значения: >>> subb A, Utek ;из текущего значения вычесть Umax >>> jnc ST2 ;если Umax > текущего, С = 1, переход >>> mov Umax, Utek ;иначе — запомнить новое максимальное значение >>> ;Выключение с записью профиля при выключении зажигания >>> ST2: jnb P2.6,ST6 ;+12 В на зажигании есть — переход >>> mov WaitCom,#20 ;первая задержка 1с >>> ST3: mov rcap2h,#0F3h ;Входная частота (в режиме X2) 10МГЦ / 2 = 5МГЦ >>> mov rcap2l,#01h ;Выходная частота = 2.5МГц / (10000h — F57F) = 930Гц >>> mov Beep,#3 ;таймер звукового сигнала. Время 3×50мс = 150мс >>> ST4: mov A,#67h ;номер канала АЦП >>> call Readv ;измерить напряжение в канале подсветки >>> subb A,#30 ;порог — 3 В >>> jc ST5 ;ниже порога — переход >>> jnb P2.6,ST13 ;+12 В на зажигании есть — переход >>> mov A, WaitCom ;задержка >>> jnz ST4 ;не кончилась — цикл >>> mov WaitCom,#0ffh ;иначе — перезагрузить таймер >>> mov dptr,#STM41 ;сообщение >>> call Outstr ;080h, 0ffh, 1,"Выключи габариты", 0ffh, 0c0h,"дубина!&q uot;, 0 >>> jmp ST3 ;цикл ожидания выключения подсветки >>> ST5: mov dptr,#STM11 ;сообщение >>> call Outstr ;080h, 0ffh, 1,"Запись профиля…", 0ffh, 0c0h, 0 >>> call Wrprof ;записать профиль в ПЗУ >>> clr P1.1 ;обесточить удерживающее реле >>> mov pcon,#2 ;выключить процессор >>> jmp $; >>> ;Реакция на длительное нажатие кнопки — смена режима >>> ST6: jnb Knobl, ST7 ;длительного нажатия нет — переход >>> clr Knobl ;сбросить бит признака долгого нажатия кнопки >>> mov Status,#0 ;при нажатии кнопки перебор меню начать с нуля >>> cpl Serv ;бит режима настроек >>> jmp ST13 ;изменен статус — очистить дисплей ЖКИ >>> ;Реакция на поворот валкодера >>> ST7: mov R1,#22 ;максимальное значение регистра Status (ставить на единицу меньше)(на е !!!!! >>> jnb Serv, ST9; >>> mov R1,#3 ;максимальное значение регистра Status (ставить на единицу меньше) в режиме настроек >>> ST9: jnb Right, ST10 ;бит признака вращения энкодера вправо. Не установлен — переход >>> clr Right ;иначе — сбросить бит >>> inc Status ;увеличить значение >>> call CLS ;очистить дисплей ЖКИ >>> jmp ST12 ;изменен статус — очистить дисплей ЖКИ >>> ST10: jnb Left, ST12 ;бит признака вращения энкодера влево. Не установлен — переход >>> clr Left ;иначе — сбросить бит >>> mov A, Status ;уменьшить значение >>> jz ST11 ;при нулевом значении — переход >>> dec Status ;уменьшить значение регистра Status >>> jmp ST13 ;изменен статус — очистить дисплей ЖКИ >>> ST11: mov Status, R1 ;иначе — загрузить в регистр Status максимальное значение (R1) >>> jmp ST13 ;изменен статус — очистить дисплей ЖКИ >>> ST12: mov A, Status ;проверка максимального значения: >>> setb C ;максимальное значение >>> subb A, R1 ;содержится в регистра R1 >>> jc ST14 ;если Status — R1 < 0, С = 1 значение не максимально — переход >>> mov Status,#0 ;иначе — загрузить в регистр Status минимальное значение (R0) >>> ST13: call CLS ;Очистить дисплей ЖКИ >>> ST14: mov A, Status; >>> cjne A,#7,ST15 ;Status < 8 — работаем без K-Line >>> ST15: jc ST25; >>> ;Драйвер K-Line. Общая часть. >>> mov A, WaitCom ;счетчик ожидания приема >>> jnz ST16 ;время не вышло — выход >>> mov A, ComState ;байт состояния процесса >>> jnz ST17; >>> call StartCom ;ComState = 0 — готов к началу передачи >>> mov ComState,#1 ;ComState = 1 — подготовка завершена >>> ST16: jmp Start ;и пеpеход на начало >>> ST17: mov A, Status; >>> cjne A,#7,ST19 ;Status <> 7 — переход >>> ;Драйвер K-Line. Status = 7 >>> mov A, ComState ;байт состояния процесса >>> cjne A,#1,ST18 ;шаг не равен 1 — переход >>> mov dptr,#RDERROR ;прередача строки RDERROR 84h, 10h, 0f1h, 18h, 00h, 00h, 00h, 9dh, 0ffh >>> mov CntRx,#50h ;ответ ЭБУ на STRC записать в XRAM по адресу 10h >>> jmp ST20 ;и переход >>> ST18: cjne A,#2,ST23 ;шаг не равен 2 (прием завершен) — переход >>> mov B,#58h ;идентификатоp запpоса с установленым шестым битом >>> mov R0,#50h ;начальный адрес буфера приема XRAM >>> call V_Frame ;проверка правильности приема >>> mov A, ComState ;после вызова V_Frame: >>> jnz ST22 ;ComState <> 0 — прием не правильный >>> jmp ST26 ;ComState = 0 — прием правильный >>> ;Драйвер K-Line. Status >7. Диагностика двигателя RDIAG. >>> ST19: mov A, ComState ;байт состояния процесса >>> cjne A,#1,ST21 ;шаг не равен 1 — переход >>> mov dptr,#RDIAG ;прередача строки RDIAG 82h, 10h, 0f1h, 21h, 01h, 0a5h, 0ffh >>> mov CntRx,#10h ;ответ ЭБУ на STRC записать в XRAM по адресу 10h >>> ST20: mov ComState,#2 ;ComState = 2 — данные готовы >>> call COMTR ;подпрограмма передачи строки в COM порт >>> jmp Start ;и переход на начало >>> ST21: cjne A,#2,ST23 ;шаг не равен 2 — переход >>> mov B,#61h ;идентификатоp запpоса с установленым шестым битом >>> mov R0,#10h ;начальный адрес XRAM ответа ЭБУ на RDIAG >>> call V_Frame ;проверка правильности приема >>> mov A, ComState ;после вызова V_Frame: >>> jz ST24 ;ComState = 0 — прием правильный >>> ST22: call EnumER ;декодирование и отображение ошибки от ЭБУ >>> setb ErrCon ;бит признака ошибка связи с ЭБУ >>> ST23: mov ComState,#0 ;ComState = 0 — инициализировать обмен >>> jmp Start ;и пеpеход на начало >>> ;Вычисление максимальной температуры двигателя >>> ST24: mov R0,#12h+6 ;читать >>> movx A,@R0 ;температуру двигателя >>> clr C ;подготовтся к вычитанию >>> subb A, TDmax ;проверка максимального значения >>> jc ST26 ;не максмально — переход >>> movx A,@R0 ;читать температуру двигателя >>> mov TDmax, A ;значение больше TDmax — запомнить в TDmax >>> jmp ST26 ;и пеpеход на начало >>> ;Конец цикла с максимальным быстродействием >>> ST25: jnb Strob, ST29 ;строб выхода в подменю >>> ST26: mov ComState,#0 ;ComState = 0 — инициализировать обмен >>> clr Strob ;установлен — сбросить строб >>> jnb ErrCon, ST27 ;если в предидущем цикле >>> clr ErrCon ;была ошибка — сбросить бит ошибки и >>> call CLS ;очитстить дисплей ЖКИ >>> ST27: mov A, Status ;регистр статуса содержит индекс таблицы >>> mov B,#3 ;длина команды перехода в байтах >>> mul AB ;Status x 3 (jmp занимает 3 байта в таблице) >>> jnb Serv, ST28 ;бит режима настроек не установлен — переход >>> mov dptr,#STable ;загрузка адреса начала таблицы >>> jmp SETUP; >>> ST28: mov dptr,#WTable ;загрузка адреса начала таблицы >>> jmp WORK; >>> EXcls: call CLS ;Очистить дисплей ЖКИ >>> EXitf: clr Knobf ;сбросить бит нажатия кнопки >>> ST29: jmp Start ;и пеpеход на начало >>> DisCom: mov WaitCom,#40 ;запрет работы драйвера COM >>> jmp EXitf ;выход с очисткой Knobf >>> STM11: db 080h, 0ffh, 1,"Запись профиля…", 0ffh, 0c0h, 0 ;1я стpока >>> STM41: db 080h, 0ffh, 1,"Выключи габариты", 0ffh, 0c0h,"дубина!&q uot;, 0 ;1я стpока >>> ;------------------Коммутатор переходов в рабочем режиме--------------------- >>> WORK: jmp @a+dptr ;1.переход на обработчик окна >>> WTable: jmp Main ;2.Основной экран >>> jmp Skorost ;3.Скорость (нажатие — обнулить): >>> jmp Vremya ;4.Время >>> jmp Probeg ;5.Пробег >>> jmp Volt ;6.Напряжение бортсети >>> jmp Rashod1 ;7.Расход топлива >>> jmp Rashod2 ;8.Расход топлива >>> jmp KodERR ;9.Просмотр кодов ошибок >>> jmp Termo ;10.Температура охлаждающей жидкости >>> jmp VoltBS ;11.Напряжение бортсети от ЭБУ >>> jmp Obor ;12.Скорость вращения двигателя >>> jmp Ptrain ;13.База ошибок Ptrain >>> jmp W_Work ;14.Слово режима работы >>> jmp Flags ;15.Флаги текущих неисправностей >>> jmp VT ;16.Соотношение воздух/топливо >>> jmp Drossel ;17.Положение дроссельной заслонки >>> jmp RegTHH ;18.Текущее положение регулятора холостого хода >>> jmp KorInj ;19.Коэффициент коррекции времени впрыска >>> jmp UOZ ;20.Угол опережения зажигания >>> jmp O2 ;21.Напряжение на датчике кислорода >>> jmp SostO2 ;22.Флаги состояния датчика кислорода >>> jmp RLI ;23.Чтение и отображение индентификатора >>> jmp Dump ;24.Вывод дампа памяти >>> ;------------------Коммутатор переходов в режиме настроек-------------------- >>> SETUP: jmp @a+dptr ;1.переход на обработчик окна >>> STable: jmp SetU ;2.Корректировка напряжения бортсети >>> jmp ErCLR ;3.Стирание ошибок в ЭБУ >>> jmp SetT ;4.Корректировка порога температуры двигателя >>> jmp SetLite ;6.Регулировка яркости подсветки >>> ;--------------------------------------- ------------------------------------- >>> ; Программы индивидуальных экранов >>> ;--------------------------------------- ------------------------------------- >>> Main: mov R7,#2 ;R7 число знаков после запятой >>> jb Moving, Main1 ;бит признака движения сброшен — переход >>> ;В стоянке: отображение почасового расхода >>> mov dptr,#Rash41 ;сообщение >>> call Outstr ;094h,"л/час = «, 0 >>> mov A, MLsecM ;читать значение расхода в секунду >>> mov B,#9 ;18 / (10 * 8) = 9/40 >>> mul AB ;MLsecM умножаем на 9. >>> mov R0, A ;R0 делимое младший байт >>> mov R1, B ;R1 делимое старший байт >>> mov R2,#40 ;R2 делитель младший байт >>> mov R3,#0 ;R3 делитель старший байт >>> call Float ;деление и отображения числа с плавающей точкой >>> call CLRstr ;вывод четырех пробелов без адресации курсора >>> mov MLdistM,#0 ;обнулить счетчик расхода по дистанции >>> ;Отображение максимальной скорости >>> mov dptr,#Main32 ;сообщение >>> call Outstr ;094h,"Vmax = „, 0 >>> mov R0, SpmaxL ;отобразить максимальную скорость: >>> mov R1, SpmaxH ;R1:R0 = SpmaxH: SpmaxL x 6 / 10 >>> call Shsp ;подпрограмма отображения скорости >>> jmp Main2 ;переход >>> ;В движении: отображение расхода по дистанции >>> Main1: mov dptr,#Rash42 ;сообщение >>> call Outstr ;0d4h,"л/100км = „, 0 >>> mov R0, MLdistM ;R1:R0 расход в мл на 100 м >>> mov R1,#0; >>> mov R2,#16 ;R3:R2 = 0016(мл/импульс) >>> mov R3,#0; >>> call Float ;деление и отображения числа с плавающей точкой >>> ;Отображение скорости >>> mov dptr,#Main31 ;сообщение >>> call Outstr ;094h,"V = „, 0 >>> mov R0, SpeedL ;[м/с]/6 = [км/ч]/6×3600/1000 = [км/ч]х 6 / 10 >>> mov R1, SpeedH ;R1:R0 = SpeedH: SpeedL x 6 / 10 >>> call Shsp ;подпрограмма пересчета и отображения скорости >>> call CLRstr ;вывод четырех пробелов без адресации курсора >>> ;Отображение пробега >>> Main2: mov dptr,#Main21 ;сообщение >>> call Outstr ;0c0h,"S = „, 0 >>> call Sshow ;подпрограмма отображения пробега >>> ;Отображение времени >>> mov A,#80h ;адрес >>> call WrCOM ;курсор в левый верхний угол ЖКИ >>> mov R0,#Chas ;R0 адресовать на счетчик часов >>> call Time ;отобразить общее время >>> jmp DisCom ;и пеpеход на начало {29мс} >>> Main21: db 0c0h,"S = „, 0 ;2я стpока >>> Main31: db 094h,"V = „, 0 ;3я стpока >>> Main32: db 094h,"Vmax = „, 0;3я стpока >>> ;----------------------------------Скоро сть---------------------------------- >>> Skorost: mov dptr,#SkoR11 ;сообщение: 080h,"1.Скорость:“, >>> call Outstr ;0ffh, 094h,"Текущая = „, 0 >>> mov R0, SpeedL ;отобразить скорость: >>> mov R1, SpeedH ;SpeedH:SpeedL x 6 / 10 >>> call Shsp ;подпрограмма отображения скорости >>> mov dptr,#SkoR41 ;сообщение >>> call Outstr ;0d4h,"Максим-я= „, 0 >>> mov R0, SpmaxL ;отобразить максимальную скорость: >>> mov R1, SpmaxH ;SpeedH:SpeedL x 6 / 10 >>> call Shsp ;подпрограмма отображения скорости >>> Sk1: jnb Knobf, Skex ;кнопка не нажата — переход >>> mov SpmaxL,#0 ;обнулить >>> mov SpmaxH,#0 ;максимальную скорость >>> Skex: jmp DisCom ;и пеpеход на начало {20мс} >>> SkoR11: db 080h,"1.Скорость:“, 0ffh, 094h,& quot;Текущая = „, 0 >>> SkoR41: db 0d4h,"Максим-я= „, 0 ;4я стpока >>> ;------------------------------------Вре мя----------------------------------- >>> Vremya: mov dptr,#Vrem11 ;сообщение: 080h,"2.Время:“, >>> call Outstr ;0ffh, 0c0h,"Общее „, 0 >>> mov R0,#Chas ;R0 адресовать на счетчик часов >>> call Time ;отобразить общее время поездки >>> mov dptr,#Vrem31; >>> call Outstr; >>> mov R0,#Chass ;R0 адресовать на счетчик часов >>> call Time ;в простое. Отобразить время >>> mov dptr,#Vrem41; >>> call Outstr; >>> mov R0,#Chasm ;R0 адресовать на счетчик часов >>> call Time ;в поездке. Отобразить время >>> VR1: jnb Knobf, Vrex ;кнопка не нажата — переход >>> mov R0,#Chas ;адресовать R0 на ячейки времени >>> VR2: mov @R0,#0 ;обнулить ячейку >>> inc R0 ;следующая ячейка >>> cjne R0,#Secundm+1,VR2;цикл обнуления времени >>> Vrex: jmp DisCom ;и пеpеход на начало {3мс} >>> Vrem11: db 080h,"2.Время:“, 0ffh, 0c0h,&quo t;Общее „, 0 >>> Vrem31: db 094h,"Простоя „, 0 ;3я стpока >>> Vrem41: db 0d4h,"В движении „, 0 ;4я стpока >>> ;-------------------------------Текущий пробег------------------------------- >>> Probeg: mov dptr,#Probeg1 ;сообщение: 080h,"3.Текущий пробег:“, >>> call Outstr ;0ffh, 0c0h,"S = „, 0 >>> call Sshow ;подпрограмма отображения пробега >>> mov A, Bufout+0 ;читать младший байт пробега (метры) >>> call Wrsymb ;отобpазить байт >>> mov dptr,#Probeg3 ;сообщение >>> call OutX ;“ км“, 0 >>> Prob1: jnb Knobf, Probex ;кнопка не нажата — переход >>> mov Dist1,#0 ;обнуление >>> mov Dist2,#0 ;пробега >>> mov Dist3,#0; >>> Probex: jmp DisCom ;и пеpеход на начало >>> Probeg1: db 080h,"3.Текущий пробег:“, 0ffh, 0c0h,"S = „, 0 >>> Probeg3: db „км“, 0 ;2я стpока >>> ;----------------------------Напряжение бортсети:---------------------------- >>> Volt: mov dptr,#Volt11 ;сообщение: 080h,"4.Напряжение АКБ:“, >>> call Outstr ;0ffh, 0c0h,"U = „, 0 >>> mov A, Utek ;читать значение напряжения бортсети >>> call Shvolt ;отобразить напряжение >>> mov dptr,#Volt31 ;сообщение >>> call Outstr ;094h,"Uмин=“, 0 >>> mov A, Umin ;минимальное напряжение бортсети >>> call Shvolt ;отобразить напряжение >>> mov dptr,#Volt32 ;сообщение >>> call Outstr ;094h,"Uмин=“, 0 >>> mov A, Umax ;максимальное напряжение бортсети >>> call Shvolt ;отобразить напряжение >>> Volt1: jnb Knobf, Voltex ;кнопка не нажата — переход >>> mov Umin,#150 ;инициировать Umin напряжением 15 В >>> mov Umax,#60 ;инициировать Umax напряжением 6 В >>> Voltex: jmp DisCom ;и пеpеход на начало {3мс} >>> Volt11: db 080h,"4.Напряжение АКБ:“, 0ffh, 0c0h,"U = „, 0 >>> Volt31: db 094h,"Uмин=“, 0;3я стpока >>> Volt32: db 0d4h,"Uмaх=“, 0;4я стpока >>> ;------------------------------Расход топлива1------------------------------- >>> Rashod1: mov dptr,#Rash111 ;сообщение: 080h,"5.Расход топлива1“, >>> call Outstr ;0ffh, 0c0h,"Общий R = „, 0 >>> mov Bufish+0,Rash1L;младший байт расхода >>> mov Bufish+1,Rash1H;старший байт расхода >>> call Shrash ;отобразить общий расход >>> mov R7,#2 ;R7 число знаков после запятой >>> jb Moving, Rash1 ;движение есть — переход >>> mov dptr,#Rash41 ;сообщение >>> call Outstr ;094h,"л/час = „, 0 >>> mov A, MLsecM ;читать значение расхода в секунду >>> mov B,#9 ;B/16 — значение в [мл/с] >>> mul AB ;B/16×3600/1000 = B х 9 / 40 — значение в [л/ч] >>> mov R0, A; >>> mov R1, B ;R1:R0 = B х 9 — делимое >>> mov R2,#40 ;R3:R2 — делитель >>> mov R3,#0; >>> call Float ;деление и отображения числа с плавающей точкой >>> mov MLdistM,#0 ;обнулить счетчик расхода по дистанции >>> jmp Rash2; >>> Rash1: mov dptr,#Rash42 ;сообщение >>> call Outstr ;0d4h,"л/100км = „, 0 >>> mov R0, MLdistM ;R0 делимое младший байт >>> mov R1,#0 ;R1 делимое старший байт >>> mov R2,#16 ;R2 делитель младший байт >>> mov R3,#0 ;R3 делитель старший байт >>> call Float ;деление и отображения числа с плавающей точкой >>> Rash2: call CLRstr ;вывод четырех пробелов без адресации курсора >>> jnb Knobf, Rashex1 ;кнопка не нажата — переход >>> mov Rash1L,#0 ;обнуление >>> mov Rash1H,#0 ;расхода >>> Rashex1: jmp DisCom ;и пеpеход на начало {22мс} >>> Rash111: db 080h,"5.Расход топлива1″, 0ffh, 0c0h,"Общий R = „, 0 >>> Rash41: db 0d4h,"л/час = „, 0 ;4я стpока >>> Rash42: db 0d4h,"л/100км = „, 0 ;4я стpока >>> ;------------------------------Расход топлива2------------------------------- >>> Rashod2: mov dptr,#Rash112 ;сообщение: 080h,"6.Расход топлива2″, >>> call Outstr ;0ffh, 0c0h,"Общий R = „, 0 >>> mov Bufish+0,Rash2L;младший байт расхода >>> mov Bufish+1,Rash2H;старший байт расхода >>> call Shrash ;отобразить общий расход >>> jnb Knobf, Rashex2 ;кнопка не нажата — переход >>> mov Rash2L,#0 ;обнуление >>> mov Rash2H,#0 ;расхода >>> Rashex2: jmp DisCom ;и пеpеход на начало {22мс} >>> Rash112: db 080h,"6.Расход топлива2″, 0ffh, 0c0h,"Общий R = „, 0 >>> KodERex: jmp EXitf ;выход с очисткой Knobf >>> ;--------------------------------Коды ошибок--------------------------------- >>> KodERR: mov dptr,#Kodm11 ;сообщение: 080h,"8.Коды ошибок“, >>> call Outstr ;0ffh, 080h+18,0 >>> mov R0,#50h+4 ;[50h+4] - байт количества ошибок в XRAM >>> movx A,@R0 ;читать байт XRAM >>> call Decout ;отобразить значение >>> jz KodER0 ;ошибок нет — переход >>> jb ErrBeep, KodER0;бит установлен — звуковой сигнал не выдавать (1108) >>> mov rcap2h,#0F0h ;Входная частота (в режиме X2) 10МГЦ / 2 = 5МГЦ >>> mov rcap2l,#01h ;Выходная частота = 2.5МГц / (10000h — F57F) = 930Гц >>> mov Beep,#2 ;таймер звукового сигнала. Время 3×50мс = 150мс >>> KodER0: jnb Knobf, KodERex ;кнопка не нажата — переход >>> setb ErrBeep ;блокировать подачу звукового сигнала >>> clr Knobf ;иначе — сбросить бит нажатия кнопки >>> jz KodERex ;ошибок нет — выход >>> mov R4, A ;запомнить число ошибок >>> KodER1: mov R1,#0 ;счетчик номера ошибки >>> mov R0,#50h+5 ;[50h+5] - начало массива ошибок в XRAM >>> KodER2: mov dptr,#Kodm42 ;сообщение >>> call Outstr ;0d4h+10,0ffh, 1,"P“, 0 >>> movx A,@R0 ;читать байт XRAM >>> mov R3, A; >>> call Hexout ;старший байт >>> inc R0 ;код ошибки >>> movx A,@R0 ;читать байт XRAM >>> mov R2, A ;R3:R2 — код ошибки без начальной P (P0100) >>> call Hexout ;старший байт >>> inc R0 ;код статуса пропустить >>> inc R0 ;следующий адрес XRAM >>> inc R1 ;увеличить порядковый номер ошибки >>> mov dptr,#Kodm41 ;сообщение >>> call Outstr ;0d4h,"Номер:“, 0 >>> mov A, R1 ;отобразить >>> call Decout ;номер ошибки >>> mov R6,#0 ;счетчик номера строки R7: R6 в базе Ptrain >>> mov R7,#0 ;для поиска по номеру ошибки >>> ;Поиск расшифровки ошибки >>> SEAch1: call L_DPTR ;загрузка в DPTR адреса сообщения с номером в R7: R6 >>> mov A,#0 ;первый байт — >>> movc A,@a+dptr ;старший номер ошибки >>> mov B, R3 ;сравнить с номером от ЭБУ (в R3) >>> cjne A, B, SEAch2 ;не совпадает — переход >>> inc dptr ;иначе — следующий байт в строке сообщения >>> mov A,#0 ;второй байт — >>> movc A,@a+dptr ;старший номер ошибки >>> mov B, R2 ;сравнить с номером от ЭБУ (в R2) >>> cjne A, B, SEAch2 ;не совпадает — переход >>> inc dptr ;иначе — здесь DPTR указывает на сообщение >>> call Outs ;вывести сообщение на дисплей без адресации курсора >>> jmp KodER3 ;выход из цикла поиска >>> SEAch2: mov A, R6 ;16 — ричный инкремент: >>> add A,#1 ;R4 — величина приращения >>> mov R6, A ;R7:R6 = R7: R6 + 1 >>> mov A, R7; >>> addc A,#0; >>> mov R7, A ;проверка на переполнение: >>> jz SEAch1 ;старший байт = 0 — переполнения нет >>> mov A, R6 ;проверка младшего байта >>> clr C ;на значение D8h >>> subb A,#0d8h ;R7:R6 = D8 = 472 >>> jc SEAch1 ;значение не достигнуто — переход >>> mov dptr,#Kodm12 ;иначе — сообщение >>> call Outstr ;080h,"Код не найден“, 0 >>> KodER3: jnb Right, KodER4 ;поворота энкодера вправо нет — переход >>> clr Right ;иначе — сбросить флаг поворота вправо >>> mov A, R1 ;читать счетчик номера отображаемой ошибки >>> mov B, R4; >>> cjne A, B, KodER2 ;не равен — переход >>> jmp KodER1 ;переход на отображение ошибок >>> KodER4: jnb Left, KodER5 ;поворота энкодера влево нет — переход >>> clr Left ;иначе — сбросить флаг поворота влево >>> mov A, R1 ;проверка счетчика >>> dec A ;на начальный 1 >>> jz KodER5 ;значение достигнуто — переход >>> dec R0 ;-1 перейти к предидущей ошибке >>> dec R0 ;-2 >>> dec R0 ;-3 >>> dec R1 ;-1 >>> dec R0 ;-4 перейти к предидущей ошибке >>> dec R0 ;-5 >>> dec R0 ;-6 перейти к предидущей ошибке >>> dec R1 ;-2 >>> jmp KodER2; >>> KodER5: jb P2.6,KodER6 ;зажигание выключено — выход >>> jnb Knobf, KodER3 ;кнопка не нажата — переход >>> KodER6: jmp EXcls ;и пеpеход на начало >>> Kodm11: db 080h,"7.Коды ошибок“, 0ffh, 080h+18,0 ;1я стpока >>> Kodm12: db 080h,"Код не найден“, 0 ;1я стpока >>> Kodm41: db 0d4h,"Номер:“, 0 ;4я стpока >>> Kodm42: db 1,0ffh, 0d4h+10,"P“, 0 ;4я стpока >>> ;----------------------Температура охлаждающей жидкости---------------------- >>> Termo: mov dptr,#Termo1 ;сообщение: 080h,"9.Температура ОЖ“, >>> call Outstr ;0ffh, 0d4h,"T= „, 0 >>> mov R0,#12h+6 ;10h — адрес ответа ЭБУ в XRAM >>> movx A,@R0 ;читать байт XRAM >>> clr C ;пересчет по формуле >>> subb A,#88 ;N=E-40(88) [C] >>> jc term1 >>> add A, Tcorr ;добавить значение коррекции >>> push acc ;сохранить параметр >>> subb A,#20 ;вычесть значение 20 градусов >>> pop acc ;восстановить параметр >>> jnc Term2 ;температуру ниже 20 — не показывать >>> term1: mov dptr,#Termo3 ;сообщение: >>> call Outstr ;094h,"ниже 20 градусов“, 0 >>> jmp DisCom ;и пеpеход на начало >>> Term2: call Decout ;отобразить значение >>> mov A,#"C“ ;отобразить >>> call WrDAT ;размерность >>> call Prob ;вместо нуля отобразить пробел >>> mov dptr,#Termo2 ;сообщение >>> call Outstr ;094h,"Максимальная = „, 0 >>> mov A, TDmax ;читать максимальную температуру >>> clr C ;пересчет по формуле >>> subb A,#88 ;N=E-40 [C] >>> add A, Tcorr ;добавить значение коррекции >>> call Decout ;отобразить значение >>> mov A,#"C“ ;отобразить >>> call WrDAT ;размерность >>> call Prob ;вместо нуля отобразить пробел >>> jnb Knobf, TermoEX ;кнопка не нажата — переход >>> mov TDmax,#0 ;обнуление >>> TermoEX: jmp DisCom ;и пеpеход на начало >>> Termo1: db 080h,"8.Температура ОЖ“, 0ffh, 094h,"T = „, 0 >>> Termo2: db 0d4h,"Макс-ная = „, 0 ;4я стpока >>> Termo3: db 094h,"T < 20C „, 0 ;3я стpока >>> ;----------------------------Напряжение бортсети----------------------------- >>> VoltBS: mov dptr,#VoltBS1 ;сообщение: 080h,"10.Напряжение“, 0ffh, 0c0h, >>> call Outstr ;"бортсети от ЭБУ:“, 0ffh, 0d4h,"U = „, 0 >>> mov R0,#12h+8 ;формула N=5.2+E/20[В] или 52+E/2 >>> movx A,@R0 ;читать значение напряжения >>> clr C; >>> rrc A ;делим на 2 >>> add A,#52 ;+ 52 >>> call Shvolt1 ;отображение напряжения >>> ljmp EXitf ;выход с очисткой Knobf >>> VoltBS1: db 080h,"9.Напряжение“, 0ffh, 0c0h, „бортсети от ЭБУ:“, 0ffh, 0d4h,"U = „, 0 >>> ;-------------------------Скорость вращения двигателя------------------------ >>> Obor: mov dptr,#Obor1 ;сообщение: 080h,"11.Скорость“, 0ffh, 0c0h, >>> call Outstr ;"вращения двигателя“, 0ffh, 0d4h,"V = „, 0 >>> mov R0,#12h+11 ;10h — адрес ответа ЭБУ в XRAM >>> movx A,@R0 ;читать байт XRAM >>> mov B,#40 ;формула N=E*40 [об/мин] >>> mul AB; >>> mov Bufish+0,A ;сохранить младший байт обработанных данных >>> mov Bufish+1,B ;сохранить старший байт обработанных данных >>> call Decimal ;пpеобpазовать в десятичное число >>> mov A, Bufout+3 ;читать пеpвый (стаpший) байт частоты >>> jnz GelHH3 ;нуль не отобpажать >>> call Prob ;вместо нуля отобразить пробел >>> jmp GelHH4; >>> GelHH3: lcall Wrsymb ;отобpазить байт >>> GelHH4: mov A, Bufout+2 ;читать втоpой байт частоты >>> lcall Wrsymb ;отобpазить байт >>> mov A, Bufout+1 ;читать тpетий байт частоты >>> lcall Wrsymb ;отобpазить байт >>> mov A, Bufout+0 ;читать четвеpтый (младший) байт частоты >>> lcall Wrsymb ;отобpазить байт >>> mov dptr,#Obor2 ;сообщение >>> call Outstr ;0d4h+8,"об/мин „, 0 >>> jmp EXitf ;и пеpеход на начало >>> Obor1: db 080h,"10.Скорость“, 0ffh, 0c0h,& quot;вращения двигателя“, 0ffh, 0d4h,"V = „, 0 >>> Obor2: db 0d4h+8,"об/мин“, 0 >>> PtrnEx jmp DisCom ;иначе — пеpеход на начало >>> ;--------------------Просмотр базы сообщений ошибок Ptrain------------------- >>> Ptrain: mov dptr,#Ptr1 ;сообщение: >>> call Outstr ;080h,"12.База Ptrain“, 0 >>> jnb Knobf, PtrnEx ;кнопка не нажата — переход >>> clr Knobf ;иначе — сбросить бит >>> Ptrn1: mov R7,#0 ;R7:R6 Счетчик номера >>> mov R6,#0 ;выводимого сообщения >>> Ptrn2: call CLS ;очистить дисплей ЖКИ >>> mov A,#0d4h ;адресовать курсор >>> call WrCOM ;в начало четвертой строки >>> mov Bufish+0,R6 ;младший байт Отобразить >>> mov Bufish+1,R7 ;средний байт номер >>> mov Bufish+2,#0 ;старший байт выводимого >>> mov Bufish+3,#0 ;старший байт сообщения >>> call Decimal ;пpеобpазовать в 10 — pазpядное десятичное число >>> mov A, Bufout+3 ;читать старший разряд >>> call Wrsymb ;отобpазить байт >>> mov A, Bufout+2 ;читать средний разряд >>> call Wrsymb ;отобpазить байт >>> mov A, Bufout+1 ;читать средний разряд >>> call Wrsymb ;отобpазить байт >>> mov A, Bufout+0 ;читать младший разряд >>> call Wrsymb ;отобpазить байт >>> call L_DPTR ;вычисление адреса выводимого сообщения >>> mov A,#0d4h+15 ;адресовать курсор >>> call WrCOM ;в конец четвертой строки >>> mov A,#"P» ;вывод кода ошибки: >>> call WrDAT ;вывести символ PowerTrain >>> mov A,#0 ;первый байт — >>> movc A,@a+dptr ;старший номер ошибки >>> call Hexout ;отобразить байт >>> inc dptr ;следующий адрес строки >>> mov A,#0 ;второй байт — >>> movc A,@a+dptr ;младший номер ошибки >>> call Hexout ;отобразить байт >>> inc dptr ;следующий адрес строки — начало сообщения >>> call Outs ;вывести сообщение с адресацией курсора на начало >>> Ptrn3: jnb Right, Ptrn5 ;поворота энкодера вправо нет — переход >>> clr Right ;иначе — сбросить флаг поворота вправо >>> mov R4,#1 ;величина приращения номера >>> Ptrn4: mov A, R6 ;16 — ричный инкремент: >>> add A, R4 ;R4 — величина приращения >>> mov R6, A ;R7:R6 = R7: R6 + R4 >>> mov A, R7; >>> addc A,#0; >>> mov R7, A ;проверка на переполнение: >>> jz Ptrn2 ;старший байт = 0 — переполнения нет >>> dec A ;иначе — проверка старшего байта >>> jnz Ptrn1 ;на значение больше 1. Больше — переход >>> mov A, R6 ;проверка младшего байта >>> clr C ;на значение D8h >>> subb A,#0d8h; >>> jc Ptrn2; >>> jmp Ptrn1 ;R7:R6 < 1D8h (472).Переход на обнуление >>> Ptrn5: jnb Left, Ptrn7 ;поворота энкодера влево нет — переход >>> clr Left ;иначе — сбросить флаг поворота влево >>> clr C ;16 — ричный декремент: >>> mov A, R6 ;поверка R7: R6 на >>> orl A, R7 ;нулевое значение >>> jnz Ptrn6 ;не ноль — переход >>> mov R7,#1 ;иначе — записать максимальное значение +1 >>> mov R6,#0d9h ;R7:R6 = 1D9h = 473 >>> Ptrn6: mov A, R6 ;16 — ричный декремент >>> subb A,#1; >>> mov R6, A ;R7:R6 = R7: R6 — 1 >>> mov A, R7; >>> subb A,#0; >>> mov R7, A; >>> jmp Ptrn2 ;переход на отображение >>> Ptrn7: jnb Knobl, Ptrn8 ;долгого нажатия кнопки нет — переход >>> clr Knobl ;иначе — сбросить бит долгого нажатия кнопки >>> mov R4,#50 ;установить инкремент = 50 >>> jmp Ptrn4 ;переход на инкремент >>> Ptrn8: jb P2.6,Ptrn9 ;зажигание выключено — выход >>> jnb Knobf, Ptrn3 ;кнопка не нажата — переход >>> Ptrn9: call CLS ;очистить дисплей ЖКИ >>> jmp DisCom ;иначе — пеpеход на начало >>> >>> L_DPTR: push psw ;загрузка в DPTR адреса >>> push acc ;сообщения с номером в R7: R6 >>> push 7 ;сохранить изменяемые регистры >>> push 6 ;размерность таблицы адресов — 2 байта >>> clr C ;поэтому номер R6: R7 умножается на 2 >>> mov A, R6; >>> rlc A ;16 — ричное умножение на 2 >>> mov R6, A ;R7:R6 = 2 х R7: R6 >>> mov A, R7 ;R7:R6 — смещение на >>> rlc A ;отображаемое сообщение >>> mov R7, A; >>> mov dptr,#PtrainB ;начальный адрес таблицы адресов сообщений >>> mov A, dpl ;добавить смещение: >>> add A, R6 ;16 — ричное сложение >>> mov dpl, A ;DPTR = DPTR + R7: R6 >>> mov A, dph ;адреса располагаются в порядке: >>> addc A, R7 ;сначала ст. б, потом мл.б. >>> mov dph, A ;здесь DPTR указывает на адрес сообщения >>> mov A,#0 ;загрузить старший байт >>> movc A,@a+dptr ;адреса выводимого сообщения >>> push acc ;сохранить значение >>> inc dptr ;следующий адрес таблицы >>> mov A,#0 ;загpузить младший байт >>> movc A,@a+dptr ;адреса выводимого сообщения >>> mov dpl, A ;здесь DPTR указывает на сообщение, >>> pop dph ;определяемое номером в R7: R6 >>> pop 6 ;восстановить >>> pop 7 ;изменяемые >>> pop acc ;регистры >>> pop psw; >>> ret; >>> Ptr1: db 080h,"11.База Ptrain", 0 ;1я стpока >>> ;----------------------------Слово режима работы----------------------------- >>> W_Work: mov dptr,#W_Wm11 ;сообщение: 080h,"13.Слово режима", 0ffh, 0c0h, >>> call Outstr ;"работы", 0ffh, 0d4h, 0
>>> mov R0,#12h+5 ;10h — адрес ответа ЭБУ в XRAM
>>> movx A,@R0 ;читать байт XRAM
>>> call Hexout ;отобразить байт
quoted3 quoted2 >
Развернуть начало сообщения >>> call Prob ;отобразить межбайтовый пробел
>>> inc R0 ;следующий адрес XRAM
>>> movx A,@R0 ;читать байт XRAM
quoted3 >>
>>> call Hexout ;отобразить байт
>>> jmp EXitf ;выход с очисткой Knobf
>>> W_Wm11: db
quoted3 >>Оюшки….)))
>> …
quoted1 quoted2
александр74мар (александр74мар) писал (а) в ответ на сообщение :Развернуть начало сообщения > MuteCRT (MuteCRT) писал (а) в ответ на сообщение:
Развернуть начало сообщения >> александр74мар (александр74мар) писал (а) в ответ на сообщение:
Развернуть начало сообщения >>> MuteCRT (MuteCRT) писал (а) в ответ на сообщение: >>>> александр74мар (александр74мар) писал (а) в ответ на сообщение: >>>>> MuteCRT (MuteCRT) писал (а) в ответ на сообщение: >>>>>> александр74мар (александр74мар) писал (а) в ответ на сообщение: >>>>>>> Система в России давит на социум, гораздо меньше, чем США…
>>>>>> Потому что больше и не может — народ и так обнищал. Попробуй выдрать из народа 50% налога. Ага?
>>>>> Это вы где такое прочитали…?
>>>>> ……
quoted3 quoted2 >
Развернуть начало сообщения >>>> Ну так откровенно тупить то не надо:
>>>> Ты ж технарь, а не какой — то там Вася.
>>> Вы хотите сказать, что в Германии не экономят…?
>>> Или скажем в Великобритании…?
quoted3 >>Экономят что?
quoted2 >На чём…
quoted1 Куда?
александр74мар (александр74мар) писал (а) в ответ на сообщение :> Вы отремонтируйте Мерседес и одиннадцатую…. Или Ладу-Калину….
quoted1 новый мерин, не требует ремонта
Румпель Штильцхен (Блюмкин) писал (а) в ответ на сообщение :> новый мерин, не требует ремонта
quoted1 это лёгкий танк…
Ruby Ludwig Valentin (Mad_and_crazy) писал (а) в ответ на сообщение :> Владимир Аникин (32843) писал (а) в ответ на сообщение:
>> На hh.ru по специальности программист или сетевой администратор сотни вакансий. зарплата до 150 р/мес. Вам в каком городе надо?
quoted2 >
> вакансии есть, но я заморожен. теми самыми путиными.
quoted1 Нифига себе… Самим Путиным?! Такие специалисты пропадают… Короче ясно. Заявка не ваша. При таких параметрах не найти работу может только реально замороженный. Или похороненный.
Владимир Аникин (32843) писал (а) в ответ на сообщение : или его осатаневшими двойниками. Владимир Аникин (32843) писал (а) в ответ на сообщение :> При таких параметрах не найти работу может только реально замороженный. Или похороненный.
quoted1 заживо хоронят, сволочи. и руки опускают, подлюки… а сам *** пархатый с квадратной бородкой?
Ruby Ludwig Valentin (Mad_and_crazy) писал (а) в ответ на сообщение :> александр74мар (александр74мар) писал (а) в ответ на сообщение:
>> Допустим стариком, я буду…
>> Путин, здесь при каких делах…?
quoted2 >
> Путин меня рассекретил и сократил с работы. Или при Путине, с его молчаливого согласия. Он хавает мои деньги, сам живёт в роскоши, а мне не желает платить по среднему классу.
quoted1 Какой Путин? Бредишь? Я видел заявку по вашей ссылке — не знаю уж откуда вы её нарыли, но не трудоустроится такому специалисту можно только по причине преждевременной кончины. Ну, есть вариант еще алкоголизма или наркомании. Что почти равнозначно. Там не только «средним классом» попахивает. У нас на КАМАЗе мальчишки программисты и сисадмины с институтской скамьи всасываются…
Ruby Ludwig Valentin (Mad_and_crazy) писал (а) в ответ на сообщение :Развернуть начало сообщения > Владимир Аникин (32843) писал (а) в ответ на сообщение:
>
> или его осатаневшими двойниками.
>
> Владимир Аникин (32843) писал (а) в ответ на сообщение:
>> При таких параметрах не найти работу может только реально замороженный. Или похороненный.
quoted2 >
> заживо хоронят, сволочи. и руки опускают, подлюки…
> а сам *** пархатый с квадратной бородкой?
quoted1 Точно бред…
MuteCRT (MuteCRT) писал (а) в ответ на сообщение :Развернуть начало сообщения > Владимир Аникин (32843) писал (а) в ответ на сообщение:
Развернуть начало сообщения >> Ruby Ludwig Valentin (Mad_and_crazy) писал (а) в ответ на сообщение:
Развернуть начало сообщения >>> александр74мар (александр74мар) писал (а) в ответ на сообщение: >>>> Девять лет, вы не нашли ни чего умнее, как винить в своих неудачных косяках Путина…?
>>>
>>> А если я не хочу жениться на про*****?
>>> Его двойники все Путины и сатанеют на меня.
quoted3 >>Парень, напиши нам, где ты живешь. Мы тебе всем скопом поможем работу найти. Только хочу предупредить: вакансия Сечина занята…
quoted2 >А теперь это всей стране предложи.
quoted1 Я заводчику темы уже предложил, только он какую-то пургу гонит. Его то ли сам Путин, то ли его двойники «рассекретили и заморозили». Каково? По-моему клиника…
Владимир Аникин (32843) писал (а) в ответ на сообщение :> не трудоустроится такому специалисту можно только по причине преждевременной кончины.
quoted1 русские подозрительно относятся к заграничным дипломам. Владимир Аникин (32843) писал (а) в ответ на сообщение :> . Ну, есть вариант еще алкоголизма или наркомании. Что почти равнозначно.
quoted1 обижаете
Владимир Аникин (32843) писал (а) в ответ на сообщение :> Я заводчику темы уже предложил, только он какую-то пургу гонит. Его то ли сам Путин, то ли его двойники «рассекретили и заморозили». Каково? По-моему клиника…
quoted1 ну вот, докторишко бесплатный нашёлся. вася пупкин дебил? русские папы не папа римский путин не благотворительная фирма, заказал меня на детский бизнес.
Ruby Ludwig Valentin (Mad_and_crazy) писал (а) в ответ на сообщение :> Он, сволочь, меня дрочит и говном поливает. 9 лет безработицы.
quoted1 > Привыкайте говорить о своей жизни с бО льшей ответственностью: «Я позволяю себя дрочить и говном поливать. Я не работаю 9 лет». Многим помогает…
Лира Лира (36358) писал (а) в ответ на сообщение :> Привыкайте говорить о своей жизни с бОльшей ответственностью: «Я позволяю себя дрочить и говном поливать. Я не работаю 9 лет».
quoted1 Ну вот, хамка!
Ruby Ludwig Valentin (Mad_and_crazy) писал (а) в ответ на сообщение : А почему, СОБССНО ? Ты же пишешь именно так. Я всего лишь сместила акцент.
Вернуться к списку тем