Получая данные от пользователя, сравните их с данными датчика, выключите / включите питание в соответствии с результатом сравнения - PullRequest
0 голосов
/ 03 июля 2018

Помощь!

Я новичок в сборке, использую atmelstudio7 и работаю на микроконтроллере atmega168A. объяснение того, что я хочу: я определил программу для получения минимальной температуры от пользователя. И сравните его с текущей температурой, если Мин. ниже выключите питание (РФ в коде).

Проблема:

Я не знаю, как вызвать текущую температуру, какую переменную я должен вызвать, чтобы получить номер текущей температуры.? что я должен позвонить, чтобы прочитать номер текущей темп. Код текущей температуры здесь:

show_temp:  call append_space ;add a space character
        ldi XH, 02
        clr xl
        rcall spit16_TC72  ;read temperature sensor, answer in temp2

cvt_temp:   mov zl, temp2  ;provide reading value in temp2
        sbrc temp2, 7
        rjmp neg_temp
tpout:      clr zh  
        rcall d3ascii       
        ret
neg_temp:   neg zl ;take 2's complement
        ldi temp2, '-'  ;show negative
        call append_char  ;zl not touched
        rjmp tpout

 vbrs_temp: ldi temp, msg_temp  ;===TEMPERATURE=======
        rcall send_msg_colon_sp  ;temp
        rcall show_temp   ;temperature
        ldi temp, msg_celsius
        jmp send_msg_cr_lf  ;temperature                           

теперь мой код для получения данных от пользователя:

  act101:      rcall query_check ;spit out auto response (if no parm given) 
                                                Tflag=0            
               brtc act1010rsp ;check T flag (if no parm given) Tflag=0
               sts TE_MINH, cmdhbyt
               sts TE_MINL, cmdlbyt

  act1010rsp: ldi yh, high (TE_MINH) 
              ldi yl, low (TE_MINH)

  spitatemp:    ld ZH, y+           
                ld ZL, y+                       
                call d3ascii
               call comp_MIN
               ret

(у меня тоже проблема с вызовом mintemp в первый раз, когда я набираю mintemp (чтобы набрать последний mintemp, набранный в терминале), вывод: mintemp Z35 ?? Откуда это взялось? Я хочу, чтобы последний введенный минимальный темп.

ОСНОВНАЯ ПРОБЛЕМА: сравнение и отключение питания, если пользовательский mintemp ниже

comp_MIN:   lds temp, spit16_TC72 ; current temperture.           
        lds temp2, act1010rsp ; user temperture     
        cp  temp2, temp
        brge putrfoff_
putrfoff_:  cbi PORTC, PC_PA_ONOFF
        ret  

Я не знаю, является ли spit16_TC72 правильным для вызова, чтобы прочитать текущую температуру или нет, и где пользователь ввел min temp? вызов act1010rsp является правильным? почему выключить (putrfoff_) не работает питание?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

ОСНОВНАЯ ПРОБЛЕМА: сравнение и отключение питания, если пользовательский mintemp ниже

Проблема в comp_MIN - это ветка. Либо, если оно взято, либо нет, инструкция 'vbi PORTC, PC_PA_ONOFF' выполняется (падение)

comp_MIN:   lds temp, spit16_TC72 ; current temperture.           
        lds temp2, act1010rsp ; user temperture     
        cp  temp2, temp
        brge putrfoff_
putrfoff_:  cbi PORTC, PC_PA_ONOFF
        ret  

вы можете это исправить, например как это:

comp_MIN:   lds temp, spit16_TC72 ; current temperture.           
        lds temp2, act1010rsp ; user temperture     
        cp  temp2, temp
        brlt no_change_
        cbi PORTC, PC_PA_ONOFF
 no_change_: ret  

Я не знаю, как вызвать текущую температуру, какую переменную я должен вызвать, чтобы получить номер текущей температуры.? что я должен позвонить, чтобы прочитать номер текущей температуры.

читая твой код, я бы сказал

rcall spit16_TC72  ;read temperature sensor, answer in temp2

но на этот вопрос наверняка может лучше ответить парень, с которого вы скопировали код, поскольку он, кажется, знает настройку и схему. мы можем только догадываться, что

...