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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Программа для микроконтроллера, Как работает код
Aleksandr_KPI
сообщение Apr 14 2010, 14:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Здравствуйте.

Мне нужно запрограммировать МК C8051F020. В ассемблере я не силен, а с Си доводилось работать, поэтому решил использовать последний. Скачал книгу: Магда Ю.С. "Микроконтроллеры серии 8051: практический подход". По ней и планирую программировать. В процессе изучения возник вопрос касательно применения ассемблера в коде Си (в книге говорится может понадобится). Код:

Цитата
#pragma asm

SETB ET0;
SETB EA;

#pragma endasm;


SETB EA - запрет на любые прерывания, а что такое SETB ET0.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Apr 14 2010, 17:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Aleksandr_KPI @ Apr 14 2010, 19:08) *
Здравствуйте.

Мне нужно запрограммировать МК C8051F020. В ассемблере я не силен, а с Си доводилось работать, поэтому решил использовать последний. Скачал книгу: Магда Ю.С. "Микроконтроллеры серии 8051: практический подход". По ней и планирую программировать. В процессе изучения возник вопрос касательно применения ассемблера в коде Си (в книге говорится может понадобится). Код:



SETB EA - запрет на любые прерывания, а что такое SETB ET0.

ну наверное EnableTimer0

а вообще почитайте для начала даташит на контроллер, разберитесь с регистрами и названиями битов, многие вопросы даже не возникнут
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 15 2010, 14:32
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Выполнил программу по учебнику, а она работает не до конца.


Цитата
#include <stdio.h> #include <stdio.h>
#include <REG52.h>




sbit Bit0 = P1^0;
void INT0Isr (void) interrupt 0 using 1 {

EX0 = 0;
Bit0 = ~ Bit0;
printf("Interrupt 0 occured. \n");
EX0 = 1;
}


void main (void)

{

SCON = 0x50;
TH1 = 0xFD;
TMOD |= 0x20;
TR1 = 1;
TI = 1;

IT0 = 1;
EX0 = 1;
EA = 1;


while (1);


}


При выполнении в пошаговом режиме не инвестируется бит порта Р1 и в порт не выдается значение.

Сообщение отредактировал Aleksandr_KPI - Apr 15 2010, 14:33
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 15 2010, 15:13
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Aleksandr_KPI @ Apr 15 2010, 17:47) *
Выполнил программу по учебнику, а она работает не до конца.
При выполнении в пошаговом режиме не инвестируется бит порта Р1 и в порт не выдается значение.
Инвертироваться значение Р1.0 должно в прерывании от таймера, при этом ещё должно(?) выводиться сообщение "Interrupt 0 occured." (не знаю только вот куда должно выводиться: на терминал(?), судя по всему). Возможно, в пошаговом режиме Вы просто не дождались момента, когда таймер отсчитает нужное время... Чем Вы там пользуетесь для отладки Вашей программы? Можно ли поставить точку останова в процедуру обработки прерывания от таймера и запустить программу в автомате? Остановится ли программа на точке останова?
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 16 2010, 07:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Цитата
Чем Вы там пользуетесь для отладки Вашей программы?


Использую среду Keil uVision.

Цитата
Можно ли поставить точку останова в процедуру обработки прерывания от таймера и запустить программу в автомате? Остановится ли программа на точке останова?


Честно сказать, я не знаю как это сделать. Программу я запускал и в пошаговом и в непрерывном режимах, результат отрицательный.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 16 2010, 07:23
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Возможно, что периферия не симулируется, либо симулируется с ошибками.
Бросайте хренью заниматься, возьмите реальную железку.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 16 2010, 07:28
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Цитата
Бросайте хренью заниматься, возьмите реальную железку.


Так, а на реальной железке писать программу методом проб и ошибок, ее ведь откомпилировать нужно.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 16 2010, 07:31
Сообщение #8


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Aleksandr_KPI @ Apr 16 2010, 11:43) *
ее ведь откомпилировать нужно.

естественно, а до этого ещё и написать.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 16 2010, 07:35
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Цитата
Бросайте хренью заниматься, возьмите реальную железку.


Цитата
естественно, а до этого ещё и написать.

Тогда я не понял сути. Что Вы имеете ввиду?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 16 2010, 07:47
Сообщение #10


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Aleksandr_KPI @ Apr 16 2010, 11:50) *
Тогда я не понял сути. Что Вы имеете ввиду?

Я имею в виду, что нужно поставить задачу и попытаться её решить.
Хотя бы с/д моргнуть. А лучше чего-нибудь посущественней.
Игры с симулятором с примерами из учебника мало что дают в плане обучения.

Вот к примеру, что делает ваша программа?
Инициализировала порт и тупо зависла в бесконечном цикле.
А вы чего-то ждёте.

Ну сделайте хотя бы софтовую задержку, тогда и в симуляторе увидите результат.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 16 2010, 08:09
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Цитата
Я имею в виду, что нужно поставить задачу и попытаться её решить.
Хотя бы с/д моргнуть. А лучше чего-нибудь посущественней.
Игры с симулятором с примерами из учебника мало что дают в плане обучения.


Задача есть, он для этого нужны азы.

Цитата
Вот к примеру, что делает ваша программа?
Инициализировала порт и тупо зависла в бесконечном цикле.
А вы чего-то ждёте.


Из книги:
Цитата
В этой программе используется программа обработчик внешнего прерывания 0 (INT0). Каждый раз при возникновении прерывания в последовательный порт выводится соответствующее сообщение и инвертируется бит 0 порта P1.


Цикл я убрал и выяснил, что программа не выполняет прерывание (откомпилировал пошагово). Выходит код не правильный в примере?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 16 2010, 08:57
Сообщение #12


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Aleksandr_KPI @ Apr 16 2010, 12:24) *
Цикл я убрал и выяснил, что программа не выполняет прерывание (откомпилировал пошагово). Выходит код не правильный в примере?

А внешнее воздействие вы на INT0 выдаёте?
Иначе на что он должен реагировать?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 16 2010, 09:34
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



По задумке автора прерывание вызывается программно.

Цитата
IT0 = 1;
EX0 = 1;
EA = 1;
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 16 2010, 09:59
Сообщение #14


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Aleksandr_KPI @ Apr 16 2010, 13:49) *
По задумке автора прерывание вызывается программно.

Ну а если руками за ноги подёргать?
Я бы за два дня там все галки бы поотжимал...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 16 2010, 10:14
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Я не понял, выражайтесь яснее.
Go to the top of the page
 
+Quote Post

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

 


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


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