реклама на сайте
подробности

 
 
> Оптимизация программы - бортовой компьютер на PIC16F73
Hellka
сообщение Dec 21 2006, 13:37
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 2-10-06
Пользователь №: 20 895



делаю бортовой компьютер на пике
снимаю ацп значения с датчиков, соответственно в регистре adres остаются какие-то значения, мне нужно сопоставить эти значения с реальными показателями датчиков. делаю это следующим образом:
делаю АЦП преобразование, а дальше - сравнение:
Код
;***************************************************************************
;********************Вывод значений с датчиков******************************
;***************************************************************************
    
vivod_znachenii:
    
vivod_davlenie:

    movlw    .210                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .7
    movwf    dav_vivod

    movlw    .192                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .6
    movwf    dav_vivod

    movlw    .189                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .5
    movwf    dav_vivod

    movlw    .183                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .4
    movwf    dav_vivod

    movlw    .174                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .3
    movwf    dav_vivod

    movlw    .163                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .2
    movwf    dav_vivod

    movlw    .156                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .1
    movwf    dav_vivod

    movlw    .152                
    subwf    davl,0
    btfss    STATUS,0        
    movlw    .0
    movwf    dav_vivod



movf        dav_viviod,0
    movwf        data
    movlw        DATABLE
    movwf        rsselest
        call        lcd_write

датчиков у меня 4 и код оч громоздкий, каким образом можно оптимизировать код? препод что-то говорил про таблицу, а не пойму, пробовал с помощью PCL - не выходит
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xemul
сообщение Dec 25 2006, 14:25
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Hellka @ Dec 21 2006, 13:37) *
делаю бортовой компьютер на пике
снимаю ацп значения с датчиков, соответственно в регистре adres остаются какие-то значения, мне нужно сопоставить эти значения с реальными показателями датчиков. делаю это следующим образом:
делаю АЦП преобразование, а дальше - сравнение:
Код
skipped

датчиков у меня 4 и код оч громоздкий, каким образом можно оптимизировать код? препод что-то говорил про таблицу, а не пойму, пробовал с помощью PCL - не выходит

Смущает весьма нелинейная характеристика датчика давления:
0 - 152
1 - 156
2 - 163
3 - 174
4 - 183
5 - 189
6 - 192
7 - 210

Про вероятные неточности в алгоритме Вам уже сказали - по-видимому, предполагалось, что строки
Код
    movlw    .210
    subwf    davl, 0
    btfss    STATUS, 0
    movlw    .7
    movwf    dav_vivod
    ...

будут выглядеть примерно так:
Код
    movlw    .210
    subwf    davl, w
    movlw    .7
    btfsc    STATUS, 0
    goto     cmp_dav_done
    movlw    .192
    subwf    davl, w
    movlw    .6
    btfsc    STATUS, 0
    goto     cmp_dav_done
    ...
    movlw    .156
    subwf    davl, w
    movlw    .1
    btfss    STATUS, 0
    movlw    .0
cmp_dav_done:
    movwf    data
    ...

Указывать приемник "w" или "f" ей-ей нагляднее, чем "0" или "1".

Если же характеристика датчика все-таки достаточно линейна (т.е. с достаточной точностью может быть описана выражением "dav_vivod = a*davl + b"), то задача сведется к нахождению на листе бумаги коэффициентов a и b и реализации соответствующего алгоритма.
Хинт: в вычисления с плавающей запятой здесь впадАть не стОитsmile.gif.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 23:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.21588 секунд с 7
ELECTRONIX ©2004-2016