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

 
 
> Не выходит из прерывание по Инт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

Сообщений в этой теме
- Дар   Не выходит из прерывание по Инт1. Пишу на СИ для 8051   Mar 18 2011, 09:07
- - sigmaN   Я бы в прерывании задержки не ставил... мутное как...   Mar 18 2011, 12:04
|- - aaarrr   Цитата(sigmaN @ Mar 18 2011, 15:04) а ещё...   Mar 18 2011, 15:56
- - Дар   У меня возникла очень странная на мой взгляд пробл...   Mar 18 2011, 15:31
- - DpInRock   У человека скорее всего "не работает" мо...   Mar 18 2011, 15:45
|- - Дар   Цитата(DpInRock @ Mar 18 2011, 17:45) У ч...   Mar 18 2011, 16:00
|- - _Pasha   Цитата(Дар @ Mar 18 2011, 20:00) У меня ...   Mar 18 2011, 16:30
|- - Дар   Цитата(_Pasha @ Mar 18 2011, 18:30) Тогда...   Mar 18 2011, 16:51
|- - _Pasha   Цитата(Дар @ Mar 18 2011, 19:51) проблема...   Mar 18 2011, 18:42
- - DpInRock   А какой именно 8051 вы используете. --- Ибо вы куд...   Mar 18 2011, 18:39
- - Дар   Цитата(DpInRock @ Mar 18 2011, 20:39) А к...   Mar 18 2011, 19:04
- - DpInRock   Скакой частотой мигают диоды (оценочно - герцы, мн...   Mar 19 2011, 06:30
- - Дар   Цитата(DpInRock @ Mar 19 2011, 08:30) Ска...   Mar 19 2011, 09:45
- - DpInRock   а реальная схема? На проводках? Блокировочные конд...   Mar 19 2011, 10:13
- - Дар   я пробывал вырубать все оставляя только светодиоды...   Mar 19 2011, 11:08
- - Дар   реальная схема в аудитории. но макет с нее делался...   Mar 19 2011, 12:15
- - DpInRock   Вы можете изъясняться маленько однозначнее? Если ...   Mar 19 2011, 13:38
- - Дар   И что в схеме не так? и почему этого раньше никто ...   Mar 19 2011, 14:13
- - DpInRock   Макет от чего-то питается. От батареек? Где блокир...   Mar 19 2011, 14:38
- - Дар   Спасибо за указания, попробую переделать макет. Хо...   Mar 19 2011, 15:28
- - SysRq   Цитата(Дар @ Mar 18 2011, 22:04) intel 80...   Mar 19 2011, 16:00
- - Дар   бЛин точно, спасибо. это да, это дали маху. тольк...   Mar 19 2011, 17:28
|- - SysRq   Цитата(Дар @ Mar 19 2011, 20:28) только ч...   Mar 19 2011, 18:48
- - Дар   диод который на порте 3_3   Mar 19 2011, 20:01
|- - SysRq   Цитата(Дар @ Mar 19 2011, 23:01) диод кот...   Mar 19 2011, 20:27
|- - _Pasha   Цитата(SysRq @ Mar 19 2011, 23:27) Собстн...   Mar 20 2011, 11:49
- - Дар   Цитата(SysRq @ Mar 19 2011, 22:27) Ну Pro...   Mar 20 2011, 12:16
|- - SysRq   Цитата(Дар @ Mar 20 2011, 15:16) не помог...   Mar 20 2011, 13:27
- - Дар   Вот Проэкт.   Mar 20 2011, 15:42
|- - SysRq   Цитата(Дар @ Mar 20 2011, 18:42) Вот Проэ...   Mar 20 2011, 18:50
- - DpInRock   Обалдеть. Т.е. "программа на ассемблере работ...   Mar 20 2011, 17:28


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

 


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


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