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

 
 
> Подскажите начинающему, Keil
Djumper
сообщение Oct 9 2010, 18:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 9-10-10
Пользователь №: 60 027



Очень заинтересовался программированием микроконтроллеров.
Сейчас изучаю Keil и язык C.
Имеется железка на микроконтроллере ADuC842.
Начал с малого. Решил написать программу, которая просто заставляет загореться два светодиода из четырёх. Написал. Получилось, работает.
Сейчас решил написать программу, суть которой заключается в том, что надо нажать на кнопку и светодиод загорится, если ещё раз нажать на кнопку, то светодиод тухнет. Бился целый день, но не получается.

Согласно схеме: на светодиод надо подать 0, чтобы он загорелся, на кнопку надо тоже подать 0, чтобы она сработала и заставила загореться светодиод.
Порты прописывал следующим образом: sbit P1_1=0x11 (например светодиод) и P2_1=0x22 (например кнопка). Адреса портов 0x00 условные, т.е. по спецификации я знаю правильный адрес, это для примера привел.

Подскажите, расскажите, объясните. Выслушаю всех, очень хочу научиться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Djumper
сообщение Nov 24 2010, 17:39
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 9-10-10
Пользователь №: 60 027



Кое как со скрипам научился делать что-то вроде задержки, без всяких библиотек и delay-ев. С помощью таймеров! Использовал микроконтроллер ADuC842.
Делал по книжке, так сказать, просто заменял цифры в готовой программе и делал разный период мигания светодиода. Цифры брал не от балды, а высчитывал сам по формуле и делал ту задержку которую мне надо.
Осталось разобраться с программой.
Помогите кто знает, укажите что так что не так, я сейчас напишу комментарии, а вы укажите что не так.

sfr TMOD=0x89; //тут всё стандартно, перечисляем порты микроконтроллера
sfr TCON=0x88;
sfr TH1=0x8D; //TH1 и TL1 старший и младший разряды таймера работающие в первом режиме? указываем их порты?
sfr TL1=0x8B;
sfr P0=0x80;
sbit TF1=TCON^7; //вот эти две строчки не понял что означают. и цифры что означают 7 и 6?
sbit TR1=TCON^6;
sbit P0_0 = P0^0; //тут всё ясно, опять таки что означают цифры 0,1,2,3? исключающее ИЛИ для чего?
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
main ()
{
int i;
TMOD=0x10; //сконфигурировали таймер как 8-битный тамер счётчик???
TCON=0xC0; //сконфигурировали регистр управления таймером ... как...???
for (i=1;i<100;i++)
{
TH1 = 13453 >> 8; //число высчитал по формуле, это не важно, тут вроде разобрался
TL1 = 13453;
TR1 = 1;
while (!TF1);
TF1 = 0;
}
P0_0 = 0;
P0_1 = 0;
P0_2 = 0;
P0_3 = 0;
for (i=1;i<100;i++)
{
TH1 = 13453 >> 8; //тут опять какое-то повторение, можно обойтись без него? а понял смысл, предыдущие идентичные команды - светодиод не горит "такое-то" время, а эти команды - светодиод горит "такое-то" время.
TL1 = 13453;
TR1 = 1;
while (!TF1);
TF1 = 0;
}
P0_0 = 0;
P0_1 = 0;
P0_2 = 1; //загорается "такой-то" светодиод
P0_3 = 0;
}

Сообщение отредактировал Djumper - Nov 24 2010, 17:42
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 25 2010, 06:29
Сообщение #3


Гуру
******

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



Цитата(Djumper @ Nov 24 2010, 20:39) *
sfr TH1=0x8D; //TH1 и TL1 старший и младший разряды таймера работающие в первом режиме? указываем их порты?
Для SFR с адресом 8Dh определяется символическое имя - TH1. Это имя впоследствии используется в программе.

Цитата(Djumper @ Nov 24 2010, 20:39) *
sbit TF1=TCON^7; //вот эти две строчки не понял что означают. и цифры что означают 7 и 6?
sbit TR1=TCON^6;
sbit P0_0 = P0^0; //тут всё ясно, опять таки что означают цифры 0,1,2,3? исключающее ИЛИ для чего?
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
Для отдельных битов SFR определяются символические имена. Например, запись P0^0 означает нулевой бит регистра специальных функций с именем P0. Такая запись битов "проходит" не во всех трансляторах.

PS. Обычно с транслятором поставляется файл в котором уже определены все регистры и их биты в соответствии с DS на конкретный МК. Вместо определения их в программе (т.е. всех этих строк с sfr и sbit) записывают строчку препроцессора
Код
#include <ADuC842.h>
Go to the top of the page
 
+Quote Post
Djumper
сообщение Nov 29 2010, 11:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 9-10-10
Пользователь №: 60 027



Цитата(Палыч @ Nov 25 2010, 13:29) *
Код
#include <ADuC842.h>

Спасибо за подсказку!

Цитата(Палыч @ Nov 25 2010, 15:12) *
Эдесь, скорее всего, "какой-то" светодиод - погаснет. Посмотрите внимательно в DS: как устроен выход паралельного порта - при выводе в порт нуля соответствующая ножка "замыкается" на "землю" ключем, а при выводе единицы - высокий уровень на ножке обеспечивается подтягивающим резистором. Чтобы загорелся светодиод - его включают между ножкой МК и плюсом питания через резистор, при этом светодиод горит при нуле на ножке МК. МК51 ("классика") может обеспечить достаточный для зажигания светодиода ток (и то не на всех портах) только при нуле на ножке МК (втекающий ток).

У меня (точнее на микроконтроллере на работе, он не мойsmile.gif) согласно схеме, светодиод подключен немного по другому: "минус" светодиода через резистор R1 подключен к коллектору транзистора, "плюс" светодиода подключен через резистор R2 к базе транзистора (сюда подаётся + напряжения питания, а этот резистор служит для усиления тока базы), эмиттер подключен к "земле" (-). И уже через базу транзистора мы подключаемся к выводу микроконтроллера.
Как я понял благодаря этому резистору R2, вместо 0 для включения светодиода, мы имеем 1 для включения светодиода.

Спасибо за подсказки!


Кстати никто не поможет написать простую программу, что-то вроде ввода пароля на микроконтроллере: вводим с помощью клавиатуры матричного типа известные цифры (пароль), светодиод загорается, если пароль введён не верно, то ничего не происходит.
С меня подробная принципиальная схема устройства для которого пишется программа. Документация. Само устройство есть в пользовании. И я готов за работу даже денюшку дать, минимум 10$.
Короче мне нужен учитель для создания этой программы smile.gif

Сообщение отредактировал Djumper - Nov 29 2010, 11:48
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Djumper   Подскажите начинающему   Oct 9 2010, 18:09
- - rezident   Не нужно подавать на пин, к которому подключена кн...   Oct 9 2010, 19:02
|- - Djumper   Цитата(rezident @ Oct 10 2010, 02:02) Не ...   Oct 10 2010, 07:07
- - rezident   Периферию вашего контроллера я не знаю, а изучать ...   Oct 10 2010, 08:01
|- - Djumper   rezident спасибо, а что такое P3?   Oct 10 2010, 10:48
|- - rezident   Цитата(Djumper @ Oct 10 2010, 16:48) rezi...   Oct 10 2010, 11:05
|- - Djumper   Цитата(rezident @ Oct 10 2010, 18:05) Пор...   Oct 10 2010, 11:12
- - rezident   Ну дык замените в дефайнах номера битов и далее по...   Oct 10 2010, 11:52
- - Djumper   Дребезг и т.д. это слишком сложно для меня, на ско...   Oct 12 2010, 15:00
|- - rezident   Цитата(Djumper @ Oct 12 2010, 21:00) Но н...   Oct 12 2010, 16:09
- - firstvald   Вы фактически реализуете счетный триггер, но при ...   Oct 12 2010, 16:35
|- - Djumper   Цитата(firstvald @ Oct 12 2010, 23:35) Вы...   Oct 12 2010, 16:54
- - firstvald   Давайте еще проще: void main (void) { P1=0xff;//и...   Oct 12 2010, 17:18
|- - Djumper   Цитата(firstvald @ Oct 13 2010, 00:18) Да...   Oct 12 2010, 17:40
- - firstvald   Нет. Я специально написал безо всяких битовых опер...   Oct 12 2010, 17:51
|- - Djumper   Цитата(firstvald @ Oct 13 2010, 00:51) Не...   Oct 12 2010, 18:34
- - Djumper   С кнопкой с горем пополам разобрался Хочу собрат...   Nov 17 2010, 14:03
- - XVR   ЦитатаОдно не понятно, как мне подключить это устр...   Nov 18 2010, 11:12
|- - Djumper   Цитата(XVR @ Nov 18 2010, 18:12) Программ...   Nov 18 2010, 17:35
- - XVR   ЦитатаРадуюсь. Так? Так Или с вариантами - многие ...   Nov 18 2010, 18:14
- - Djumper   Как подключить библиотеку delay.h в Keil 3? Пишет ...   Nov 19 2010, 13:20
- - Djumper   Возможно эта библиотека называется как-то по друго...   Nov 21 2010, 14:48
|- - Палыч   Цитата(Djumper @ Nov 24 2010, 20:39) P0_2...   Nov 25 2010, 08:12
|- - Палыч   Цитата(Djumper @ Nov 24 2010, 20:39) for ...   Nov 25 2010, 13:07
- - Djumper   Сам написал программу! Всё же приятно самому с...   Dec 16 2010, 15:04
|- - Палыч   Цитата(Djumper @ Dec 16 2010, 21:04) Высл...   Dec 17 2010, 13:46
|- - Djumper   Цитата(Палыч @ Dec 17 2010, 22:46) P.S. М...   Dec 18 2010, 08:21
- - Палыч   Цитата(Djumper @ Dec 18 2010, 14:21) Подс...   Dec 18 2010, 09:08
- - Djumper   Кодsfr P0=0x80; sfr P1=0x90; sbit P0_0=0x80; //1 с...   Dec 18 2010, 15:16
- - Палыч   Цитата(Djumper @ Dec 18 2010, 21:16) for ...   Dec 19 2010, 04:22
- - Djumper   Учту дребезг в будущем. На данный момент сделаю т...   Dec 19 2010, 12:35
- - Палыч   Цитата(Djumper @ Dec 19 2010, 18:35) На д...   Dec 20 2010, 07:00


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

 


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


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