MoxyOK
|
|
1 | |
Проблемы с массивом в AVR на ASM18.10.2015, 21:17. Показов 3465. Ответов 4
Метки нет (Все метки)
Здравствуйте, прошу помощи так как не могу разобраться уже месяц с массивом на 8 меге.
Задаю массив из десяти 16-х чисел, которые являются кодами для 7-ми сегментного индикатора, получаю данные с часов реального времени, разбиваю маской эти данные и прибавляю к счетчику, хочу получить на выходе цифру с часов на индикаторе, но при прибавлении к счетчику правильно выдает только самое первое число, затем только 0xFF. НЕ могу разобраться. Привожу код в котором реализована только работа с массивом, отдельно от всей программы. .divice ATMiko8 .include "m8def.yms" .org 0x00 ldi r16, low (ramend) out spl, r16 ldi r16, high (ramend) out sph, r16 ldi ZL,LOW(2*sym_table);задаю массив ldi ZH,High(2*sym_table) ///////////////////////////////////////// ldi r16,5;задаю числа для прибавления к счетчику ldi r17,8;--||--||-- ldi r19,1;--||--||-- ldi r20,0;запрашиваю данные из массива add ZL,r16 adc ZH,r20 lpm ;правильные данные только здесь, затем только FF ldi r20,0 add ZL,r17 adc ZH,r20 lpm ldi r20,0 add ZL,r18 adc ZH,r20 lpm stop: rjmp stop sym_table: .db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x07,0x7f,0x6f,0xff Я так понял что счетчик, по какой-то причине не обнуляется после первой операции |
18.10.2015, 21:17 | |
Ответы с готовыми решениями:
4
ASM + AVR Studio Asm вставки в AVR GCC Табличный переход в AVR (ASM) TCP/HTTP + AVR .ASM |
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
18.10.2015, 21:49 | 2 |
Код
.divice ATMiko8 .include "m8def.yms" .org 0x00 ldi r16, low (ramend) out spl, r16 ldi r16, high (ramend) out sph, r16 ldi ZL,LOW(2*sym_table);задаю массив ldi ZH,High(2*sym_table) ///////////////////////////////////////// ldi r16,5;задаю числа для прибавления к счетчику ldi r17,8;--||--||-- ldi r19,1;--||--||-- ldi r20,0;запрашиваю данные из массива add ZL,r16 adc ZH,r20 lpm ;правильные данные только здесь, затем только FF ldi ZL,LOW(2*sym_table);задаю массив ldi ZH,High(2*sym_table) ldi r20,0 add ZL,r17 adc ZH,r20 lpm ldi ZL,LOW(2*sym_table);задаю массив ldi ZH,High(2*sym_table) ldi r20,0 add ZL,r18 adc ZH,r20 lpm stop: rjmp stop sym_table: .db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x07,0x7f,0x6f,0xff
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
|
18.10.2015, 23:26 | 3 |
Ну, как-то так...
Код
//======================================================================== .equ ANOD_ONE = 1<<5 .equ ANOD_TEN = 1<<4 .equ ANOD_HANDRED = 1<<3 .equ ANOD_THOUSAND = 1<<2 .equ A = 1<<6 .equ B = 1<<7 // A .equ C = 1<<3 // F B .equ D = 1<<2 // G .equ E = 1<<1 // E C .equ F = 1<<5 // D .equ G = 1<<4 .equ H = 1<<0 //------------------------------------------------------------------------ //------------------------------------------------------------------------ .equ ZERO = A+B+C+D+E+F .equ ONE = B+C .equ TWO = A+B+D+E+G .equ THREE = A+B+C+D+G .equ FOUR = B+C+F+G .equ FIVE = A+C+D+F+G .equ SIX = A+C+D+E+F+G .equ SEVEN = A+B+C .equ EIGHT = A+B+C+D+E+F+G .equ NINE = A+B+C+D+F+G //======================================================================== .dseg //======================================================================== DISPLAY_BUFFER: .equ DISPLAY_BUFFER_SIZE = 4 .byte DISPLAY_BUFFER_SIZE //======================================================================== .cseg //======================================================================== .macro Proc_7_Segm_Ind mov CNT, CNT_7_SEGM_IND clr ZH mov ZL, CNT lsl ZL subi ZL, LOW(-(Table_7_Segm_Ind*2)) sbci ZH, HIGH(-(Table_7_Segm_Ind*2)) lpm CNT_7_SEGM_IND, Z+ lpm ANODS, Z ldz DISPLAY_BUFFER addw Z, CNT, RCLR ld ZL, Z clr ZH subi ZL, LOW(-(Table_7_Segm_Char*2)) sbci ZH, HIGH(-(Table_7_Segm_Char*2)) lpm KATODS, Z .endmacro //------------------------------------------------------------------------ //------------------------------------------------------------------------ Table_7_Segm_Ind: .db 0x01, ANOD_THOUSAND .db 0x02, ANOD_HANDRED .db 0x03, ANOD_TEN .db 0x00, ANOD_ONE Table_7_Segm_Char: .db ZERO, ONE .db TWO, THREE .db FOUR, FIVE .db SIX, SEVEN .db EIGHT, NINE //========================================================================
0
|
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 49
|
|
19.10.2015, 17:05 | 4 |
ZL/ZH нужно загружать перед каждым lpm.
Ещё, команда "lpm" грузит данные в регистр R0, здесь можно использовать "lpm r16,z"
0
|
MoxyOK
|
|
19.10.2015, 17:27 | 5 |
Всем спасибо. Ни в каком из примеров которые находил, этого небыло
|
19.10.2015, 17:27 | |
19.10.2015, 17:27 | |
Помогаю со студенческими работами здесь
5
Интерполяция на asm для AVR Вопрос к пишущим на asm в AVR Studio 4-5-6 AVR (ASM). Одновременное нажатие кнопок C++/C#/ASM STM32/AVR разработчик. Ищу работу Инкрементация числа до переполнения на ASM в AVR Studio Управление светодиодами кнопками в ASM для AVR Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |