Вставка asm в picbasicpro!
|
|
Broka |
Дата: Вс, 22.11.2009, 13:51 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
собрал устройство на 16F628A,надо было сделать попроще ШИМ,решил вставить готововый код на ассемблере, код вот такой: movlw d'14' movwf CCPR1L ;Установка периода 50% movlw b'00001111' movwf CCP1CON ;Включаем ШИМ bsf STATUS,RP0 ;Банк 1 movlw d'27' ;Частота ШИМ примерно 36КГЦ (для TSOP1736) movwf PR2 bcf STATUS,RP0 ;БАНК 0 clrf TMR2 movlw b'00000100' ;Включение модуля ШИМ movwf T2CON ;и таймера TMR2, чтобы ШИМ работало Я его взял с примеров ASM, ну и как описано применил в picbasicpro оператор ASM.....ENDASM, что то не получается откомпилировать всё это в МикроСтудиоПлюс,подскажите в чём дело то? Пишет что ошибки синтаксиса
Наладчик КИП и А
|
|
|
|
ivan_fd |
Дата: Вс, 22.11.2009, 16:43 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ну так покажите код, что не компилируется, я имею ввиду весь код.
|
|
|
|
Broka |
Дата: Вс, 22.11.2009, 18:02 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
;-------------------------------------------------------------------------- ;Основные установки конфигурации микроконтроллера 16F84A ;-------------------------------------------------------------------------- DEFINE _OSC4_ _BUTTON_PAUSE 20; Кварц 4 MHz ,Убрать дребезг контактов. OPTION_REG.7 = 0 ;Подтягивающие резисторы на Порт В OPTION_REG.6 = 1 ;Включение по переднему фронту сигнала Symbol INTE = INTCON.4 ; Бит разрешения прерывания по PORTB.0(INT) Symbol INTF = INTCON.1 ; Флаг внешнего прерывания по PORTB.0(INT) input PORTB.0 ; Вход прерывания ( Делаем нужные порты входами и выходами.) output PORTA.0; Выход output PORTA.1; Выход output PORTA.2; Выход output PORTA.3; Выход output PORTB.3; Выход KN VAR PORTB.0; Порт приёма инф-излучения. SV VAR PORTA.0; Выход на лампу LED VAR PORTA.1; Подсветка устройства SOU VAR PORTA.3;Пищаль ( Пьезик) J var byte ; j байтовая переменная INTE = 1;Разрешаем прерывание по порту RB.0(INT) PAUSE 50; Пауза 50ms ;---------------------------------------------------------------------------- ; Начало основной программы. ;---------------------------------------------------------------------------- main: enable;Разрешаем прерывание. on interrupt goto int1;Если прерывание произошло перейти на метку int1 low sv; Свет потушен high led;СВетодиод горит pause 50;Пауза 50ms goto main; Возврат в начало программы ;---------------------------------------------------------------------------- ; Метка прерывания от PORTB.0 ;---------------------------------------------------------------------------- DISABLE;Запрет прерываний int1:; Метка прерывания high sv;Свет горит low led; Светодиод потушен pause 40000:freqout sou,100,800;Пауза 40 сек,Генерируем на пьезик сигнал 800Hz. low sou; Низкий уровень на PORTA.3 if kn = 1 then int1:pause 2000:if kn = 0 then tsv;Это все условия работы. goto int1;Переход на метку int1 tsv:; Метка плавного уменьшения яркости света. for j = 255 to 0 step -2; Плавное уменьшение яркости лампы до = 0 pwm sv,j,64; Цикл программного ШИМ. if kn = 1 then int1 ; Условие KN1 ( Если на входе +,возращаемся на начало метки next j ; Цикл переменной J ;( int1) low sv ; Лампа потушена. INTF = 0 ; Сбросим Флаг внешнего прерывания по PORTB.0(INT) resume; Возврат на метку обработки прерывания. Этот код на ASMe вставляю в начале программы: main: enable;Разрешаем прерывание. on interrupt goto int1;Если прерывание произошло перейти на метку int1 asm movlw d'14' movwf CCPR1L ;Установка периода 50% movlw b'00001111' movwf CCP1CON ;Включаем ШИМ bsf STATUS,RP0 ;Банк 1 movlw d'27' ;Частота ШИМ примерно 36КГЦ (для TSOP1736) movwf PR2 bcf STATUS,RP0 ;БАНК 0 clrf TMR2 movlw b'00000100' ;Включение модуля ШИМ movwf T2CON ;и таймера TMR2, чтобы ШИМ работало endasm low sv; Свет потушен high led;СВетодиод горит pause 50;Пауза 50ms goto main; Возврат в начало программы Вы не смотрите что в начале написано для 16F84A, я пробовал 16А628А тоже работает(просто хотел избавиться от внешнего генератора на 36KHz,хотел чтобы частота шла именно от этого 16F628A)
Наладчик КИП и А
Сообщение отредактировал
Broka - Вс, 22.11.2009, 23:32
|
|
|
|
Dmitry |
Дата: Вс, 22.11.2009, 22:36 | Сообщение # 4 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
перед асмовскими команади пробелы есть? У меня как-то не компилировалось, когда команды с первой позиции в строе начинались.
|
|
|
|
Broka |
Дата: Вс, 22.11.2009, 23:45 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Да есть пробелы,по всякому уже пробовал,ни как неполучается!
Наладчик КИП и А
|
|
|
|
ADMIN |
Дата: Пн, 23.11.2009, 03:14 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Думаю, что это ошибка компилятора. Может отсутствует какой-то файл. Попробуйте так. Ничем не отличается Code DEFINE _OSC4_ _BUTTON_PAUSE 20; Кварц 4 MHz ,Убрать дребезг контактов. OPTION_REG.7 = 0 ;Подтягивающие резисторы на Порт В OPTION_REG.6 = 1 ;Включение по переднему фронту сигнала Symbol INTE = INTCON.4 ; Бит разрешения прерывания по PORTB.0(INT) Symbol INTF = INTCON.1 ; Флаг внешнего прерывания по PORTB.0(INT) KN VAR PORTB.0; Порт приёма инф-излучения. SV VAR PORTA.0; Выход на лампу LED VAR PORTA.1; Подсветка устройства SOU VAR PORTA.3;Пищаль ( Пьезик) J var byte ; j байтовая переменная INTE = 1;Разрешаем прерывание по порту RB.0(INT) input PORTB.0 ; Вход прерывания ( Делаем нужные порты входами и выходами.) output PORTA.0; Выход output PORTA.1; Выход output PORTA.2; Выход output PORTA.3; Выход output PORTB.3; Выход PAUSE 50; Пауза 50ms on interrupt goto int1;Если прерывание произошло перейти на метку int1 ;---------------------------------------------------------------------------- ; Начало основной программы. ;---------------------------------------------------------------------------- main: enable ;Разрешаем прерывание. CCPR1L = 14 ;Установка периода 50% CCP1CON = %00001111 ;Включаем ШИМ STATUS.5 = 1;Банк 1 PR2 = 27 ;Частота ШИМ примерно 36КГЦ (для TSOP1736) STATUS.5 = 0;БАНК 0 TMR2 = 0 ;Включение модуля ШИМ T2CON = %00000100;и таймера TMR2, чтобы ШИМ работало low sv; Свет потушен high led;СВетодиод горит pause 50;Пауза 50ms goto main; Возврат в начало программы ;---------------------------------------------------------------------------- ; Метка прерывания от PORTB.0 ;---------------------------------------------------------------------------- DISABLE;Запрет прерываний int1:; Метка прерывания high sv;Свет горит low led; Светодиод потушен pause 40000:freqout sou,100,800;Пауза 40 сек,Генерируем на пьезик сигнал 800Hz. low sou; Низкий уровень на PORTA.3 if kn = 1 then int1:pause 2000:if kn = 0 then tsv;Это все условия работы. goto int1;Переход на метку int1 tsv:; Метка плавного уменьшения яркости света. for j = 255 to 0 step -2; Плавное уменьшение яркости лампы до = 0 pwm sv,j,64; Цикл программного ШИМ. if kn = 1 then int1 ; Условие KN1 ( Если на входе +,возращаемся на начало метки next j ; Цикл переменной J ;( int1) low sv ; Лампа потушена. INTF = 0 ; Сбросим Флаг внешнего прерывания по PORTB.0(INT) resume; Возврат на метку обработки прерывания.
|
|
|
|
ivan_fd |
Дата: Пн, 23.11.2009, 11:10 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Если значения написать в шестнадцатиричном виде то все норма, что то компилятору не нравятся d'14' и т. д. С таким АСМОМ работает: Code asm movlw 0XE movwf CCPR1L movlw 0XF movwf CCP1CON bsf STATUS,RP0 movlw 0X1B movwf PR2 bcf STATUS,RP0 clrf TMR2 movlw 0X4 movwf T2CON endasm
Сообщение отредактировал
ivan_fd - Пн, 23.11.2009, 11:16
|
|
|
|
Broka |
Дата: Пн, 23.11.2009, 18:39 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Да,действительно так как подсказал Уважаемый ADMIN всё работает,значит что то с МикроКодеСтудио(хотя в описание есть примеры вставки на ASM). Спасибо большое! Когда научусь программированию на PicBasicPro, обязательно отплачу хорошей идеей
Наладчик КИП и А
|
|
|
|