|
|
  |
Программа для микроконтроллера, Как работает код |
|
|
|
Apr 14 2010, 14:53
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Здравствуйте. Мне нужно запрограммировать МК C8051F020. В ассемблере я не силен, а с Си доводилось работать, поэтому решил использовать последний. Скачал книгу: Магда Ю.С. "Микроконтроллеры серии 8051: практический подход". По ней и планирую программировать. В процессе изучения возник вопрос касательно применения ассемблера в коде Си (в книге говорится может понадобится). Код: Цитата #pragma asm SETB ET0; SETB EA; #pragma endasm; SETB EA - запрет на любые прерывания, а что такое SETB ET0.
|
|
|
|
|
Apr 15 2010, 14:32
|
Местный
  
Группа: Свой
Сообщений: 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
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 16 2010, 07:18
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Чем Вы там пользуетесь для отладки Вашей программы? Использую среду Keil uVision. Цитата Можно ли поставить точку останова в процедуру обработки прерывания от таймера и запустить программу в автомате? Остановится ли программа на точке останова? Честно сказать, я не знаю как это сделать. Программу я запускал и в пошаговом и в непрерывном режимах, результат отрицательный.
|
|
|
|
|
Apr 16 2010, 07:28
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Бросайте хренью заниматься, возьмите реальную железку. Так, а на реальной железке писать программу методом проб и ошибок, ее ведь откомпилировать нужно.
|
|
|
|
|
Apr 16 2010, 07:35
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Бросайте хренью заниматься, возьмите реальную железку. Цитата естественно, а до этого ещё и написать. Тогда я не понял сути. Что Вы имеете ввиду?
|
|
|
|
|
Apr 16 2010, 07:47
|

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

|
Цитата(Aleksandr_KPI @ Apr 16 2010, 11:50)  Тогда я не понял сути. Что Вы имеете ввиду? Я имею в виду, что нужно поставить задачу и попытаться её решить. Хотя бы с/д моргнуть. А лучше чего-нибудь посущественней. Игры с симулятором с примерами из учебника мало что дают в плане обучения. Вот к примеру, что делает ваша программа? Инициализировала порт и тупо зависла в бесконечном цикле. А вы чего-то ждёте. Ну сделайте хотя бы софтовую задержку, тогда и в симуляторе увидите результат.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Apr 16 2010, 08:09
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Я имею в виду, что нужно поставить задачу и попытаться её решить. Хотя бы с/д моргнуть. А лучше чего-нибудь посущественней. Игры с симулятором с примерами из учебника мало что дают в плане обучения. Задача есть, он для этого нужны азы. Цитата Вот к примеру, что делает ваша программа? Инициализировала порт и тупо зависла в бесконечном цикле. А вы чего-то ждёте. Из книги: Цитата В этой программе используется программа обработчик внешнего прерывания 0 (INT0). Каждый раз при возникновении прерывания в последовательный порт выводится соответствующее сообщение и инвертируется бит 0 порта P1. Цикл я убрал и выяснил, что программа не выполняет прерывание (откомпилировал пошагово). Выходит код не правильный в примере?
|
|
|
|
|
Apr 16 2010, 09:34
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
По задумке автора прерывание вызывается программно. Цитата IT0 = 1; EX0 = 1; EA = 1;
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|