| Вставка asm в picbasicpro! | 
|  | 
| 
 
 
 
 | Broka | Дата: Вс, 22.11.2009, 13:51  |                                                                                                                Сообщение # 1 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Помогаю всем
 
  
 Сообщений: 
 
 
 252
 
 
 Замечания: ± На сайте с 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 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 12.01.2009
 
 
 Статус: 
 Offline
 
 | Ну так покажите код, что не компилируется, я имею ввиду весь код. |  
 |  |  |  | 
| 
 
 
 
 | Broka | Дата: Вс, 22.11.2009, 18:02  |                                                                                                                Сообщение # 3 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Помогаю всем
 
  
 Сообщений: 
 
 
 252
 
 
 Замечания: ± На сайте с 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 |  
 | ![Dmitry]()  
 
 
 
 
  Группа:
  Пользователи
 
  Ранг: 
 
 Могу и подсказать
 
  
 Сообщений: 
 
 
 157
 
 
 Замечания: ± На сайте с 12.05.2009
 
 
 Статус: 
 Offline
 
 | перед асмовскими команади пробелы есть? У меня как-то не компилировалось, когда команды с первой позиции в строе начинались. |  
 |  |  |  | 
| 
 
 
 
 | Broka | Дата: Вс, 22.11.2009, 23:45  |                                                                                                                Сообщение # 5 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Помогаю всем
 
  
 Сообщений: 
 
 
 252
 
 
 Замечания: ± На сайте с 30.09.2009
 
 
 Статус: 
 Offline
 
 | Да есть пробелы,по всякому уже пробовал,ни как неполучается! 
 Наладчик КИП и А
 |  
 |  |  |  | 
| 
 
 
 
 | ADMIN | Дата: Пн, 23.11.2009, 03:14  |                                                                                                                Сообщение # 6 |  
 |   
 
 Администратор
 
 
  Группа:
  Администраторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 1082
 
 
 Замечания: ± На сайте с 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 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 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 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Помогаю всем
 
  
 Сообщений: 
 
 
 252
 
 
 Замечания: ± На сайте с 30.09.2009
 
 
 Статус: 
 Offline
 
 | Да,действительно так как подсказал Уважаемый ADMIN всё работает,значит что то с МикроКодеСтудио(хотя в описание есть примеры вставки на ASM). Спасибо большое! Когда научусь программированию на PicBasicPro, обязательно отплачу хорошей идеей
   
 Наладчик КИП и А
 |  
 |  |  |  |