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

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


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

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



Цитата(Aleksandr_KPI @ Apr 16 2010, 14:29) *
Я не понял, выражайтесь яснее.

Ну вот у вас там окошечки с регистрами периферии.
Попробуйте подёргать за ноги, соответствующие INT0 - а вдруг сработает?


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


Местный
***

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



Биты прерывания устанавливаются нормально, не происходит собственно само прерывание. Может дело в обрезанной версии пакета keil при компиляции он пишет, что лимит запускаемого кода 2К.

P.S. Пока я не нашел откуда скачать полную версию Keil uVision, что бы проверить эту теорию.
Go to the top of the page
 
+Quote Post
Hellper
сообщение Apr 17 2010, 10:38
Сообщение #18


Местный
***

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



watchdog отключите:

Код
PCA0MD &= ~0x40;


--------------------
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 19 2010, 09:39
Сообщение #19


Местный
***

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



Выдает ошибку.

Код
error C202: 'PCA0MD': undefined identifier
Go to the top of the page
 
+Quote Post
Hellper
сообщение Apr 19 2010, 10:46
Сообщение #20


Местный
***

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



Код
   WDTCN = 0xDE;                       // Disable watchdog timer
   WDTCN = 0xAD;


вот так. соррри.


--------------------
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 19 2010, 19:01
Сообщение #21


Местный
***

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



Странно, пишет:

Код
error C202: 'WDTCN': undefined identifier
          error C202: 'WDTCN': undefined identifier


Сообщение отредактировал Aleksandr_KPI - Apr 19 2010, 19:01
Go to the top of the page
 
+Quote Post
Hellper
сообщение Apr 20 2010, 05:57
Сообщение #22


Местный
***

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



Код
#include <C8051F020.h>

Прикрепленные файлы
Прикрепленный файл  c8051F020.rar ( 2.76 килобайт ) Кол-во скачиваний: 21
 


--------------------
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 20 2010, 08:14
Сообщение #23


Местный
***

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



Сначала выдавало ошибку:
Код
Error C231 Redefinition


Я исправил, запустил, а результат тот же: прерывание отсутствует.

Сообщение отредактировал Aleksandr_KPI - Apr 20 2010, 08:15
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 20 2010, 12:31
Сообщение #24


Местный
***

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



Разобрался, MrYuran был прав.

Цитата
Ну вот у вас там окошечки с регистрами периферии.
Попробуйте подёргать за ноги, соответствующие INT0 - а вдруг сработает?


Я прерывание не на том порту вызывал, книга о одном микроконтроллере, а я другой в программе указал.
Но всетаки один момент не работает, в последовательный порт после инвертирования битов не выдается сообщение.
Код
printf("Interrupt 0 occured. \n");
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 20 2010, 13:06
Сообщение #25


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

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



Цитата(Aleksandr_KPI @ Apr 20 2010, 16:46) *
Но всетаки один момент не работает, в последовательный порт после инвертирования битов не выдается сообщение.
Код
printf("Interrupt 0 occured. \n");

А это надо ручками putchar() написать, скорее всего.
Или заполнить содержанием готовую обёртку.
Но это неправильный подход. printf() выдаёт строку посимвольно, и для каждого символа вызывает putchar().
В случае с УАРТом это будет неоправданные потери времени.
Лучше использовать sprintf(), который формирует строку в буфере, а потом буфер отправлять в УАРТ.


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


Местный
***

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



Цитата
Но это неправильный подход. printf() выдаёт строку посимвольно, и для каждого символа вызывает putchar().


Спасибо за рекомендацию.

С проблемой я разобрался. Версия keil uvision с глюками. Она выводит в последовательный порт данные в белом цвете и 732 шрифтом smile.gif smile.gif . Не знаете где можно скачать нормальную версию?
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 21 2010, 08:00
Сообщение #27


Местный
***

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



Подскажите как правильно понимать работу регистра SBUF. Есть код:

Код
#include <stdio.h>
#include <string.h>
#include <REG52.H>

void fputchar (unsigned char c1)
{
  SBUF = c1;
    while (!TI);
      TI = 0;
}

void main(void)
{
  idata char src[] = "Output string";
  idata char *psrc = src;
  int len, cnt;

     SCON = 0x50;
      TH1 = 0xFD;
    TMOD |= 0x20;
      TR1 = 1;
       TI = 0;
      len = strlen(src);

for (cnt = 0; cnt < len; cnt++)
{
   fputchar(*psrc);
   psrc++;
}

while(1);


Когда запускаю в пошаговом режиме в последовательный порт не выводит ничего при достижении команды:
Код
SBUF = c1;

Нажимаю RUN выводит Output string.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 21 2010, 08:10
Сообщение #28


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

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



Цитата(Aleksandr_KPI @ Apr 21 2010, 12:15) *
Когда запускаю в пошаговом режиме в последовательный порт не выводит ничего при достижении команды:
Код
SBUF = c1;

Нажимаю RUN выводит Output string.

Наверно, нужно много раз понажимать.
Скорость вывода отличается от тактовой частоты процессора в сотни раз


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


Местный
***

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



Спасибо понял.

Дошел до работы с вставками ассемблерного кода в код Си. При сборке выдает ошибку:
Цитата
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C_STARTUP
MODULE: Prog2.obj (PROG2)
Program Size: data=18.0 xdata=0 code=61


Читал на официальном сайте о проблеме, но как исправить не понял.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Apr 23 2010, 08:02
Сообщение #30


Местный
***

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



Вот нашел на одном форуме:

Цитата
Короче, не используйте #pragma asm в кейле. Я не использую. Оно как-то плохо на него реагирует. Либо перепишите процедуру на си либо создаёте отдельный .asm файл и должным образом его оформляете со всеми директивами типа SEGMENT, extrn global и т.п.

Так что использовать не удастся.

Подскажите почему при выполнении следующего кода:
Код
NAME PROCS
      T2CON EQU 0C8h
      RCAP2H EQU 0CBh
      RCAP2L EQU 0CAh
CSEG AT 0
USING 0
JMP start
SerINT:
ORG 23h
JBC RI, RCV
RETI
RCV:
MOV P1, SBUF
RETI
;——————————————
start:
MOV P1, #0h
MOV SCON, #50h
CLR T2CON.0
CLR T2CON.1
SETB T2CON.4
SETB T2CON.5
MOV RCAP2H, #0FFh
MOV RCAP2L, #0B2h
SETB T2CON.2
SETB ES
SETB EA
SETB TI
SJMP $


В порте Р1 всегда установлены в единицу 4 и 5 биты.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

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

 


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


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