Вставка asm в picbasicpro! - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вставка asm в picbasicpro!
Вставка asm в picbasicpro!
Broka Дата: Вс, 22.11.2009, 13:51  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 244
Репутация: 9   ±
Замечания:   ±
На сайте с 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, что то не получается
откомпилировать всё это в МикроСтудиоПлюс,подскажите в чём дело то? surprised
Пишет что ошибки синтаксиса


Наладчик КИП и А
ЯНДЕКС Дата: 22.11.2009
ivan_fd Дата: Вс, 22.11.2009, 16:43  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну так покажите код, что не компилируется, я имею ввиду весь код.

Меня все время преследуют умные мысли...но я быстрее!!!
Broka Дата: Вс, 22.11.2009, 18:02  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 244
Репутация: 9   ±
Замечания:   ±
На сайте с 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) cool


Наладчик КИП и А
Сообщение отредактировал Broka - Вс, 22.11.2009, 23:32
Dmitry Дата: Вс, 22.11.2009, 22:36  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

перед асмовскими команади пробелы есть? У меня как-то не компилировалось, когда команды с первой позиции в строе начинались.
Broka Дата: Вс, 22.11.2009, 23:45  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 244
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Да есть пробелы,по всякому уже пробовал,ни как неполучается!

Наладчик КИП и А
ADMIN Дата: Пн, 23.11.2009, 03:14  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 244
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Да,действительно так как подсказал Уважаемый ADMIN всё работает,значит что то с МикроКодеСтудио(хотя в описание есть примеры вставки на ASM). Спасибо большое!
Когда научусь программированию на PicBasicPro, обязательно отплачу хорошей идеей smile


Наладчик КИП и А
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вставка asm в picbasicpro!
Страница 1 из 11
Поиск: