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

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

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

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

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

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


 
Опции темы
Непрочитано 18.04.2013, 17:51  
<VenoM>
Временная регистрация
 
Регистрация: 27.02.2012
Адрес: Николаев
Сообщений: 98
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
<VenoM> на пути к лучшему
По умолчанию Некорректная работа TMR0 (PIC18F4550)

День добрый, надеюсь, что где-то допустил грубую ошибку, но два дня сижу - не могу понять в чём дело.

Суть проблемы: прерывание TMR0 по переполнению, а так же 16 битный режим TMR0 перестают работать, если в пустом цикле TMR0L не пишется в переменную.
Т.е. вот так:
Код:
	while (1)
	{
		
		tmr_temp2=TMR1L;
 		
	}
всё работает.

а вот так:

Код:
	while (1)
	{
		
		//tmr_temp2=TMR1L;
 		
	}
нет.

Код:

Код:
/*конфиг*/
#include ‹delays.h›
#include ‹define.h›
#include ‹timers.h›

#pragma config FOSC=HS, IESO=OFF // для p18f252 OSC=HS, OSCS=OFF
#pragma config PWRT=ON, BOR=OFF
#pragma config WDT=OFF
#pragma config STVREN=ON, LVP=OFF //для p18f252 STVR=ON


/*переменные*/
unsigned int voltage_bin;
unsigned int voltage_7_SEG;
char voltage_bin_thousands;/*переменная вывода на 7_сегментники*/
unsigned int push_number;/*кнопка*/
unsigned short long work_1;/*рабочий№1*/
unsigned int work_2;/*рабочий№2*/
unsigned int thousands;/*тысячный разряд_семисегметник*/
unsigned int hundreds;/*сотый разряд_семисегметник*/
unsigned int decads;/*десятый разряд_семисегметник*/
unsigned int units;/*единичный разряд_семисегметник*/
unsigned int ADC_L;/* младший байт AЦП*/
unsigned int ADC_H;/* старший байт AЦП*/
unsigned long int napruga;/* миливольты*/
unsigned char koma_1;/* тысячная запятая*/
unsigned char koma_2;/* сотая запятая*/
unsigned char koma_3;/* десятая запятая*/
unsigned int ADC_int_counter;
int V_ref;
unsigned char flag_1;
char error_flag;
unsigned char index;// индекс элемента массива
int value;//значение элемента массива
unsigned int S[100];//наш массивчик из 100 элементов (0-99)
unsigned char predel_status;//идентификатор предела измерения (500В-1, 50В-2, 5В-3, 0.5В-4)
unsigned char config;

extern long tmr1_value;
extern unsigned int tmr_value;
extern unsigned int tmr_temp;
extern unsigned int tmr_temp2;
extern unsigned int tmr_temp3;
extern unsigned int cykle_status;


//////////////////
/*функции*/
void test_SEG_1 (void);
void test_subprogram (void);
void seven_SEG_code (void);
void knopka_push (void);
void out_units (void);
void out_decads (void);
void out_hundreds (void);
void out_thousands (void);
void adc_calculate (void);
void adc_GO (void);
void read_ADC (void);
void Err (void);
void settings_0 (void);
void read_counter_1 (void);
void loop (void);


//////////////////

/*главная*/
void main (void)
{
	
settings_0 ();

//настройка таймера 0 как счётчика импульсов//
TRISAbits.TRISA4=1;//ножка таймера - вход
INTCONbits.TMR0IE=1;//разрешить прерывание таймера 0 по переполнению
INTCON2bits.TMR0IP=1;//высокий приоритет прерывания таймера0
T0CON=0b10111000;//делитель 1:2, предделитель выкл, по спаду фронта, счёт по импульсам на RA4, 16 бит, таймер вкл.


//настройка таймера 1 как счётчика времени//
TRISCbits.TRISC1=1;//ножка таймера - вход
T1CON=0b01001011; //таймер вкл, синхронизация Fosc/8, синхронизация внутр,16 бит 
PIE1bits.TMR1IE=1;//вкл. прерывание по переполнению


	
	while (1)
	{
		
	}	

}
проект+протеус в приложении.
Вложения:
Тип файла: zip counter_TMR0.zip (69.6 Кб, 36 просмотров)
Реклама:
<VenoM> вне форума  
Непрочитано 23.04.2013, 09:45  
<VenoM>
Временная регистрация
 
Регистрация: 27.02.2012
Адрес: Николаев
Сообщений: 98
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
<VenoM> на пути к лучшему
По умолчанию Re: Некорректная работа TMR0 (PIC18F4550)

собрал макет - всё работает нормально. Так что похоже именно на протеус. К тому же, когда считают внешние импульсы два таймера симуляция получается не в реальном времени, т.е. очень долго. Так что если у вас не core i5 какой-то, то пытаться не стоит.
<VenoM> вне форума  
Непрочитано 18.03.2016, 10:55  
youri
Частый гость
 
Регистрация: 25.11.2010
Сообщений: 8
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 5 сообщении(ях)
youri на пути к лучшему
По умолчанию Re: Некорректная работа TMR0 (PIC18F4550)

Попробуйте вместо
while (1)
{

}

написать
while (1)
{
;
}

или
while (1)
{
asm("nop");
}
или
locLoop:

goto locLoop;
youri вне форума  
Непрочитано 18.03.2016, 11:51  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Некорректная работа TMR0 (PIC18F4550)

Компилятор оптимизирует пустой цикл while - т.е. удаляет его совсем. Пишите там или НОП, или какой-нибудь не оптимизируемый в ноль код
niXto вне форума  
Эти 2 пользователя(ей) сказали Спасибо niXto за это сообщение:
3comma62 (19.03.2016), Alex9797 (18.03.2016)
Непрочитано 18.03.2016, 22:41  
Alex9797
Почётный гражданин KAZUS.RU
 
Аватар для Alex9797
 
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,568
Сказал спасибо: 5,042
Сказали Спасибо 10,611 раз(а) в 3,604 сообщении(ях)
Alex9797 на пути к лучшему
По умолчанию Re: Некорректная работа TMR0 (PIC18F4550)

Некрофилы! Еще бы месяц подождали, и было бы ровно три года...
Alex9797 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректная работа мультивибратора 89168007348 TTL и CMOS логика 16 27.03.2013 13:00
PIC12F675 и TMR0 Fair88Play Микроконтроллеры, АЦП, память и т.д 12 12.07.2012 14:02
PIC16 TMR0 и TMR2 Slava-martyn Микроконтроллеры, АЦП, память и т.д 10 06.12.2011 01:58
С1-112 некорректная развёртка ostashv-evgeniyy Измерительное оборудование 22 03.05.2011 23:02
TMR0 pic12c508 cnc10 Микроконтроллеры, АЦП, память и т.д 7 30.04.2009 20:23


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


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