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

 
 
> Не выходит из прерывание по Инт1. Пишу на СИ для 8051
Дар
сообщение Mar 18 2011, 09:07
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



У меня возникла очень странная на мой взгляд проблема. Перешел к изучению програмирования МК на языке высокого уровня. Выбрал Си.
Написал пару очень простых задач из университетского курса. Но в обоих програмах возникла проблема с прерыванием. у меня на плате к прерыванию по внешнему срезу 1- подключена кнопка. При нажатии на кнопку, в прерывание попадает как и положенно. А вот потом я так и не понял толи у меня из прерывания вообше не выходит, то ли выходит но сразу запрыгивает назад. итог один. прерывание после одной активации работает как зацикленную функцию. Не могу понять в чем дело?
те же проги на асемблере у меня выходили нормально.
Пример. программы. Прграмма не сложная должна инвертировать светодиоды, после определенного нажатия нак кнопку. ( а делает: после вызова прерывания 1 раз. прерывание циклиться и светдиоды просто мигают постоянно)
#include <reg51.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
//#include <avr/io.h>
//#include <avr/interrupt.h>

sbit P3_5 = P3^5; \\ светодиод1
sbit P3_4 = P3^4; \\ светодиод 2
sbit P3_3 = P3^3; \\ светодиод 3

static unsigned int delay = 0;
char xdata str[20];
unsigned int N;
int i ;
int b = 0;
int c = 0;
int a = 1;
/* начало коментария
// enter MK to PowerDown while int1 = 0
void EnterPowerDown(void)
{
MCUCR = (1 << SE) | (1 << SM1); // int1 level sensitive + power-down
GICR = (1 << INT1);
asm("sleep");
}


//enter MK in idle mode, while INT1 in zero.
void WaitOnInt1ToGetHigh(void)
{
if (PIND & (1 << PD3)) // INT1 high?
{ // the level already high, no need to go idle
return;
}

MCUCR = (1 << SE) | (1 << ISC11) | (1 << ISC10); // int1 on rising edge + idle
GICR = (1 << INT1);
asm("sleep");
}*/ закоментированная часть проги, подозреваю что не для той версии кейла, или вообще не к этому процесору.

void initialize_system (void){
SCON = 0x52;
TMOD |= 0x20;
TH1 = 0xFa;
TR1 = 1;
TI = 1;
}

unsigned int num_element() {
printf("\nEnter the number of push on button Int1 for invert led\n",str);
gets (str, sizeof(str));
N = atoi(str); // ASCII to integer
return N;
}

void intrrupt_butInt1(void) interrupt 2
{
if (N >= i){
i = 0;
if (a == 1, b == 0, c == 0){
a = 0;
b = 1;
c = 1;
}
else{
a = 1;
b = 0;
c = 0;
}
P3_3 = a;
P3_4 = b;
P3_5 = c;
for (delay = 0; delay < 0x1FF; delay++);
}
else {i++;} // WHY? WHEN cursor CAME TO THIS POINT, JUMP TO BEGIN INTERRUPT. BUT DON'T T0 MAIN
}

void main( void ){
P3 ^= 0x00;
initialize_system();
for (delay = 0; delay < 0x1FFF; delay++);
P3_3 = a;
P3_4 = b;
P3_5 = c;
N = num_element();
while(TH0 < 6){
TCON |=0x04;
IE |=0x84;
}

}

макет платы на протеусе прилагаеться.
Прикрепленные файлы
Прикрепленный файл  ______ZIP___WinRAR.zip ( 37.11 килобайт ) Кол-во скачиваний: 14
 


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
Дар
сообщение Mar 19 2011, 12:15
Сообщение #16





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



реальная схема в аудитории. но макет с нее делался.


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 19 2011, 13:38
Сообщение #17


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вы можете изъясняться маленько однозначнее?

Если вы имеете в виду снмок протеуса, то та схема работать не будет. Если реальная - точно такая же.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Дар
сообщение Mar 19 2011, 14:13
Сообщение #18





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



И что в схеме не так? и почему этого раньше никто не заметил. В КПИ уже 3 курс используют этот макет.


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 19 2011, 14:38
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Макет от чего-то питается. От батареек?
Где блокировочные конденсаторы.
Почему некоторые входы (весьма значимые) висят в воздухе?
Не вижу конденсатора на кнопке. Если что-то слышали про дребез контактов, то нажатие на такую кнопку вызовет тучу прерываний.

В программе.
Туча прерываний очень связана с размером стека. Кто управляет у вас размером стека?
И так далее.

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

Должна быть одна строка include, которая содержит определение регистров. Больше ничего.





--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Дар
сообщение Mar 19 2011, 15:28
Сообщение #20





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



Спасибо за указания, попробую переделать макет. Хотя все еще не понимаю как по вашему функция atoi. и printf могут быть связаны с прерыванием(я их на ассеблере видел, ну то что отображаеться в cntrl+D).


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 19 2011, 16:00
Сообщение #21


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Дар @ Mar 18 2011, 22:04) *
intel 8051AH
Дык, P3_3 - это вход INT1. А у вас на нём светодиод висит. Сами себя и загоняете в прерывание, когда светодиодом начинаете управлять, всё правильно...
Go to the top of the page
 
+Quote Post
Дар
сообщение Mar 19 2011, 17:28
Сообщение #22





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



бЛин точно, спасибо. это да, это дали маху.

только что попробывал вырубить, походу это не едиственый бок. так как не помогло.

Сообщение отредактировал Дар - Mar 19 2011, 17:30


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 19 2011, 18:48
Сообщение #23


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Дар @ Mar 19 2011, 20:28) *
только что попробывал вырубить, походу это не едиственый бок. так как не помогло.
Кого? Кому? А? Что? Где я? sm.gif
Go to the top of the page
 
+Quote Post
Дар
сообщение Mar 19 2011, 20:01
Сообщение #24





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



диод который на порте 3_3


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 19 2011, 20:27
Сообщение #25


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Дар @ Mar 19 2011, 23:01) *
диод который на порте 3_3
Ну Proteus вполне себе переключает два оставшихся на каждое четвертое нажатие кнопки, согласно логике выложенной вами выше (#15) программы (а на P3_5 еще пищалка висит у вас, дада). Собстно, поэтому и интересуюсь, что же там "не помогло", и чего ж надобно-то?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 20 2011, 11:49
Сообщение #26


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(SysRq @ Mar 19 2011, 23:27) *
Собстно, поэтому и интересуюсь, что же там "не помогло"

А я знаю, как ето называеццо.
"Пляска Святого Витта."
Во!
Go to the top of the page
 
+Quote Post
Дар
сообщение Mar 20 2011, 12:16
Сообщение #27





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



Цитата(SysRq @ Mar 19 2011, 22:27) *
Ну Proteus вполне себе переключает два оставшихся на каждое четвертое нажатие кнопки, согласно логике выложенной вами выше (#15) программы (а на P3_5 еще пищалка висит у вас, дада). Собстно, поэтому и интересуюсь, что же там "не помогло", и чего ж надобно-то?


не помогло, изтятие из програмы 3 диода, оставил только два. тоже самое. заскакивает в прервание сраху после выхода.


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 20 2011, 13:27
Сообщение #28


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Дар @ Mar 20 2011, 15:16) *
не помогло, изтятие из програмы 3 диода, оставил только два.
Дайте KEIL'овский проект целиком, посмотрим..

--

Цитата(_Pasha @ Mar 20 2011, 14:49) *
"Пляска Святого Витта."
Ну и аватарка у него в Википедии biggrin.gif
Go to the top of the page
 
+Quote Post
Дар
сообщение Mar 20 2011, 15:42
Сообщение #29





Группа: Участник
Сообщений: 14
Регистрация: 18-03-11
Из: Киев
Пользователь №: 63 685



Вот Проэкт.
Прикрепленные файлы
Прикрепленный файл  lab_13_2_2.rar ( 15.06 килобайт ) Кол-во скачиваний: 9
 


--------------------
Восточные девушки хороши до безобразия, а также во время безобразия и после безобразия.
Не знаешь класики, не узнаешь ничего.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 20 2011, 17:28
Сообщение #30


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Обалдеть. Т.е. "программа на ассемблере работала" - чистое вранье?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:03
Рейтинг@Mail.ru


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