Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

главный колбасист, ну вот я не верю что вы ученик 6 класса, когда информатику еще не читают. И что понятия цикл, подпрограмма, процедура/функция вам в школе не объясняли.
(Даже на микрокалькуляторах МК-61 были команды БП и ПП... Безусловный Переход и ПодПрограмма )
И мнемоники jmp (jump) и call в переводе с иноземного - прыжок и вызов - ни на что не намекают?
Учить ассемблер методом ненаучного тыка можно, но сложно. Гораздо проще прочитать какую то книжку, а их по асму АВРок вагон и тележка... Причем на русском языке...
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А есть еще и хитрые
ICALL
IJMP
Да условный возврат с подстановкой адреса через стек.
(у I8080 проще было - там набор команд возврата по флагам условий)
8)
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

Книжек целая коллекция уже,Белов,Мортон,Ревич,Шпак,и т.д. Че то в сон тянет,через минут двадцать,вот прям напасть какая то.Ничего не могу с собой сделать.С AVR-студией чуть веселее,там активного диалога требует,но тоже через пол часа начинаешь позевывать.
А вот скажите пожалуйста,где в сервоприводе XD-15-TN и им подобных,омрон,настройки коммуникации
по rs485 ? Понимаю что не в тему.Проблема у меня с прошлой осени.В англоязычном мануале 333стр. этот раздел почему то отсутствует. Специализированные форумы не помогли. пока.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

главный колбасист, вы во все темы на форуме будете пихать свой вопрос про XD-15-TN ?
В Котуинку написали, теперь тут....
Сделайте отдельную тему уже - если кто знает - в новой теме увидит быстрее...
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

Изображение

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4158630#p4158630"]Когда это малолетнее, отпихнув старшую, полезло в ее миску - старшая сделала просто. Лапой эту молодую мордой в миску - и держала. Хватило одного раза, что бы малая не лезла.[/uquote]
куда дели мою мадмуазель кики? :)
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

главный колбасист, И чито?
Примите это как маркетинговый ход и получите 16 ассемблерных мнемоник по цене 2 команд.
Не, ви таки конечно можете писать brbs/brbc, но таки вам потом тяжелее будет разобраться...

Мало того я вам открою страшную-престрашную тайну (которую из Мальчиша-Кибальчиша так и не смогли выбить Злые Буржуины)
Мнемоника установки битов в регистре SBR Rx, K и мнемоника логического ИЛИ регистра и константы ORI Rx, K - это одна и та же машинная команда!!!!!!

ORI Rx, K в машинном коде выглядит вот так: 0110 KKKK rrrr KKKK
например, для ORI R16, 0xA5 и для SBR R16, 0xA5 получается один и тот же код 0110 1010 0000 0101 = 0x6A05

То же относится и к мнемоникам сброса битов в регистре CBR Rx, K и логического И регистра и константы ANDI Rx, K.
Только компилятор в случае мнемоники CBR константу К запишет как 255-К (инверсия).
ANDI Rx, K - 0111 KKKK rrrr KKKK
для ANDI R16,0xA5 будет машинный код 0111 1010 0000 0101 = 0x7A05
а для CBR R16, 0xA5 - 0111 0101 0000 1010 = 0x750A.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
akl
Друг Кота
Сообщения: 4475
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[uquote="главный колбасист",url="/forum/viewtopic.php?p=4162579#p4162579"]...куда дели мою мадмуазель кики? :)[/uquote]Инициатором был я, пожаловавшись модератору на эту кики. Вы, на мой взгляд, переводите техраздел в мяу.

По вопросу. Есть команды условного перехода, анализирующие до 3-х флагов одновременно. И это хорошо.
СпойлерИзображение
Вложения
AVR_INSTR_SET.PNG
(93.16 КБ) 240 скачиваний
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Сообщение vit007 »

Подскажите про ШИМ... Его выполнение должно быть строго в пределах вектора прерывание или можно, "как-то" вынести за пределы вектора в основное тело программы. Я сделал измеритель тока мотора и мне надо его остановить при увеличении на него нагрузки... Но я еще присандалел ШИМ индикацию, и когда появляется индикация, я не могу остановить мотор, т.е. он остановится после выполнения ШИМ. Хотелось бы, что при выполнение ШИМ, я мог останавливать мотор... Пробовал запихнуть в основной цикл ШИМ... не работает индикация, а в таймере работает...
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Есть такое понятие как время реакции. Время реакции локально, пример, защита двигателя по току, время реакции системы в целом. Либо время реакции на кнопку скажем. Включить двигатель, выключить. Здесь мы оперируем в десятках мс.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18828
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

[uquote="vit007",url="/forum/viewtopic.php?p=4241681#p4241681"]Подскажите про ШИМ... Его выполнение должно быть строго в пределах вектора прерывание или можно, "как-то" вынести за пределы вектора в основное тело программы. Я сделал измеритель тока мотора и мне надо его остановить при увеличении на него нагрузки... Но я еще присандалел ШИМ индикацию, и когда появляется индикация, я не могу остановить мотор, т.е. он остановится после выполнения ШИМ. Хотелось бы, что при выполнение ШИМ, я мог останавливать мотор... Пробовал запихнуть в основной цикл ШИМ... не работает индикация, а в таймере работает...[/uquote]
у вас программный ШИМ, что ли? что такое "ШИМ-индикация" и как она связана с управлением мотором?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Сообщение vit007 »

Под ШИМ индикацией, я понимаю плавное мигание светодиода. А мотор посадил через токоизмеритель и пороговый уровень на отдельных микрухал, и в МК приходит 1 или 0 на PCINT. Так вот, когда "Плавное включение светодиода" работает, приходящая единица по PCINT, не срабатывает, пока не отработает вектор прерывания таймера... Вот думал разместить "Плавное включение светодиода" в основной цикл программы, чтоб его можно прервать вектором, но не работает. Отсюда вопрос, может ШИМ работать вне вектора прерывания...
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Двигатель важнее. Поэтому, сделай аппаратный ШИМ для светодиодов
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18828
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я не понимаю, как там у вас всё устроено...
ШИМ мотора аппаратный?
ШИМ светодиода аппаратный?
что за прерывания - по таймеру или от совпадения ШИМ?
если вы пишите на ассемблере, что мешает вам разрешить прерывания сразу при входе в обработчик "мешающего" прерывания?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Сообщение vit007 »

Примерный код, при котором шим в таймере и он работает, но когда нужно отработать остановку, то при работе индикации, ясное дело, мотор не остановится...
Спойлер.include "tn261Adef.inc"

.def Temp0=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25

.dseg

.cseg

.org 0

rjmp RESET ; Reset Handler
reti ;rjmp EXT_INT0 ; IRQ0 Handler
rjmp PCINT ; PCINT Handler
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
reti ;rjmp USI_START ; USI Start Handler
reti ;rjmp USI_OVF ; USI Overflow Handler
reti ;rjmp EE_RDY ; EEPROM Ready Handler
reti ;rjmp ANA_COMP ; Analog Comparator Handler
reti ;rjmp ADC_ISR ; ADC Conversion Handler
reti ;rjmp WDT ; WDT Interrupt Handler
reti ;rjmp EXT_INT1 ; IRQ1 Handler
reti ;rjmp TIM0_COMPA ; Timer0 CompareA Handler
reti ;rjmp TIM0_COMPB ; Timer0 CompareB Handler
reti ;rjmp TIM0_CAPT ; Timer0 Capture Event Handler
reti ;rjmp TIM1_COMPD ; Timer1 CompareD Handler
reti ;rjmp FAULT_PROTECTION ; Timer1 Fault Protection

RESET:
;(DDA7|DDA6|DDA5|DDA4|DDA3|DDA2|DDA1|DDA0)
ldi Temp0,0b00000000
out DDRA,Temp0

;(DDB7|DDB6|DDB5|DDB4|DDB3|DDB2|DDB1|DDB0)
ldi Temp0,0b00111110
out DDRB,Temp0

;(PORTA7|PORTA6|PORTA5|PORTA4|PORTA3|PORTA2|PORTA1|PORTA0)
ldi Temp0,0b11111111 ; подтяжка "1"
out PortA,Temp0

sbi PortB,7 ; подтяжка "1", для ресет
sbi PortB,6 ; подтяжка "1", для датчика вращения
sbi PortB,0 ; подтяжка "1", для токоизмерения

;ldi Temp0,high(RAMEND)
;out SPH,Temp0
ldi Temp0,low(RAMEND)
out SPL,Temp0

;(BODS|PUD|SE|SM1|SM0|BODSE|ISC01|ISC00)
ldi Temp0,0b00000000 ; PUD = 0, настройка портов в режим pull-up
out MCUCR,Temp0

;(-|-|-|-|PRTIM1|PRTIM0|PRUSI|PRADC)
ldi Temp0,0b00000011
out PRR,Temp0

;sbi ACSRA,ACD ; Отключение компоратора

;(ADEN|ADSC|ADATE|ADIF|ADIE|ADPS2|ADPS1|ADPS0)
;ldi Temp0,0b10001000
;out ADCSRA,Temp0

;(BIN|GSEL|-|REFS2|MUX5|ADTS2|ADTS1|ADTS0)
;ldi Temp0,0b00000100
;out ADCSRB,Temp0

;(REFS1|REFS0|ADLAR|MUX4|MUX3|MUX2|MUX1|MUX0)
;ldi Temp0,0b00100110 ; ADC6
;out ADMUX,Temp0

;(ADC6D|ADC5D|ADC4D|ADC3D|AREFD|ADC2D|ADC1D|ADC0D)
ldi Temp0,0b11111111
out DIDR0,Temp0

;(ADC10D|ADC9D|ADC8D|ADC7D|-|-|-|-)
ldi Temp0,0b11110000
out DIDR1,Temp0

;(OCIE1D|OCIE1A|OCIE1B|OCIE0A|OCIE0B|TOIE1|TOIE0|TICIE0)
ldi Temp0,0b00000010
out TIMSK,Temp0

;(TCW0|ICEN0|ICNC0|ICES0|ACIC0|-|-|CTC0)
ldi Temp0,0b10000000 ; 16bit
out TCCR0A,Temp0

;(-|-|-|TSM|PSR0|CS02|CS01|CS01)
ldi Temp0,0b00000100 ; CK/256
out TCCR0B,Temp0

;(COM1A1|COM1A0|COM1B1|COM1B0|FOC1A|FOC1B|PWM1A|PWM1B)
ldi Temp0,0b01010011 ; enables PWM OCR1A,OCR1B
out TCCR1A,Temp0

;(PWM1X|PSR1|DTPS11|DTPS10|CS13|CS12|CS11|CS10)
ldi Temp0,0b00000100 ; CK/8
out TCCR1B,Temp0

;(COM1A1S|COM1A0S|COM1B1S|COM1B0S|COM1D1|COM1D0|FOC1D|PWM1D)
;ldi Temp0,0b00000000
;out TCCR1C,Temp0

;(FPIE1|FPEN1|FPNC1|FPES1|FPAC1|FPF1|WGM11|WGM10)
ldi Temp0,0b00000000 ; Fast PWM
out TCCR1D,Temp0

;(INT1|INT0|PCIE1|PCIE0|-|-|-|-)
ldi Temp0,0b00110000
out GIMSK,Temp0

;(PCINT7|PCINT6|PCINT5|PCINT4|PCINT3|PCINT2|PCINT1|PCINT0)
ldi Temp0,0b01111111
out PCMSK0,Temp0

;(PCINT15|PCINT14|PCINT13|PCINT12|PCINT11|PCINT10|PCINT9|PCINT8)
ldi Temp0,0b01000001
out PCMSK1,Temp0

;Загрузка значений в память
;--------------------------

;Начальные условия работы
;--------------------------

ldi Temp0,100 ; яркость
out OCR1B,Temp0 ; красная индикация вкл.

sbi PortB,4 ; вкл. мотора
cbi PortB,5


sei

;Основное тело программы
;--------------------------
cycle:;бесконечный цикл
rjmp cycle

;Вектор прерывания PCINT
;--------------------------
PCINT:
rcall d_Delay ; задержка на дребезг кнопок

sbic PinB,0 ; датчик токоизмерения
sbis PinB,0

rjmp qwe
rjmp selector

qwe:
ldi Temp0,100
out OCR1B,Temp0 ; красная индикация вкл.

cbi PortB,4 ; выкл. мотора
cbi PortB,5

rjmp end0


selector:


end0:

clr Temp0 ; сброс таймера0
out TCNT0L,Temp0
out TCNT0H,Temp0

ldi Temp0,0b00000010 ; сброс прерывания таймера0
out TIFR,Temp0

ldi Temp0,0b00100000 ; обнуление лишнего прерывания
out GIFR,Temp0

reti

;Вектор прерывания TIM0
;--------------------------
TIM0_OVF:


green_led:;зеленая индикация
ldi Temp7,0

pwm_high0:
cpi Temp7,100 ; диапазон нарастания ШИМ
breq pwm_low0
inc Temp7
ldi Temp9,10 ; скорость ШИМ
rcall pwm_Delay

out OCR1A,Temp7 ; вывод ШИМ индикации

rjmp pwm_high0

pwm_low0:
cpi Temp7,0
breq pwm_end
dec Temp7
ldi Temp9,8 ; скорость ШИМ
rcall pwm_Delay

out OCR1A,Temp7 ; вывод ШИМ индикации

rjmp pwm_low0

red_led:;красная индикация
ldi Temp7,0

pwm_high1:
cpi Temp7,100 ; диапазон нарастания ШИМ
breq pwm_low1
inc Temp7
ldi Temp9,10 ; скорость ШИМ
rcall pwm_Delay

out OCR1B,Temp7 ; вывод ШИМ индикации

rjmp pwm_high1

pwm_low1:
cpi Temp7,0
breq pwm_end
dec Temp7
ldi Temp9,8 ; скорость ШИМ
rcall pwm_Delay

out OCR1B,Temp7 ; вывод ШИМ индикации

rjmp pwm_low1

pwm_end:
reti
Поэтому, я предположил запихнуть ШИМ в основной цикл
Спойлер.include "tn261Adef.inc"

.def Temp0=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25

.dseg

.cseg

.org 0

rjmp RESET ; Reset Handler
reti ;rjmp EXT_INT0 ; IRQ0 Handler
rjmp PCINT ; PCINT Handler
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
reti ;rjmp USI_START ; USI Start Handler
reti ;rjmp USI_OVF ; USI Overflow Handler
reti ;rjmp EE_RDY ; EEPROM Ready Handler
reti ;rjmp ANA_COMP ; Analog Comparator Handler
reti ;rjmp ADC_ISR ; ADC Conversion Handler
reti ;rjmp WDT ; WDT Interrupt Handler
reti ;rjmp EXT_INT1 ; IRQ1 Handler
reti ;rjmp TIM0_COMPA ; Timer0 CompareA Handler
reti ;rjmp TIM0_COMPB ; Timer0 CompareB Handler
reti ;rjmp TIM0_CAPT ; Timer0 Capture Event Handler
reti ;rjmp TIM1_COMPD ; Timer1 CompareD Handler
reti ;rjmp FAULT_PROTECTION ; Timer1 Fault Protection

RESET:
;(DDA7|DDA6|DDA5|DDA4|DDA3|DDA2|DDA1|DDA0)
ldi Temp0,0b00000000
out DDRA,Temp0

;(DDB7|DDB6|DDB5|DDB4|DDB3|DDB2|DDB1|DDB0)
ldi Temp0,0b00111110
out DDRB,Temp0

;(PORTA7|PORTA6|PORTA5|PORTA4|PORTA3|PORTA2|PORTA1|PORTA0)
ldi Temp0,0b11111111 ; подтяжка "1"
out PortA,Temp0

sbi PortB,7 ; подтяжка "1", для ресет
sbi PortB,6 ; подтяжка "1", для датчика вращения
sbi PortB,0 ; подтяжка "1", для токоизмерения

;ldi Temp0,high(RAMEND)
;out SPH,Temp0
ldi Temp0,low(RAMEND)
out SPL,Temp0

;(BODS|PUD|SE|SM1|SM0|BODSE|ISC01|ISC00)
ldi Temp0,0b00000000 ; PUD = 0, настройка портов в режим pull-up
out MCUCR,Temp0

;(-|-|-|-|PRTIM1|PRTIM0|PRUSI|PRADC)
ldi Temp0,0b00000011
out PRR,Temp0

;sbi ACSRA,ACD ; Отключение компоратора

;(ADEN|ADSC|ADATE|ADIF|ADIE|ADPS2|ADPS1|ADPS0)
;ldi Temp0,0b10001000
;out ADCSRA,Temp0

;(BIN|GSEL|-|REFS2|MUX5|ADTS2|ADTS1|ADTS0)
;ldi Temp0,0b00000100
;out ADCSRB,Temp0

;(REFS1|REFS0|ADLAR|MUX4|MUX3|MUX2|MUX1|MUX0)
;ldi Temp0,0b00100110 ; ADC6
;out ADMUX,Temp0

;(ADC6D|ADC5D|ADC4D|ADC3D|AREFD|ADC2D|ADC1D|ADC0D)
ldi Temp0,0b11111111
out DIDR0,Temp0

;(ADC10D|ADC9D|ADC8D|ADC7D|-|-|-|-)
ldi Temp0,0b11110000
out DIDR1,Temp0

;(OCIE1D|OCIE1A|OCIE1B|OCIE0A|OCIE0B|TOIE1|TOIE0|TICIE0)
ldi Temp0,0b00000010
out TIMSK,Temp0

;(TCW0|ICEN0|ICNC0|ICES0|ACIC0|-|-|CTC0)
ldi Temp0,0b10000000 ; 16bit
out TCCR0A,Temp0

;(-|-|-|TSM|PSR0|CS02|CS01|CS01)
ldi Temp0,0b00000100 ; CK/256
out TCCR0B,Temp0

;(COM1A1|COM1A0|COM1B1|COM1B0|FOC1A|FOC1B|PWM1A|PWM1B)
ldi Temp0,0b01010011 ; enables PWM OCR1A,OCR1B
out TCCR1A,Temp0

;(PWM1X|PSR1|DTPS11|DTPS10|CS13|CS12|CS11|CS10)
ldi Temp0,0b00000100 ; CK/8
out TCCR1B,Temp0

;(COM1A1S|COM1A0S|COM1B1S|COM1B0S|COM1D1|COM1D0|FOC1D|PWM1D)
;ldi Temp0,0b00000000
;out TCCR1C,Temp0

;(FPIE1|FPEN1|FPNC1|FPES1|FPAC1|FPF1|WGM11|WGM10)
ldi Temp0,0b00000000 ; Fast PWM
out TCCR1D,Temp0

;(INT1|INT0|PCIE1|PCIE0|-|-|-|-)
ldi Temp0,0b00110000
out GIMSK,Temp0

;(PCINT7|PCINT6|PCINT5|PCINT4|PCINT3|PCINT2|PCINT1|PCINT0)
ldi Temp0,0b01111111
out PCMSK0,Temp0

;(PCINT15|PCINT14|PCINT13|PCINT12|PCINT11|PCINT10|PCINT9|PCINT8)
ldi Temp0,0b01000001
out PCMSK1,Temp0

;Загрузка значений в память
;--------------------------

;Начальные условия работы
;--------------------------

ldi Temp0,100 ; яркость
out OCR1B,Temp0 ; красная индикация вкл.

sbi PortB,4 ; вкл. мотора
cbi PortB,5


sei

;Основное тело программы
;--------------------------
cycle:;бесконечный цикл
;rjmp cycle

green_led:;зеленая индикация
ldi Temp7,0

pwm_high0:
cpi Temp7,100 ; диапазон нарастания ШИМ
breq pwm_low0
inc Temp7
ldi Temp9,10 ; скорость ШИМ
rcall pwm_Delay

out OCR1A,Temp7 ; вывод ШИМ индикации

rjmp pwm_high0

pwm_low0:
cpi Temp7,0
breq pwm_end
dec Temp7
ldi Temp9,8 ; скорость ШИМ
rcall pwm_Delay

out OCR1A,Temp7 ; вывод ШИМ индикации

rjmp pwm_low0

red_led:;красная индикация
ldi Temp7,0

pwm_high1:
cpi Temp7,100 ; диапазон нарастания ШИМ
breq pwm_low1
inc Temp7
ldi Temp9,10 ; скорость ШИМ
rcall pwm_Delay

out OCR1B,Temp7 ; вывод ШИМ индикации

rjmp pwm_high1

pwm_low1:
cpi Temp7,0
breq pwm_end
dec Temp7
ldi Temp9,8 ; скорость ШИМ
rcall pwm_Delay

out OCR1B,Temp7 ; вывод ШИМ индикации

rjmp pwm_low1

pwm_end:
rjmp cycle

;Вектор прерывания PCINT
;--------------------------
PCINT:
rcall d_Delay ; задержка на дребезг кнопок

sbic PinB,0 ; датчик токоизмерения
sbis PinB,0

rjmp qwe
rjmp selector

qwe:
ldi Temp0,100
out OCR1B,Temp0 ; красная индикация вкл.

cbi PortB,4 ; выкл. мотора
cbi PortB,5

rjmp end0


selector:


end0:

clr Temp0 ; сброс таймера0
out TCNT0L,Temp0
out TCNT0H,Temp0

ldi Temp0,0b00000010 ; сброс прерывания таймера0
out TIFR,Temp0

ldi Temp0,0b00100000 ; обнуление лишнего прерывания
out GIFR,Temp0

reti

;Вектор прерывания TIM0
;--------------------------
TIM0_OVF:
reti
И так индикация не работает. Вот это хотелось узнать... почему...
Встал на лапы
Сообщения: 124
Зарегистрирован: Пн мар 22, 2010 18:07:52

Сообщение vit007 »

Странно, сейчас добавил... и заработало... Единственное что потом добавил это

cli
out OCR1A,Temp7
sei
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 340
Зарегистрирован: Чт июн 23, 2011 07:55:51

Сообщение korsaj »

Задержка в прерывании - это как матерится в дамском обществе.

Добавлено after 1 minute 38 seconds:
Код написан жутко.
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Зависит от задачи. А данном случае три такта. Но и чем. Код. Ну да.
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 276
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

Здравствуйте. Возник вопрос, как в AVR ассемблере посчитать длину строки, размещенной в памяти программ директивой DB.
Например, в 8051 для этого достаточно отнять от адреса метки после строки, адрес метки самой строки. Сделано по-людски, один адрес - один байт.
Но в AVR, одному адресу зачем-то соответствует два байта, и я не очень понимаю, как оно там размещается, и как это считать
Друг Кота
Аватара пользователя
Сообщения: 6349
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Ну так и считать
отнять от адреса метки после строки, адрес метки самой строки.
, только умножить на 2. в чём проблема?
Изображение
Вымогатель припоя
Аватара пользователя
Сообщения: 555
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

Jack_A, а если строка с нечетным количеством символов? И добита нулем в конце до четного ?
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Ответить

Вернуться в «AVR»