Поиск сообщества
Показаны результаты для тегов 'Ассемблер'.
Найдено: 12 результатов
-
Извечный вопрос не дает покоя. Кто и на чем все же предпочитает вести работу с контроллерами? Лично я как научился работать на С, так и не могу перейти на Assembler, да и не очень то хочется это делать. Какие все же преимущества и недостатки, окромя понятности и не очень понятности?
- 482 ответа
-
- AVR
- Язык программирования
- (и ещё 7 )
-
Писал недавно программу на ассемблере для ATMEGA128 и столкнулся с неприятной особенностью. Обычно для ATTINY2313 или ATMEGA8, для небольших программ при вызове подпрограмм, хватает команды RCALL, но у неё ограничение по дальности вызова подпрограмм, поэтому применил команду CALL. Хотел узнать, между этими двумя командами есть ли разница, кроме дальности вызова подпрограмм, и если нет разницы, зачем две команды, почему нельзя обходится одной командой CALL?
-
Всем здрасти! Пытаюсь подружить драйвер дисплея SSD1306 и ATMEGA328p с использованием i2c. По даташиту после каждого байта данных или команды, SSD1306 должен генерировать бит подтверждения, но после отправки первого же пакета с командой ни "Acknowledge" ни "Not Acknowledge" бита не получаю, симуляция будто зависает. Подскажите пожалуйста может я что не так сделал? Может проблема симуляции? Код .include "m328PBdef.inc" .def buff = r16 .def message = r17 .def iter = r18 .equ adressW = 0b01111000 .cseg .org 0x0000 jmp restart .org 0x001A jmp tim1_ovf_isr .org 0x0030 jmp twi_isr restart: ldi buff, high(RAMEND) out SPH, buff ldi buff, low(RAMEND) out SPL, buff ; twi init ldi buff, 0b1100 sts TWBR0, buff ldi buff, 0b0 sts TWSR0, buff ; timer\counter init ldi buff, 0b100 sts TCCR1B, buff ldi buff, 0b1 sts TIMSK1, buff ; global interrupt enable sei ; main routine main: jmp main ; timer 1 - 16bit overflow isr tim1_ovf_isr: ldi buff, 0b10100101 sts TWCR0, buff ldi buff, 0b0 sts TCCR1B, buff ldi buff, 0b0 sts TIMSK1, buff reti ; twi isr twi_isr: lds buff, TWSR0 andi buff, 0b11111000 cpi buff, 0x08 breq twi_start cpi buff, 0x18 breq twi_slaw_ack cpi buff, 0x28 breq twi_data_ack reti ; twi_start: ldi buff, adressW sts TWDR0, buff ldi buff, 0b10000101 sts TWCR0, buff reti ; ; twi_slaw_ack: ldi buff, 0b10000000 sts TWDR0, buff ldi buff, 0b10000101 sts TWCR0, buff reti ; ; twi_data_ack: ldi buff, 0xA5 sts TWDR0, buff ldi buff, 0b10000101 sts TWCR0, buff reti SSD1306-Revision 1.5.pdf
-
Управление сервоприводом SG90 с помощью Atmega16A на Ассемблере
Miwago опубликовал тема в Дайте схему!
Всем доброго дня! На данном сайте (http://smartep.ru/index.php?page=avr_asm_examples) нашел пример управления сервоприводом SG90 с помощью микроконтроллера Atmega16 на Ассемблере. С помощью программатора AVRasp, макетной платы и программы avrdude_prog-v.3.3 я прошил свой микроконтроллер Atmega16A. Все завершилось удачно. Я выставил в фьюзах 8Мгц частоты от внутреннего генератора, как указывал автор примера. Авто указывает - линия ШИМ сервопривода подключена к каналу А аппаратного ШИМ. Кнопки поворота подключены к линиям PD2 и PD3. Кнопка на линии PD2 увеличивает длительность импульса, кнопка на линии PD3 уменьшает длительность импульса. Схему подключения автор не дает. У меня собрать рабочую схему не получается. Может кто подскажет, как исходя из кода Ассемблера собрать схему? Полный код программы в прикрепленном файле "Пример". Моя предположительная схема и фрагмент кода на фото. Пример Пример -
Здравствуйте. Вопрос к гуру, на сколько будет меньше разрыв данных при посылке через SPI 16бит, если ожидание готовности написать на ассемблере? И сразу второй вопрос, как правильно её вставить? void sendWord(uint16_t data) { SPDR = data; while(!(SPSR & (1<<SPIF))); // это заменить на ассемблерную вставку //вот тут видно задержку SPDR = data>>8; while(!(SPSR & (1<<SPIF))); // и это заменить на ассемблерную вставку } Этот код не работает (ассемблерная вырезка из даташита). Я не соображаю... asm volatile( "Wait_Transmit: in r16, SPSR sbrs r16, SPIF rjmp Wait_Transmit ret" ); Пока писал сообщение, понял свой косяк, регистр r16 в строке выше у меня не соответствует data.Тогда еще вопрос, как полностью этот кусок "sendWord" написать на ассемблере? Заранее Спасибо!
-
Работаю в Mplab X 5.40, написал основной код программы для Pic16 на Си и есть небольшой код на ассемблере. Так вот, подскажите как правильно сделать переход на подпрограмму с Си на ассемблер и назад. Может на каком либо примере где-то есть. Заранее всем спасибо.
-
Доброго времени суток! Кто разбирается с Atmega128, ассемблером и кому не жалко времени, пожалуйста помогите. Как можно корректировать скорость падения маятника (он должен постеменно набирать скорость падения и плавно замедляться к верхней точке)... Какие данные нужно менять?! Спасибо! логин маятник 2.zip
- 5 ответов
-
- микроконтроллер
- Atmega
- (и ещё 7 )
-
Помогите сориентироваться с чего начать решение вопроса. Или возможно есть уже похожие написанные программы. Нужно для микроконтроллера семейства MCS-51 составить программу, которая выполняет логическую операцию "И" над числами 5416 и 8716. Указанные числа необходимо предварительно записать в регистр R6 и R7 нулевого банка регистров, а результат операции разместить в регистр R7 второго банка регистров. Составить двоичный и шестнадцатеричный код каждой команды.
- 41 ответ
-
- програмирование
- ассемблер
- (и ещё 2 )
-
Здарова, инженеры. Не подсобите студню с заданием? Задание, если кому интересно: Я подчитнул некоторую теорию, про индикацию, матричную клавиатуру и её опрос. Но вот возникли след. вопросы/трудности: 1. В случае использования только двух кнопок, целесообразно ли подключать кнопку непосредственно к выводу микроконтроллера? Насколько сильно это упростит решение задачи? 2. Можно ли где-то посмотреть пример реализации таких клавиатур именно на PIC18? (Уж очень у меня не хватает практики по программированию устройств, всегда на уровне любителя работал на крестах и ему подобных языках для решения мелких проблем и забав) 3. Можно ли где-то смоделировать моё творение, т.е. посмотреть работоспособность? (MPLAB, proteus, xlinx) 4. На чем в данном случае рациональнее "кодить" - язык ассемблера или сишка? Есть некоторый алгоритм для обработки дребезка контактов: https://pp.userapi.com/c840123/v840123038/23a0/IjXofwjEmuc.jpg Есть некоторая схемка, которую я в инете откопал: https://pp.userapi.com/c840123/v840123038/23a7/-rD4tgCfvLs.jpg Так же нашел небольшой код на просторах интернета (увы, он для AVR) : Благодарю за каждый пендель в нужном направлении, тема-то хорошая.
- 9 ответов
-
- pic18
- клавиатура
-
(и ещё 3 )
C тегом:
-
Такая задача, собрал схему с сайта в протеусе с микрокоонтроллером, там же на этом сайте есть программаа, но есть одно, надо написать алгоритм это программы(блок схему), аж на уровне регистров, а прога написана в этом алооритм билдере, мб кто-нибудь шарит и сможет мне помочь? или есть вариант перевести это в обычныый язык ассемблера??
-
Разработать модель в среде симуляции Proteus на базе микроконтроллера AtMega128 и написать программу на языке ассемблера для решения следующей задачи: 1. Изменяя положение ручки регулятора напряжения переменным резистором высвечивать на одном разряде трехразрядного семисегментного индикатора цифру от 0 до 9. 2. При нажатии кнопки 1 на клавиатуре выдавать звуковой сигнал с пьъезодинамика с частотой 1 кГц. При нажатии на кнопку 2 – с частотой 2 кГц, при нажатии на кнопку 3 – с частотой 3 кГц.
-
Доброго времени суток всем! Недавно возникла потребность передачи данных из микроконтроллера в ПК. Написал код на ассемблере, опираясь на Code_examples от TI, и то, что получилось, приведено ниже: #include "msp430F1232.h" RSEG CSTACK DS16 0 RSEG CODE ;--------------------------------------------------------------------- ; Установка тактирования от кварца ;--------------------------------------------------------------------- RESET mov #SFE(CSTACK),SP mov #WDTPW+WDTHOLD,&WDTCTL ;OSTANOVKA WDT BIC #OSCOFF, SR ; tAKTIROVANIE OT KVARCA BIS.B #XTS, BCSCTL1 L1 BIC.B #OFIFG, &IFG1 MOV #0FFh, R15 L2 DEC R15 JNZ L2 BIT.B #OFIFG, &IFG1 JNZ L1 BIS.B #SELM_3, &BCSCTL2 ;-------------------------------------------------------------------- ; Инициализация USART ;-------------------------------------------------------------------- mov.b #200,R7 bis.b #SWRST,&UCTL0; bis.b #030h,&P3SEL; P3.4,5 - USART bis.b #UTXE0+URXE0,&ME2; Включение передачи и приема bis.b #CHAR, &UCTL0; Формат данных 8-разрядный mov.b #SSEL0, &UTCTL0; UCLK=ACLK mov.b #0100b,&UBR00; 5MHz/19200 = 260.4 = 100000100b mov.b #0001b,&UBR10; mov.b #0000, &UMCTL0; Без модуляции bic.b #SWRST,&UCTL0; Сброс USART не включен bis.b #URXIE0+UTXIE0,&IE2 bis.b #UTXIFG0,&IFG2; Флаг гтовности к прерыванию Loop bis.w #LPM3+GIE,SR nop jmp Loop ;------------------------------------------------------------------- USART0TX_ISR; ;------------------------------------------------------------------- mov.b R7, &TXBUF0; reti ;-------------------------------------------------------------------- ; Векторы прерываний ;-------------------------------------------------------------------- COMMON INTVEC ORG RESET_VECTOR DW RESET ORG USART0TX_VECTOR DW USART0TX_ISR END. Из программы видно, что я просто хочу передать содержимое R7 в ПК. Трудность заключается в том, что это значение передается не всегда. Запускаю программу, которая считывает информацию с com порта (программа работает 100% правильно), она в тестовый файл записывает значение 200(правильное значение). В следующий раз, после перезапуска программы, в текстовый файл она записывает величину 14. Потом снова 200. И я не пойму, что с ней происходит! Кто знает, отзовитесь пожалуйста