Перейти к содержанию

Помогите Перевести Программу С Си На Асемблер


serega-15-04

Рекомендуемые сообщения

если это возможно перепишите пожалуйста эту программу на языке асемблера

программа сделана под ATMEGA48

Мы используем три NiCad аккумулятора для питания микроконтроллера. Напряжение питания, при полностью заряженных аккумуляторах, составит 4.2 В. Нам необходимо включить светодиод, подключенный к порту PB0, если напряжение будет ниже 3.2 В.

Листинг

#include avrio.h  #include avrinterrupt.h 
// Global variables 
float vcc;//variable to hold the value of Vcc 
void setup_adc(void) 
{
ADMUX = 0xE; //Set the Band Gap voltage as the ADC input
ADCSRA = (1ADEN)|(1ADATE)|(1ADIE)|(1ADSC)|5; 
}
ISR(ADC_vect) //ADC End of Conversion interrupt 
{
unsigned char adc_data;
adc_data = ADC>>2; //read 8 bit value 
vcc = 1.1 * 255 / adc_data;
}
// *********************************************************** 
// Main program 
// *********************************************************** 
int main(void) 
{
DDRB = DDRB | (1PB0); //set PB0 as output (for the LED). 
sei(); //Activate interrupts setup_adc(); 
//setup the ADC  
while(1) 
    {
    // Infinite loop
    if (vcc < 3.2) 
       {
       PORTB |= (1PB0); 
       }
    else
       {
       PORTB &= ~(1PB0); 
       }
    }
}

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Нам необходимо включить светодиод, подключенный к порту PB0, если напряжение будет ниже 3.2 В.
Ну и зачем тут МК нужен ? Одного компаратора за глаза и за уши....
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Нам необходимо включить светодиод, подключенный к порту PB0, если напряжение будет ниже 3.2 В.
Ну и зачем тут МК нужен ? Одного компаратора за глаза и за уши....

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

Изменено пользователем serega-15-04
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Всеравно компаратор нужен. Проблема в том что встроенный ИОН не будет работать при таком напряжении питания, а значит использовать АЦП для этих целей врядли получится. Лучше всего использовать супервизор питания на нужное напряжение, его логический выход может послужить источником внешнего прерывания. Или, если не найдешь супервизор - использовать старый добрый стабилитрон TL431 по сути являющийся 3-х выводным компаратором на 2.5В(как переделать его под 3.2В надеюсь не нужно объяснять?).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

...перепишите пожалуйста эту программу на языке асемблера ...

После компиляции проекта переходите в отладчик и открываете окошко "ассемблерный код". Копируете код и вставляете в новый файл.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

...перепишите пожалуйста эту программу на языке асемблера ...

После компиляции проекта переходите в отладчик и открываете окошко "ассемблерный код". Копируете код и вставляете в новый файл.

а не подскажете для полного дурака...а с помощью какой программы эти действия проводить??

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

А где а ARVStudio окошко "ассемблерный код"? Я нашел только файл [.\default\%name%.lss] но там не чистый ассемблер, с ним кучка отладочного или еще какого мусора.

Проблема в том что встроенный ИОН не будет работать при таком напряжении питания
Точно? Я на ATtiny13 ИОН 1,1В) делал следилку за напряжением на аккумуляторе от телефона (3,7 В номинальное). В ATmega48 тоже есть опорное 1,1В

Посмотрел приведенный код - ужас! Кто ж напряжение переводит в таких схемах в вольты, та еще float'ом?! Ничего не инициализированно.

Переписал на ассемблере. Возможны незначительные ошибки.

.include "m48def.inc"

rjmp RESET
reti;	INTO 
reti;	INT1 
reti;	PCINT0 
reti;	PCINT1 
reti;	PCINT2 
reti;	WDT 
reti;	TIMER2 СОМРА 
reti;	TIMER2 СОМРВ 
reti;	TIMER2 0VF 
reti;	TIMER1CAPT 
reti;	TIMER1 СОМРА 
reti;	TIMER1 СОМРВ 
reti;	TIMER10VF 
reti;	TIMER0 СОМРА 
reti;	TIMER0 СОМРВ 
reti;	TIMER0OVF 
reti;	SPI, STC 
reti;	USART, RXC 
reti;	USART, UDRE 
reti;	USART, TXC 
rjmp ADC_END 
reti;	EE_RDY 
reti;	ANA_COMP 
reti;	TWI 
reti;	SPM_RDY 

.def temp=r16
.def ADC_RES=r17

.equ R_KOEFF=?			;коэффициент резистивного делителя
.equ U_MIN=256*3.2*R_KOEFF/1.1

ADC_END:
in ADC_RES,ADCH
reti

RESET:
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp

ldi temp,0b11100000	;встроенный ИОН 1,1В; выравнивание влево; ADC0
out ADMUX,temp
ldi temp,0b11101000
out ADCSRA,temp
sbi DDRB,0		;init PB0
cbi DDRC,0		;ADC0=PC0 - input
cbi PORTC,0
CYCLE:
cpi ADC_RES,U_MIN
	brlo ADC_LOW
cbi PORTB,0
rjmp CYCLE
ADC_LOW:
sbi PORTB,0
rjmp CYCLE

Изменено пользователем COKPOWEHEU

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Ну ежели ИОН на 1.1В, то может и заработает, хотя надо сверится с документацией при каком напряжении можно пользоваться встроенным ИОН, и при каком напряжении работает модуль АЦП это довольно индивидуально для каждого контроллера.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...