реклама на сайте
подробности

 
 
> Пишется лажа в память
Sholkin
сообщение Dec 16 2007, 14:45
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте .
Проблема вот какая . Написал давно несколько подпрограмм. Решил их вместе заставить работать как какое ни будь фукцианальное устройство. Проблема возникла в следующем.
Не записываются данные в память ($60 $61 $62 $63 $64 $65 ) в этих ячейках памяти должны быть цифры от1 до 9 в реале 00 15 00 0E 00 15 иногда что то другое. В блоке подпрограммы RESET я записываю туда единицы (сделал для того чтобы определить в каком блоке портак ) после команды RJAMP перехожу на вывод сигнала в порт у же в памяти портак (другие блоки отключал проверяю передачей по ком порту). В эмуляторе все считается и работает исправно в реале нет.
Есть вторая проблема когда к выводам 23 и 24 подвожу сигнал (для обработки ацп процессора ATmega 8) проц молчит сигнал вывода сигнала есть а по ком порту нет . Если 24 вывод посадить на землю то всё передача идёт. Код программы прилагаю .
На писан в мнемонике мне так понятнее писать и разбираться . Описал всё как мог что бы понятнее было . Если не понятно то по ходу обсуждения могу подробно описать и объяснить каждую подпрограмму .
Прикрепленные файлы
Прикрепленный файл  _____.txt ( 18.34 килобайт ) Кол-во скачиваний: 264
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Dec 26 2007, 19:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Давайте попробуем ещё раз. Придерживайтесь следующих советов.

1) Используйте для всего мнемонические имена.
а) Поименуйте регистры
б) Поименуйте ячейки памяти
в) Поименуйте порты ввода/вывода
2) Используйте коментарии везде где это возможно. ( не надо писать "сложить r14 и r15" это и так видно. Описывайте смысл того, что вы делаете)

приведу пример моего написания
В начале идёт подробное описание проекта с указанием версии и распиновки сигналов.
Код
;****************************************************************
;*                                                                *
;*            Приборный щиток для трактора "Беларусь".            *
;*                        Версия 1.16.                            *
;*                                                                *
;*             На шаговых двигателях. Шесть приборов.                *
;*              Без использования внешних регистров.                *
;*               Цифровая фильтрация входных данных.                *
;*                                                                *
;*                                                                *
;*    PC2    - ADC2    - Температура охладителя.                        *
;*      3    - ADC3    - Давление масла в двигателе.                    *
;*      4    - ADC4    - Давление воздуха в пневмосистеме.                *
;*      5    - ADC5    - Давление масла в КПП.                            *
;*      6    - ADC6    - Уровень топлива.                                *
;*      7    - ADC7    - Напряжение.                                    *
;*                                                                *
;*                                                                *
;*        Двигатель MS1.                                            *
;*    PB1    - Общий провод обмоток (-).                                *
;*    PB0    - Провод обмотоки 1 (1+).                                *
;*    PB2    - Провод обмотоки 2 (2+).                                *
......

Далее объявление имён портов и констант
Код
.equ    SCL        = pb5; Для I2C (Двигатель 5)
.equ    SDA        = pb4; Для I2C (Двигатель 5)


.equ    Fclk    = 8000; Частота микрокотроллера 8МГц
.equ    Tclk    = 125; Период микрокотроллера 125нс

