Регистрация | Вход

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

Статус: Offline

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

Статус: Offline

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

Статус: Offline

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

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

Статус: Offline

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


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