![]() |
|
|
Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Junior Member
Регистрация: 26.11.2009
Возраст: 43
Сообщений: 7
Вес репутации: 100/0 ![]() ![]() |
![]()
Проблема заключается в следующем,в asm файле я не могу изменить параметры портов ввода-вывода.Мне нужно чтобы с порта PORTB,2 выходил не инвертированный сигнал при выходе железа через датчик Холла,а из PORTB,3 также выходил не инвертированный сигнал при входе железа в датчик Холла(металлическая шторка 90 градусов металл/90 градусов пропуск/90 градусов металл /90 градусов пропуск,1 датчик Холла)
Код:
;-------------------------------------------------------------------------------------------------- ; ; Файл: ignition.asm ; ; Версия: 1.51 ; ; Дата: 24.12.2009, 13:49:02 ; ; Описание: Программа управления электронным зажиганием. ; Файл создан программой IgnitionMaster. ; ; Конфигурация: ; микроконтроллер - PIC16F84 и его модификации ; конфигурация шторки - МЕТАЛЛ 30 ГРАДУСОВ ; график по умолчанию - СИНИЙ ; график 1 - СИНИЙ ; график 2 - СИНИЙ ; дополнительная функция 1 - ОТСУТСТВУЕТ ; дополнительная функция 2 - ОТСУТСТВУЕТ ; ;-------------------------------------------------------------------------------------------------- ; Контроллер -------------------------------------------------------------------------------------- LIST p=16f84 #define PIC16F84 ;-------------------------------------------------------------------------------------------------- ; Register Definitions ;-------------------------------------------------------------------------------------------------- W EQU H'0000' F EQU H'0001' ;----- Register Files------------------------------------------------------------------------------ INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' EEDATA EQU H'0008' EEADR EQU H'0009' PCLATH EQU H'000A' INTCON EQU H'000B' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' EECON1 EQU H'0088' EECON2 EQU H'0089' ;----- STATUS Bits -------------------------------------------------------------------------------- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- INTCON Bits -------------------------------------------------------------------------------- GIE EQU H'0007' EEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RBIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RBIF EQU H'0000' ;----- OPTION Bits -------------------------------------------------------------------------------- NOT_RBPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' ;----- EECON1 Bits -------------------------------------------------------------------------------- EEIF EQU H'0004' WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'0001' RD EQU H'0000' ;-------------------------------------------------------------------------------------------------- ; RAM Definition ;-------------------------------------------------------------------------------------------------- __MAXRAM H'CF' __BADRAM H'07', H'50'-H'7F', H'87' ;-------------------------------------------------------------------------------------------------- ; Configuration Bits ;-------------------------------------------------------------------------------------------------- _CP_ON EQU H'000F' _CP_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _PWRTE_OFF EQU H'3FFF' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LP_OSC EQU H'3FFC' _XT_OSC EQU H'3FFD' _HS_OSC EQU H'3FFE' _RC_OSC EQU H'3FFF' ; Конфигурация ------------------------------------------------------------------------------------ __CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC ; Параметры --------------------------------------------------------------------------------------- #define TMR_VALUE 0xCE ; Квантование таймера 60 мкс #define COIL_OFF_VALUE 0x60 ; Отключение катушки через 4 секунды #define MODUL_CONFIG_METAL ; Конфигурация шторки-модулятора: МЕТАЛЛ ; Назначение портов ввода/вывода ------------------------------------------------------------------ #define pLED_N PORTA,2 ; Выход на светодиод #define pSENSOR PORTB,1 ; Вход датчика Холла #define pCOIL PORTB,2 ; Выход управления коммутатором #define pCOIL_N PORTB,3 ; Инвертированный выход управления коммутатором #define pFUNC1_N PORTB,4 ; Вход дополнительной функции 1 #define pFUNC2_N PORTB,5 ; Вход дополнительной функции 2 #define pSELECT1_N PORTB,6 ; Выбор таблицы УОЗ 1 #define pSELECT2_N PORTB,7 ; Выбор таблицы УОЗ 2 ; Маски портов ------------------------------------------------------------------------------------ #define SENSOR_MASK 0x02 ; Вход датчика Холла #define FUNC1_MASK 0x10 ; Вход дополнительной функции 1 #define FUNC2_MASK 0x20 ; Вход дополнительной функции 2 #define SELECT1_MASK 0x40 ; Выбор таблицы УОЗ 1 #define SELECT2_MASK 0x80 ; Выбор таблицы УОЗ 2 ; Направление работы портов ввода/вывода (0 - вывод, 1 - ввод) ------------------------------------ #define PORTA_IO 0x00 ; Порт A #define PORTB_IO 0xF2 ; Порт B ; Сбросовые состояния портов ---------------------------------------------------------------------- #define PORTA_RESET 0x04 ; Порт A #define PORTB_RESET 0x08 ; Порт B ; Память данных ----------------------------------------------------------------------------------- TmpW EQU 0x10 ; Состояние W TmpSTATUS EQU 0x11 ; Состояние STATUS Flags EQU 0x12 ; Флаги состояния Ports EQU 0x13 ; Состояние входных портов SensCnt EQU 0x14 ; Счетчик фильтра датчика Холла SectorCnt EQU 0x15 ; Счетчик сектора LastSectorCnt EQU 0x16 ; Сохраненное значение счетчика сектора SparkTime EQU 0x17 ; Определяет момент искрообразования CoilCnt_0 EQU 0x18 ; Двухбайтный счетчик включения катушки CoilCnt_1 EQU 0x19 CoilOffCnt_0 EQU 0x1A ; Двухбайтный счетчик отключения катушки при простое CoilOffCnt_1 EQU 0x1B Func1Cnt EQU 0x1C ; Счетчик фильтра на входе FUNC1 Func2Cnt EQU 0x1D ; Счетчик фильтра на входе FUNC2 Select1Cnt_0 EQU 0x1E ; Двухбайтный счетчик фильтра на входе SELECT1 Select1Cnt_1 EQU 0x1F Select2Cnt_0 EQU 0x20 ; Двухбайтный счетчик фильтра на входе SELECT2 Select2Cnt_1 EQU 0x21 ; Битовые переменные ------------------------------------------------------------------------------ #define bLastState Flags,0 ; Последнее состояние сигнала датчика Холла #define bOverflow Flags,1 ; Переполнение счетчика #define bCoilOff Flags,2 ; Отключение катушки при простое #define bEngineStop Flags,3 ; Отключение двигателя #define bOverrun1 Flags,4 ; Срабатывание ограничения оборотов по функции 1 #define bOverrun2 Flags,5 ; Срабатывание ограничения оборотов по функции 2 #define bSens Ports,1 ; Состояние сигнала датчика Холла после программного фильтра #define bFunc1_n Ports,4 ; Включение дополнительной функции 1 #define bFunc2_n Ports,5 ; Включение дополнительной функции 2 #define bSelect1_n Ports,6 ; Выбор характеристики УОЗ 1 #define bSelect2_n Ports,7 ; Выбор характеристики УОЗ 2 ; Вектор сброса ----------------------------------------------------------------------------------- ORG 0x0000 clrwdt clrf INTCON ; Обнуляем регистр прерываний goto Start ; Переходим к началу программы ; Вектор прерываний ------------------------------------------------------------------------------- ORG 0x0004 ; Interrupt --------------------------------------------------------------------------------------- ; ; Описание: Прерывание от TMR0. Измерение времени прохода шторки по сигналу с датчика Холла. ; Своевременное включение и отключение катушки. ;-------------------------------------------------------------------------------------------------- Interrupt; clrwdt movwf TmpW ; Сохраняем состояние swapf STATUS,W movwf TmpSTATUS movlw TMR_VALUE ; Квантование таймера movwf TMR0 bcf INTCON,T0IF ; Сбрасываем флаг прерывания movf PORTB,W ; Программный фильтр по входу датчика Холла xorwf Ports,W andlw SENSOR_MASK btfsc STATUS,Z clrf SensCnt ; Сбрасываем байт счетчика incf SensCnt,F btfss SensCnt,2 ; Досчитаем до 4 goto $+.4 movlw SENSOR_MASK ; Инвертируем состояние флага xorwf Ports,F clrf SensCnt #ifdef MODUL_CONFIG_METAL btfss bSens ; Проверяем флаг датчика (1 - шторка в датчике, 0 - вне датчика) goto _Out #else ; #ifdef MODUL_CONFIG_SPACE btfsc bSens ; Проверяем флаг датчика инверсно (0 - шторка в датчике, 1 - вне датчика) goto _Out #endif btfsc bLastState ; Проверяем предидущее состояние датчика goto _SensorActive _SensorIn ; Шторка вошла в датчик btfsc bEngineStop ; Если двигатель не остановлен goto $+.7 btfsc bOverrun1 ; Нет ограничения оборотов по функции 1 goto $+.5 btfsc bOverrun2 ; Нет ограничения оборотов по функции 2 goto $+.3 bsf pCOIL ; Включаем катушку зажигания bcf pCOIL_N movf SectorCnt,W ; Сохраняем счетчик оборотов movwf LastSectorCnt bsf bLastState ; Обновляем данные о состоянии датчика clrf SectorCnt ; Сбрасываем счетчик bcf bOverflow ; Сбрасываем флаг переполнения clrf CoilOffCnt_1 ; Обнуляем счетчик отключения катушки, двигатель работает bcf bCoilOff ; Снимаем флаг отключения катушки, двигатель работает goto _ExitInterrupt _SensorActive ; Активный элемент шторки уже в датчике bcf pLED_N ; Включаем светодиод btfsc bOverflow ; Если счетчик был переполнен, не проверяем его на момент искрообразования goto _ExitInterrupt incf SectorCnt,F ; Продолжаем отсчитывать счетчик movf SectorCnt,W ; Проверяем счетчик на переполнение (максимум 239) xorlw .239 btfsc STATUS,Z bsf bOverflow ; Счетчик переполнен, выставляем флаг movf SparkTime,W ; Проверяем счетчик на момент искрообразования, если он не равен 0 (т.е. при запуске) btfsc STATUS,Z goto _ExitInterrupt ; Происходит запуск, искра будет образована при выходе шторки из датчика xorwf SectorCnt,W btfss STATUS,Z goto _ExitInterrupt bcf pCOIL ; Инициируем искру bsf pCOIL_N goto _ExitInterrupt _Out ; Шторка вне датчика btfss bLastState ; Проверяем предидущее состояние датчика goto _SensorIdle _SensorOut ; Шторка вышла из датчика bcf pCOIL ; Инициируем искру, если этого еще не произошло (запуск) bsf pCOIL_N bcf bLastState ; Обновляем данные о состоянии датчика clrf CoilCnt_0 ; Обнуляем время включения катушки clrf CoilCnt_1 movf SparkTime,W ; Скважность импульсов должна составлять ~70% btfsc STATUS,Z movlw .239 addwf SectorCnt,W movwf CoilCnt_0 rlf CoilCnt_1,F call CalculateSparkTime ; Вычисляем момент искрообразования movwf SparkTime goto _ExitInterrupt _SensorIdle ; Шторка уже вне датчика bsf pLED_N ; Отключаем светодиод decf CoilCnt_0,F ; Обновляем счетчик включения катушки btfss STATUS,Z goto _ExitInterrupt movf CoilCnt_1,W btfsc STATUS,Z goto $+.3 decf CoilCnt_1,F goto _ExitInterrupt btfsc bEngineStop ; Если двигатель не остановлен goto $+.9 btfsc bCoilOff ; Катушка не отключена при простое goto $+.7 btfsc bOverrun1 ; Нет ограничения оборотов по функции 1 goto $+.5 btfsc bOverrun2 ; Нет ограничения оборотов по функции 2 goto $+.3 bsf pCOIL ; Включаем катушку зажигания bcf pCOIL_N _ExitInterrupt swapf TmpSTATUS,W ; Восстанавливаем состояние movwf STATUS swapf TmpW,F swapf TmpW,W retfie ; Start ------------------------------------------------------------------------------------------- ; ; Описание: Начало программы, инициализация контроллера и установка в начальное состояние, ; главный цикл программы. ;-------------------------------------------------------------------------------------------------- Start; #ifdef PIC16F628 movlw 0x07 ; Отключаем компаратор (только PIC16F628) movwf CMCON #endif bsf STATUS,RP0 ; Выбор банка памяти 1 clrf EECON1 ; Очищаем регистр записи/чтения ЭППЗУ movlw PORTA_IO ; Устанавливаем направление портов (1 - ввод, 0 - вывод) movwf TRISA movlw PORTB_IO movwf TRISB movlw 0x88 ; Резисторы на PB ВЫКЛючены, делитель на WDT movwf OPTION_REG bcf STATUS,RP0 ; Выбор банка памяти 0 movlw PORTA_RESET ; Порты в сброс movwf PORTA movlw PORTB_RESET movwf PORTB clrf Flags ; Сбрасываем регистры clrf SectorCnt clrf LastSectorCnt clrf SparkTime clrf CoilCnt_0 clrf CoilCnt_1 clrf CoilOffCnt_0 clrf CoilOffCnt_1 movf PORTB,W ; Выставляем биты состояния портов andlw SENSOR_MASK | FUNC1_MASK | FUNC2_MASK | SELECT1_MASK | SELECT2_MASK movwf Ports #ifdef FUNC1_ENGINE_STOP ; Функция отключения двигателя btfsc bFunc1_n ; Включена дополнительная функция goto $+.3 bsf bEngineStop ; Отключаем двигатель goto $+.2 bcf bEngineStop ; Включаем двигатель #endif #ifdef FUNC2_ENGINE_STOP ; Функция отключения двигателя btfsc bFunc2_n ; Включена дополнительная функция goto $+.3 bsf bEngineStop ; Отключаем двигатель goto $+.2 bcf bEngineStop ; Включаем двигатель #endif #ifdef MODUL_CONFIG_METAL btfss pSENSOR ; Проверяем текущее состояние датчика goto $+.8 #else ; #ifdef MODUL_CONFIG_SPACE btfsc pSENSOR ; Проверяем текущее состояние датчика инверсно (fix 1.51) goto $+.8 #endif ; Шторка в датчике bcf pLED_N ; Включаем светодиод bsf bLastState ; Обновляем флаг состояния датчика btfsc bEngineStop ; Если двигатель не остановлен goto $+.3 bsf pCOIL ; Включаем катушку зажигания bcf pCOIL_N goto $+.5 ; Шторка вне датчика bsf pLED_N ; Отключаем светодиод bcf bLastState ; Обновляем флаг состояния датчика bcf pCOIL ; Отключаем катушку зажигания bsf pCOIL_N movlw TMR_VALUE ; Квантование таймера movwf TMR0 movlw 0xA0 ; Разрешаем прерывания от TMR0, и прерывания глобально, сбрасываем флаги прерываний movwf INTCON _MainLoop bsf INTCON,T0IE ; Разрешаем прерывания от TMR0 bsf INTCON,GIE ; Разрешаем прерывания глобально ; Счетчик отключения катушки при простое двигателя incf CoilOffCnt_0,F btfsc STATUS,Z incf CoilOffCnt_1,F movf CoilOffCnt_1,W ; Проверяем счетчик и отключаем катушку xorlw COIL_OFF_VALUE btfss STATUS,Z goto $+.6 bcf INTCON,GIE ; Запрещаем прерывания bcf pCOIL ; Отключаем катушку (fix 1.51) bsf pCOIL_N bsf bCoilOff ; Выставляем флаг отключения катушки clrf SparkTime ; Сбрасываем значение момента искрообразования ; Проверяем кнопку дополнительной функции 1 movf PORTB,W xorwf Ports,W andlw FUNC1_MASK btfsc STATUS,Z clrf Func1Cnt ; Сбрасываем старший счетчик incf Func1Cnt,F btfss STATUS,Z ; Досчитаем до 0 goto $+.3 movlw FUNC1_MASK ; Инвертируем состояние флага xorwf Ports,F ; Проверяем кнопку дополнительной функции 2 movf PORTB,W xorwf Ports,W andlw FUNC2_MASK btfsc STATUS,Z clrf Func2Cnt ; Сбрасываем старший счетчик incf Func2Cnt,F btfss STATUS,Z ; Досчитаем до 0 goto $+.3 movlw FUNC2_MASK ; Инвертируем состояние флага xorwf Ports,F ; Проверяем кнопку выбора УОЗ 1 movf PORTB,W xorwf Ports,W andlw SELECT1_MASK btfsc STATUS,Z clrf Select1Cnt_1 ; Сбрасываем старший байт счетчика incf Select1Cnt_0,F btfsc STATUS,Z incf Select1Cnt_1,F btfss Select1Cnt_1,3 ; Досчитаем до 8 goto $+.3 movlw SELECT1_MASK ; Инвертируем состояние флага xorwf Ports,F ; Проверяем кнопку выбора УОЗ 2 movf PORTB,W xorwf Ports,W andlw SELECT2_MASK btfsc STATUS,Z clrf Select2Cnt_1 ; Сбрасываем старший байт счетчика incf Select2Cnt_0,F btfsc STATUS,Z incf Select2Cnt_1,F btfss Select2Cnt_1,3 ; Досчитаем до 8 goto $+.3 movlw SELECT2_MASK ; Инвертируем состояние флага xorwf Ports,F #ifdef FUNC1_ENGINE_STOP ; Функция отключения двигателя btfsc bFunc1_n ; Включена дополнительная функция goto $+.3 bsf bEngineStop ; Отключаем двигатель goto $+.2 bcf bEngineStop ; Включаем двигатель #endif #ifdef FUNC1_PROTECT ; Функция защиты btfsc bFunc1_n ; Включена дополнительная функция goto $+.11 movf LastSectorCnt,W ; Проверяем обороты вала, если LastSectorCnt > 0 btfsc STATUS,Z goto $+.8 sublw FUNC1_PROTECT_LIMIT ; При превышении предела оборотов btfss STATUS,C ; Результат положительный, С = 1 при W < FUNC1_PROTECT_LIMIT goto $+.5 clrwdt ; Мёртвый цикл, ничего не обслуживаем bcf INTCON,GIE ; Запрещаем прерывания bcf pLED_N ; Включаем светодиод goto $-.3 #endif #ifdef FUNC1_OVERRUN ; Функция ограничения оборотов btfsc bFunc1_n ; Включена дополнительная функция goto $+.9 movf LastSectorCnt,W ; Проверяем обороты вала, если LastSectorCnt > 0 btfsc STATUS,Z goto $+.7 sublw FUNC1_OVERRUN_LIMIT ; При превышении предела оборотов btfss STATUS,C ; Результат положительный, С = 1 при W < FUNC1_OVERRUN_LIMIT goto $+.3 bsf bOverrun1 ; Выставляем флаг превышения оборотов goto $+.2 bcf bOverrun1 ; Снимаем флаг превышения оборотов #endif #ifdef FUNC2_ENGINE_STOP ; Функция отключения двигателя btfsc bFunc2_n ; Включена дополнительная функция goto $+.3 bsf bEngineStop ; Отключаем двигатель goto $+.2 bcf bEngineStop ; Включаем двигатель #endif #ifdef FUNC2_PROTECT ; Функция защиты btfsc bFunc2_n ; Включена дополнительная функция goto $+.11 movf LastSectorCnt,W ; Проверяем обороты вала, если LastSectorCnt > 0 btfsc STATUS,Z goto $+.8 sublw FUNC2_PROTECT_LIMIT ; При превышении предела оборотов btfss STATUS,C ; Результат положительный, С = 1 при W < FUNC2_PROTECT_LIMIT goto $+.5 clrwdt ; Мёртвый цикл, ничего не обслуживаем bcf INTCON,GIE ; Запрещаем прерывания bcf pLED_N ; Включаем светодиод goto $-.3 #endif #ifdef FUNC2_OVERRUN ; Функция ограничения оборотов btfsc bFunc2_n ; Включена дополнительная функция goto $+.9 movf LastSectorCnt,W ; Проверяем обороты вала, если LastSectorCnt > 0 btfsc STATUS,Z goto $+.7 sublw FUNC2_OVERRUN_LIMIT ; При превышении предела оборотов btfss STATUS,C ; Результат положительный, С = 1 при W < FUNC2_OVERRUN_LIMIT goto $+.3 bsf bOverrun2 ; Выставляем флаг превышения оборотов goto $+.2 bcf bOverrun2 ; Снимаем флаг превышения оборотов #endif goto _MainLoop ; CalculateSparkTime ------------------------------------------------------------------------------ ; ; Описание: Вычисление момента искрообразования по таблице в соответствии с измеренным временем ; оборота распредвала. ; Входные параметры: SectorCnt - величина импульса от датчика Холла. ; Выходные параметры: W - момент зажигания от начала импульса в квантах времени. ;-------------------------------------------------------------------------------------------------- CalculateSparkTime; movf SectorCnt,W ; Проверяем счетчик на допустимые пределы (0 - 239) sublw .239 btfss STATUS,C retlw .0 ; Счетчик больше 239, поздним зажигание (0 - не проверяем зажигание) ; Теперь переходим к таблице с вычисляемым переходом btfsc bSelect1_n goto $+.8 movlw HIGH Table1 ; Выбрана характеристика 1 movwf PCLATH movf SectorCnt,W call Table1 nop clrf PCLATH return btfsc bSelect2_n goto $+.8 movlw HIGH Table2 ; Выбрана характеристика 2 movwf PCLATH movf SectorCnt,W call Table2 nop clrf PCLATH return movlw HIGH TableDefault ; Выбрана характеристика по умолчанию movwf PCLATH movf SectorCnt,W call TableDefault nop clrf PCLATH return |
![]() |
![]() |
#2 |
Banned
Регистрация: 27.02.2007
Адрес: Красноярск
Возраст: 50
Сообщений: 2,387
Вес репутации: 950/0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
В asm-файле ты можешь изменить всё, что хочешь. Убери из исходника всё лишнее, тогда кто-нибудь да и поможет, две трети приведенного тобой кода - на хрен не нужны.
Кодогенератор какой-то недоделаный. В начале файла пишет 16F84, а в коде : Код:
#ifdef PIC16F628 movlw 0x07 ; Отключаем компаратор (только PIC16F628) movwf CMCON #endif Последний раз редактировалось SSH; 25.12.2009 в 14:23. |
![]() |
![]() |
#3 |
Junior Member
Регистрация: 26.11.2009
Возраст: 43
Сообщений: 7
Вес репутации: 100/0 ![]() ![]() |
![]()
Программа создающая asm файл работает как с pic16f84a так и с pic 16f628,поэтому он и указан в программе.Хотелось бы только изменить параметры вывода, но сам я не силен (только начал учиться),как не пробовал не выходит,поэтому и обращаюсь за помощью к более опытным людям.
|
![]() |
![]() |
#4 |
Banned
Регистрация: 27.02.2007
Адрес: Красноярск
Возраст: 50
Сообщений: 2,387
Вес репутации: 950/0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Я понял, но раз эта программа начинает что-то генерить именно для PIC16F84, то почему-бы ей и не забыть про 628-й? Хреновая, видать, программа. Это первое. Второе. Если ты хочешь что-то в программе изменить осознанно, то ты должен хорошо представлять, что ты делаешь. Ты просишь, чтобы кто-то, просто нашел в программе место, которое тебя не устраивает и сделал так, как нужно тебе, причем за "спасибо". Здесь такие номера прокатывают нечасто и не из-за вредности форумчан, а исключительно из педагогических соображений. Начни разбираться в программе сам, хотя-бы изобрази попытки что-то сделать, тогда помогут однозначно. Или здесь есть ещё раздел "Работа для эмбеддера", там помогут точно.
|
![]() |
![]() |
#5 |
Junior Member
Регистрация: 26.11.2009
Возраст: 43
Сообщений: 7
Вес репутации: 100/0 ![]() ![]() |
![]()
Я не заставляю никого решать за меня мои проблемы,и я решил эту проблему на аппаратном уровне путем установки инвертора,теперь хотелось бы понять это на програмном уровне.Я не прошу готового текста программы,я прошу помощи у того кто хорошо понимает процесс,ведь все когдато с чего нибудь начинали.
|
![]() |
![]() |
#6 |
Banned
Регистрация: 27.02.2007
Адрес: Красноярск
Возраст: 50
Сообщений: 2,387
Вес репутации: 950/0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Да, начинали все, но все по-разному. Вот сам подумай, что тебе можно ответить на твой вопрос? Разобрать километр левого кода, чтобы найти место, где вместо bcf написать bsf, или наоборот? Хочется понять? Так думай! Пытайся понять. Спрашивай. На детальные вопросы, получишь конкретные ответы.
|
![]() |
![]() |
#7 |
Junior Member
Регистрация: 26.11.2009
Возраст: 43
Сообщений: 7
Вес репутации: 100/0 ![]() ![]() |
![]()
Спасибо ,разобрался.
|
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чем/как отлаживать код написаный на Си в WinAVR | Yokel | Микроконтроллеры других производителей | 49 | 30.09.2014 09:48 |
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча | dr_Sash | Источники питания и силовая электроника | 37 | 08.09.2012 18:50 |
подключение магнитолы | Sergey1 | Общетехнические вопросы | 10 | 27.12.2007 22:39 |
Вопрос по PIC контроллерам. | vlad_er | Продукция MICROCHIP | 12 | 18.05.2007 10:15 |