Далее объявление регистров (обратите внимание на объявление регистра флагов r15 и рабочие регистры wl,wh. Рабочие регистры не имею специального предназначения и используются для промежуточного хранения. Я даю всегда такие наименования из проекта в проект. Поэтому в тексте сразу чётко вижу, что данный регистр - рабочий (work). Я его могу изменить во всём проекте изменив только одну строчку.
Код
.def    Faz0    = r8; Фаза в которой находится двигатель 0
.def    Faz1    = r9; Фаза в которой находится двигатель 1
....
.def    bitp    = r15;
.equ    bendc    = 0    ; Конец расчётам в прерывании
.equ    bwdr    = 1    ; Сброс от WatchDog-а
.equ    boff    = 2    ; Возврат по провалу питания
....
.def    wl        = r24
.def    wh        = r25

Объявление памяти
Код
    .dseg
Nint:        .byte    1    ; Счётчик прерываний
speed:        .byte    1    ; скорость движения стрелки
...

Далее у меня идут вектора, подпрограммы и прерывания.
ну например подпрограммы
Код
;========================================================================
;     Инициализация вторичных буферов произвольной длины.
;------------------------------------------------------------------------
; Входные  регистры: wl - номер буфера, Y - адрес буфера
; Выходные регистры: Y - адрес следующего буфера
; Портятся регистры: wh, wil, wih, Zl, Zh, Xl, Xh, r0, r1
; Занято стэка     : -


bufinit:
    ldi        Xh,0
    mov        Xl,wl        ; номер канала в Xl
    lsl        Xl            ; умножить на 512
    ldi        Zl,low(TabStrel*2); Загрузить адрес таблицы пересчёта
    ldi        Zh,high(TabStrel*2)
    add        Zh,Xl        ; найти начало таблицы данных

    lpm        wh,Z
    tst        wh
    breq    bufinit0
    ldi        wh,$ff        ; В начале обрыв !!!
....

Приведу пример инициализации примерно аналогичной вашей
Код
.if chip == 88
    .equ    kadcsra    = exp2(aden)+exp2(adsc)+exp2(adate)+exp2(adps1)+exp2(adps2)
.else
    .equ    kadcsra    = exp2(aden)+exp2(adsc)+exp2(adfr)+exp2(adps1)+exp2(adps2)
.endif
; Для внутреннего АЦП
;.equ    kadmux    = exp2(refs1)+exp2(refs0)+exp2(adlar)
; Для внешнего АЦП
.equ    kadmux    = exp2(adlar)

    ldi        chan,0
    ldi        wl,kadcsra+exp2(adif)
.if chip == 88
    sts        adcsra,wl; сбросить флаг завершения преобразования
.else
    out        adcsr,wl; сбросить флаг завершения преобразования
.endif
    mov        wl,chan
    subi    wl,-2    ; начать с канала 2
    ori        wl,kadmux
.if chip == 88
    sts        admux,wpl; включить новый канал
.else
    out        admux,wpl; включить новый канал
.endif


Вы выработаете свой стиль, но вы должны сразу видеть что именно происходит.
Как понятнее скажите? Или так
ldi r16,0b10000110 ;установка режима АЦП
out $06,r16
Или так, к примеру?
ldi wl, (ADEN<<1)+(ADPS1<<1)+(ADPS2<<1)
out ADCSR,wl


sbis $06,4
или
sbis ADCSR,ADIF


lds r16,$64
sts $74,r16

или так?

.equ lenbuf = $10
...
.dseg
InBuf: .byte lenbuf
OutBuf: .byte lenbuf
....
lds wl,InBuf
sts OutBuf,wl
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sholkin   Пишется лажа в память   Dec 16 2007, 14:45
- - =AVR=   Так писать нельзя, потому что так нельзя писать. С...   Dec 16 2007, 18:36
- - =GM=   Цитата(Sholkin @ Dec 16 2007, 14:45) Проб...   Dec 16 2007, 23:59
- - adc   Цитата(Sholkin @ Dec 16 2007, 17:45) како...   Dec 17 2007, 06:34
- - Sholkin   Здравствуйте. ADC вы не нашли где я записываю еди...   Dec 18 2007, 13:47
- - bodja74   Просто невероятное упорство автора темы или ... ...   Dec 18 2007, 16:58
|- - SasaVitebsk   Цитата(bodja74 @ Dec 18 2007, 20:58) Прос...   Dec 24 2007, 19:11
- - Sholkin   Здравствуйте. Не упорство. Конечно вы все здесь пр...   Dec 24 2007, 07:57
- - Sholkin   Здравствуйте. Александр моей целью не было каго то...   Dec 26 2007, 14:09
- - Sholkin   Здравствуйте. Первое большое спасибо за ответ . Ра...   Dec 29 2007, 08:24
- - Sholkin   Здравствуйте. Александр я и так почти везде испол...   Jan 6 2008, 15:08
|- - Qwertty   Цитата(Sholkin @ Jan 6 2008, 18:08) ldi w...   Jan 6 2008, 18:12
- - SasaVitebsk   Компилятор вам сообщает, что он не знает такого им...   Jan 6 2008, 16:15
|- - adc   Цитата(SasaVitebsk @ Jan 6 2008, 19:15) ....   Jan 9 2008, 06:06
|- - SasaVitebsk   Цитата(adc @ Jan 9 2008, 10:06) Поделитес...   Jan 9 2008, 11:09
- - Sholkin   Привет всем. Я не говорю что вы навязываете. Прост...   Jan 9 2008, 03:37
- - Sholkin   Здравствуйте. Переписал в такой вид ;описание пер...   Jan 10 2008, 07:50
- - SasaVitebsk   Вы немножко не поняли. Эти определения, которые...   Jan 10 2008, 12:01
- - Sholkin   Здравствуйте. Документация есть (на английском пра...   Jan 14 2008, 03:58
|- - adc   Цитата(Sholkin @ Jan 14 2008, 06:58) Про ...   Jan 14 2008, 05:07
|- - adc   Цитата(Sholkin @ Jan 14 2008, 06:58) Как ...   Jan 14 2008, 06:16
- - Sholkin   Пробовал так .equ constEEPROM = 0b00111111 Ошибку...   Jan 14 2008, 07:24
|- - adc   Цитата(Sholkin @ Jan 14 2008, 10:24) Проб...   Jan 14 2008, 08:05
- - Sholkin   Здравствуйте . Где эта строчка я нашёл (выше писал...   Jan 17 2008, 04:31
|- - adc   Цитата(Sholkin @ Jan 17 2008, 07:31) Сраз...   Jan 17 2008, 06:10
- - Sholkin   Здрасте. Что то не кто не ответил . Сейчас то у ме...   Jan 21 2008, 03:37
|- - defunct   2 SasaVitebsk, adc Неплохая попытка   Jan 21 2008, 13:54
|- - SasaVitebsk   Цитата(Sholkin @ Jan 21 2008, 07:37) Здра...   Jan 21 2008, 17:53
- - Sholkin   Александр спасибо за помощь . Всё , что вы сказали...   Jan 22 2008, 03:26
|- - adc   Ну что вы все фанатично записываете адреса регистр...   Jan 22 2008, 06:26
- - Sholkin   Здравствуйте. Исправил всё как вы мне подсказали. ...   Jan 29 2008, 03:48
- - SasaVitebsk   Прерывание - это уникальное средство. Его надо пон...   Jan 29 2008, 22:44
- - Sholkin   Спасибо за ответ. До вашего ответа я немного набра...   Feb 3 2008, 14:03
- - Sholkin   Здравствуйте. Переделал прерывание от таймера след...   Feb 12 2008, 04:08
- - Sholkin   Привет всем. Что то уже больше недели смотрю тема...   Feb 20 2008, 05:07
- - Sholkin   Ребята помогите пожалуйста ? Код программы есть . ...   Feb 26 2008, 05:16
- - vet   ну что тут советовать? загружайте программу в симу...   Feb 26 2008, 05:35
- - Sholkin   Да дело то в том , что в имуляторе работает , я б...   Feb 26 2008, 07:35
- - Sholkin   Здравствуйте. Во вторник с человеком поговорил . П...   Feb 28 2008, 06:35
- - vet   только то, что бросилось в глаза. не сохраняете р...   Feb 28 2008, 07:58
- - Sholkin   Частично заставил работать. Я вот только понять не...   Mar 3 2008, 10:10
|- - SasaVitebsk   Цитата(Sholkin @ Mar 3 2008, 14:10) Прост...   Mar 3 2008, 19:31
- - IgorKossak   На этом и закончим. Sholkin, у Вас будет возможнос...   Mar 3 2008, 20:10


Closed TopicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016