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

 
 
> Подскажите начинающему, 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, 13:07
Сообщение #3


Гуру
******

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



Цитата(Djumper @ Nov 24 2010, 20:39) *
for (i=1;i<100;i++)
{
TH1 = 13453 >> 8; //число высчитал по формуле, это не важно, тут вроде разобрался
TL1 = 13453;
TR1 = 1;
while (!TF1);
TF1 = 0;
}

Ещё маленькое замечание. В цикле Вы устанавливаете бит TR1. Этот бит автоматически не сбрасывается в ноль, и в программе - он не изменяется. Поэтому, достаточно один раз установить его в единицу (и то - не в цикле):
Код
TR1 = 1;                    
for (i=1;i<100;i++)
{
......
}
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) sfr ...   Nov 25 2010, 06:29
||- - Djumper   Цитата(Палыч @ Nov 25 2010, 13:29) Код#in...   Nov 29 2010, 11:42
|- - Палыч   Цитата(Djumper @ Nov 24 2010, 20:39) P0_2...   Nov 25 2010, 08:12
- - 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 - 00:21
Рейтинг@Mail.ru


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