Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.11.2008, 14:00  
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 17
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию глюк динамической индикации

проблемам на индикаторах высвечивает до 64 потом индикация повисает до начала нового цикла и все повторряется прога простая но
где то какой то глюк немогу разобратся

//программа вывода на динамическую индекацию значение 0-9999
#include‹mega8535.h›
#include‹delay.h›

unsigned int iv = 0;
// int r;

void init (void){
#asm ("cli") //запретить глобальные прерывания
DDRA=0xff;
DDRC=0xff;
//DDRB=0xff;
//TCCR0 = 0b00000010; //предделитель тактовой частоты CK/8 нулевого таймера
//TIMSK = 0b00000001; //разрешить прерывание по переполнению нулевого таймера
//OCR0 = 0xE6; //230 тактов с предделителем /8
//TCNT0=0;
#asm("sei") //разрешить глобальные прерывания
// #asm("wdr") //обнуление сторожевого счетчика
}


//подпрограмма динамической индикации
//диапазон 9999
//внимание результат должен быть помещен разряды r30 ст, r31 мл
//разряды r8 r10 зарезервированы под индикацию
char fbinL; // ;двоичное значение,младший байт
char fbinH; // ;старший байт
char tBCD0; //двоично-десятичное
char tBCD1; //два байта
//int tBCD21= 0x77;
char Cntind;
// 0 1 2 3 4 5 6 7 8 9
char TableInd[] = { 0x3F , 0x06 , 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x7, 0x7F, 0x6F }; //массив индикации

void IntToBcd(unsigned int iv) { //двоичное в двоично десятичное

#asm
;************************************************* ******************
;1. Текст программы "bin16BCD5"- преобразование 16-битного двоичного
;значения в упакованный BCD формат
;************************************************* ******************
;* Количество слов кода :25 + возврат
;* Количество циклов :25/176 (Мин/Макс) + возврат
;* Использованные младшие регистры :нет
;* Использованные старшие регистры :4(fbinL,fbinH/tBCD0,tBCD1,tBCD2)
;* Использованные указатели :нет
;************************************************* ******************
;***** Регистровые переменные подпрограммы
.def fbinL =r16 ;двоичное значение, младший байт
.def fbinH =r17 ;двоичное значение, старший байт
.def tBCD0 =r17 ;BCD значение, цифры 1 и 0
.def tBCD1 =r18 ;BCD значение, цифры 3 и 2
;.def tBCD2 =r19 ;BCD значение, цифра 4
;Примечание: Переменные fbinH и tBCD0 должны размещаться в одном
;регистре.
;***** Код
bin16BCD5:
; ldi tBCD2, -1
mov r16,r9 ;обробатываемое значение копируем значения в
mov r17,r10 ;начальные регистры
bin16BCD5_loop_1:
; inc tBCD2
subi fbinL, low(10000)
sbci fbinH, high(10000)
brsh bin16BCD5_loop_1
subi fbinL, low(-10000)
sbci fbinH, high(-10000)
ldi tBCD1, -0x11
bin16BCD5_loop_2:
subi tBCD1, -0x10
subi fbinL, low(1000)
sbci fbinH, high(1000)
brsh bin16BCD5_loop_2
subi fbinL, low(-1000)
sbci fbinH, high(-1000)
bin16BCD5_loop_3:
inc tBCD1
subi fbinL, low(100)
sbci fbinH, high(100)
brsh bin16BCD5_loop_3
subi fbinL, -100
ldi tBCD0, -0x10
bin16BCD5_loop_4:
subi tBCD0, -0x10
subi fbinL, 10
brsh bin16BCD5_loop_4
subi fbinL, -10
add tBCD0, fbinL
mov r6,r17
mov r7,r18
ret
#endasm
return ;
}

void IndOut( unsigned int iv) {
char i; //8 битное
//#asm ("cli") //запретить прерывания при работе таймера
IntToBcd( iv ); //перевод числа в двоично десятичную форму
for(i=0; i!=10 ;i++) { //цикл индикации
switch( Cntind ) {
case 0: // индикация едениц
PORTC = TableInd[ tBCD0 & 0x0F ]; // значение в порт
PORTA = 0xfe; //выбор индикатора
delay_ms(2);
++Cntind;
break;
case 1: // индикация десяток
PORTC = TableInd[ ( tBCD0 ›› 4 ) & 0x0F ]; //сдвиг и побитная И
PORTA = 0xfd;
delay_ms(2);
++Cntind;
break;
case 2: // индикация сотен
PORTC = TableInd[ tBCD1 & 0x0F ];
PORTA = 0xfb;
delay_ms(2);
++Cntind;
break;
case 3: // индикация тысяч
PORTC = TableInd[ ( tBCD1 ›› 4 ) & 0x0F ];
PORTA = 0xf7;
delay_ms(2);
Cntind = 0;
break;
}
}
// #asm ("sei") //разрешить прерывания
}



void main() {
init ();
while (1)
{
iv++;
IndOut(iv);
if (iv == 9999) {iv = 0;}
}
}
Реклама:
vvkka вне форума  
Непрочитано 27.11.2008, 14:45  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,946
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

А почему вы решили, что значения в регистрах вам будут доступны вне процедуры перевода в строку? Компилятор волен использовать регистры как ему хочется. Думаю, стоит просмотреть листинг - как используются регистры R17,18,19 в процедуре IndOut
nml вне форума  
Непрочитано 27.11.2008, 15:38  
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 17
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию

Сообщение от nml
А почему вы решили, что значения в регистрах вам будут доступны вне процедуры перевода в строку? Компилятор волен использовать регистры как ему хочется. Думаю, стоит просмотреть листинг - как используются регистры R17,18,19 в процедуре IndOut
регистры привязаны чтоб в Си потом использовать (не искать)
прогу прогонял в AVR studio там все нормально работает, прошиваю в контролер все повторяется заново
такое ощущение что происходи переполнение "буфера или регитра отсчета или ..." и повисает индикация хотя отсщет идет и когда достигает нулевого значения все повторяется заново
vvkka вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Симуляция динамической индикации в proteus niksan321 Микроконтроллеры, АЦП, память и т.д 8 09.12.2010 22:43
Глюк MAX7490 myxan Коллекция глюков 0 30.09.2008 00:00
Бегущая строка без динамической развертки, может кто подскаж rogoz Микроконтроллеры, АЦП, память и т.д 7 13.01.2008 17:47
Совмещение динамической индикации и приема команд RC5 megAdriVeR Микроконтроллеры, АЦП, память и т.д 22 24.07.2007 21:18
протеус глюк shaft Proteus 1 11.04.2007 10:07


Часовой пояс GMT +4, время: 09:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot