YS писал(а):
Я схожу с ума, или глючит реальность?
Скорее глюки компилятора.
Код: Выделить всё
PowerPlus:
ldi XL,low(time)
ldi XH,high(time)
cpi X , timemax
brge exit
ldi tmp,low(time + 1000)
ldi tmp1,high(time + 1000)
out TCNT1H,tmp1
out TCNT1L,tmp
или как в идеале нужно просто прибавить 1000 без заноса в TCNT1
ldi XL,low(time + 1000 )
ldi XH,high(time + 1000)
? X , 1000 ; каким оператором можно прибавить 1000 ???
exit:
ret
в EEPROM, согласно ДШ, 100000 циклов записи.
Код: Выделить всё
запись time в eeprom
ldi r16 ,0x10
out eear, r16
ldi r16 ,time
out eedr, r16
sbi eecr ,1
EW
sbic eecr ,1
rjmp EW
чтение time из eeprom
idi r16 , 0x10
out eear, r16
sbi eecr ,0
in r17 ,eedr
cpi r17 , timenach
далее необходимо сделать проверку
Код: Выделить всё
.equ powerstart =0x50 ; 3,8 мс
.equ powemax = 0xFA
.equ powermin = 0x60
.equ OutPort = PORTB
.equ OutCntr = DDRB
reset
ldi tmp,low(ramend) ;stack init SP=0xdf
out spl,tmp
sbi ACSR,ACD ;Analog comparator off
ser tmp
out OutCntr,tmp
clr tmp
out OutPort,tmp
ldi tmp,(1<<ISC01)|(0<<ISC00)
out MCUCR,tmp ;INT0
ldi tmp,(1<<INT0)
out GIMSK,tmp
; установки для Т1
ldi tmp,0b00000000
out TCCR1B,tmp
загрузка стартого значения
ldi r16,0xff
ldi r17, timestart
TCNT1H ,r16 ;255
TCNT1L , r17; 100
; установка разрешений прерываний от таймеров
clr tmp
ldi tmp,(1<<TOV1)
out TIMSK,tmp
clt ;
; разр прерывание
sei
основная программа
считываем из EEPROM текущий time
idi r16 , 0x10
out eear, r16
sbi eecr ,0
in r17 ,eedr
cpi r17 , timestart
brlo min
вот здесь встал в ступор ,??????
next:
вычисление , изменение мощности ,обработка кнопок и тд
rjmp next
Код: Выделить всё
reset:
sei
;основная программа
;запуск мотора при включении считываем из EEPROM ,тупой вопрос: с какой ячейки можно начинать??
idi r16 , 0x10 ;???
out eear, r16
sbi eecr ,0
in r17 ,eedr
как проверяется есть что в ячейки или нет???
;
cpi r17 , ; здесь надо проверить ,если пусто ничего не записано то power = timepower
преход exit
;
cpi r17 , powerstart
brlo min
MAX:
ldi r16 , r17
ma01:
inc r16
cpi r16 , power
brne ma01
ret
MIN:
ldi r16 , r17
m01:
dec r16
cpi r16 , power
brne m01
ret
exit:
ldi power, powerstart
next:
rjmp next
Код: Выделить всё
.include "tn2313def.inc"
.def tmp = r16
.def tmp1 = r17
.def power = r18
.equ powerstart =0x50 ; 3,8 мс
.equ powemax = 0xFA
.equ powermin = 0x60
.equ OutPort = PORTB
.equ OutCntr = DDRB
reset:
ldi tmp,0b00000000
out TCCR1B,tmp
ldi tmp,0xff
ldi tmp1, powerstart
TCNT1H ,tmp ;255
TCNT1L , tmp1 ; 100
sei
;основная программа
;запуск мотора при включении считываем из EEPROM ,тупой вопрос: с какой ячейки можно начинать??
idi tmp , 0x10 ;???
out eear, tmp
sbi eecr ,0
in power ,eedr
;как проверяется есть что в ячейки или нет???
; здесь надо проверить ,если пусто ничего не записано то выход
переход exit
;
cpi power , powerstart
brlo min
MAX:
ldi tmp , powerstart
ma01:
inc tmp
rjmp delay
cpi tmp , power
brne ma01
ret
MIN:
ldi tmp , powerstart
m01:
rjmp delay
dec tmp
cpi tmp , power
brne m01
ret
exit:
ldi power, powerstart
next:
rjmp next
delay:
clr tmp
m01:
dec tmp
brne m01
ret
exit :
ldi power, powerstart
Код: Выделить всё
delay:
subi tdl,1
sbci tdh,0
brcc delay