Search the Community
Showing results for tags 'ассемблер'.
-
Извечный вопрос не дает покоя. Кто и на чем все же предпочитает вести работу с контроллерами? Лично я как научился работать на С, так и не могу перейти на Assembler, да и не очень то хочется это делать. Какие все же преимущества и недостатки, окромя понятности и не очень понятности?
- 482 replies
-
- AVR
- Язык программирования
-
(and 7 more)
Tagged with:
-
Писал недавно программу на ассемблере для 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
-
Всем доброго дня! На данном сайте (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 replies
-
- микроконтроллер
- Atmega
- (and 7 more)
-
Помогите сориентироваться с чего начать решение вопроса. Или возможно есть уже похожие написанные программы. Нужно для микроконтроллера семейства MCS-51 составить программу, которая выполняет логическую операцию "И" над числами 5416 и 8716. Указанные числа необходимо предварительно записать в регистр R6 и R7 нулевого банка регистров, а результат операции разместить в регистр R7 второго банка регистров. Составить двоичный и шестнадцатеричный код каждой команды.
- 41 replies
-
- програмирование
- ассемблер
-
(and 2 more)
Tagged with:
-
Здарова, инженеры. Не подсобите студню с заданием? Задание, если кому интересно: Я подчитнул некоторую теорию, про индикацию, матричную клавиатуру и её опрос. Но вот возникли след. вопросы/трудности: 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 replies
-
- pic18
- клавиатура
-
(and 3 more)
Tagged with:
-
Такая задача, собрал схему с сайта в протеусе с микрокоонтроллером, там же на этом сайте есть программаа, но есть одно, надо написать алгоритм это программы(блок схему), аж на уровне регистров, а прога написана в этом алооритм билдере, мб кто-нибудь шарит и сможет мне помочь? или есть вариант перевести это в обычныый язык ассемблера??
-
Разработать модель в среде симуляции 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. И я не пойму, что с ней происходит! Кто знает, отзовитесь пожалуйста
-
Столкнулся с тем что в интернете куча уроков по ассмеблеру, и везде мол главное практика, главное писать программы на ассемблере под винду. Так же куча информации по взлому и дизассемблированию программ на винде. используя дебагер и тд. Но нигде я не нашел информации по анализу для начинающих кода на ассемблере с микроконтроллеров. Даже просто хотя бы понимать что к чему и как начать и тд. К примеру скажу сразу что как я выяснил дизассемблером так сказать всех времен и народов является IDA Думаю данная инфа будет кому то интересна и полезна а кто то наткнется на эту запись с поисковиков. У меня есть вопросы. Вот я прогнал прошивку через IDA и если для виндовских приложений мы цепляемся за дебагер, запускаем так сказать программу пошагово и смотрим где что выполняется то тут так сделать не получиться и как я подозреваю тут надо работать руками на физическом уровне а именно прозванивать элементы и понимать что как вообще работает хотя бы примерно. И вот я так и сделал, я прозвонил память еепром до микроконтроллера. И узнал на какие ноги идет. Далее я посмотрел в даташите что это вообще за ноги: 1 нога еепром (CS) звониться на 40 ногу мозга PF10/CS0 2 нога eeпром (CLK) звониться на 226 ногу мозга (PL9/ SCK4/IRQ5) 3 нога еепром (DI) звониться на 157 ногу мозга PB10/TxD4/HTxD0/TO8G 4 нога еепром (DO) звониться на 158 ногу мозга PB11/RxD4/HRxD0/TO8H Далее я знаю что у меня микроконтроллер считывает информацию с еепром. А делать он это может как я понимаю только по ноге 158, так как она подрублена к DO (выход данных с еепром), тоесть 158 нога является входом данных. Тоесть микроконтроллер должен уметь считывать её состояние. А значит это операция чтения и в даташите ищем к порту B такой регистр, вот он: Port B Data Register (PBDR) Read/Write Operations. Далее смотрим маску. Обращение к конкретно этому порту PB11 возможно таким способом 0000 1000 0000 0000 (или в HEX это будет 800) Далее в IDA жмем search->immediate value... и вводим нашу маску 800 и просматриваем все что нашли, маска может применяться и для других регистров. В итоге я нашел что это маскаmov.w #h'800, применяется совместно с регистром #PBDR_W тоесть используется как раз порт PB11 а так же тут же в этой функции присутствует маска 400 рядом с регистром PFDR_W а это как раз PF10 который идет на CS еепромки. Вообщем опыта и знаний у меня маловато поэтому и прошу помощи. Однозначно понятно что это не значит что это функция чтения с еепром, но помогите пожалуйста разобраться по шагам что в этой функции твориться, я сам в комментариях тоже попробую. Ниже вырван кусок кода в котором найдены эти маски и регистры. ROM:0000E378 eeprom: ; CODE XREF: sub_1096A+13DC4p ;название eeprom задал я ROM:0000E378 ; sub_1096A+13E66p ... ROM:0000E378 ROM:0000E378 var_18 = -h'18 ; какая то переменная как я понимаю ROM:0000E378 ROM:0000E378 mov.l r14, @-r15 ROM:0000E37A mov.l r13, @-r15 ROM:0000E37C mov.l r12, @-r15 ROM:0000E37E mov.l r11, @-r15 ; какое то значение @-r15 помещается в r11, r12 и тд ROM:0000E380 sts.l pr, @-r15 ;sts это вроде как запись в какое то СОЗУ ROM:0000E382 add #-8, r15 ; складывается что то с r15 ROM:0000E384 mov.w #h'E0, r5 ; что то помещается в r5 ROM:0000E386 mov r15, r4 ; ROM:0000E388 mov.l #sub_2078, r3 ROM:0000E38A jsr @r3 ; sub_2078 ROM:0000E38C add #4, r4 ROM:0000E38E mov #1, r6 ROM:0000E390 mov.w #PFDR_W, r12 ; порт PF ROM:0000E392 mov.w #h'400, r13 ; маска , по идее PF10 должен быть который подрублен к CS еепромки ROM:0000E394 mov.l #sub_4AF4, r14 ROM:0000E396 mov r13, r5 ROM:0000E398 jsr @r14 ; sub_4AF4 ROM:0000E39A mov r12, r4 ROM:0000E39C mov.l #sub_2088, r3 ROM:0000E39E jsr @r3 ; sub_2088 ROM:0000E3A0 mov.l @(h'1C+var_18,r15), r4 ROM:0000E3A2 mov.l #sub_2400, r2 ROM:0000E3A4 jsr @r2 ; sub_2400 ROM:0000E3A6 mov #1, r4 ROM:0000E3A8 mov.w #PBDR_W, r2 ; порт PB ROM:0000E3AA mov.w @r2, r3 ROM:0000E3AC extu.w r3, r3 ROM:0000E3AE mov.w #h'800, r1 ; маска которая соответствует вроде как для PB11 который подрублен к DO еепромки ROM:0000E3B0 mov.w #h'E0, r5 ; 'р' ROM:0000E3B2 tst r1, r3 ROM:0000E3B4 mov.l #sub_2078, r2 ROM:0000E3B6 movt r11 ROM:0000E3B8 jsr @r2 ; sub_2078 ROM:0000E3BA mov r15, r4 ROM:0000E3BC mov #0, r6 ROM:0000E3BE mov r13, r5 ROM:0000E3C0 jsr @r14 ; sub_4AF4 ROM:0000E3C2 mov r12, r4 ROM:0000E3C4 mov.l #sub_2088, r3 ROM:0000E3C6 jsr @r3 ; sub_2088 ROM:0000E3C8 mov.l @r15, r4 ROM:0000E3CA mov r11, r0 ROM:0000E3CC add #8, r15 ROM:0000E3CE lds.l @r15+, pr ROM:0000E3D0 mov.l @r15+, r11 ROM:0000E3D2 mov.l @r15+, r12 ROM:0000E3D4 mov.l @r15+, r13 ROM:0000E3D6 rts ROM:0000E3D8 mov.l @r15+, r14 ROM:0000E3D8 ; End of function eeprom Дополните и поправьте пожалуйста, а то в знаниях дыра =)
- 14 replies
-
- дизассемблер
- ассемблер
-
(and 1 more)
Tagged with: