|
Подскажите начинающему, Keil |
|
|
|
Oct 9 2010, 18:09
|
Участник

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

|
Очень заинтересовался программированием микроконтроллеров. Сейчас изучаю Keil и язык C. Имеется железка на микроконтроллере ADuC842. Начал с малого. Решил написать программу, которая просто заставляет загореться два светодиода из четырёх. Написал. Получилось, работает. Сейчас решил написать программу, суть которой заключается в том, что надо нажать на кнопку и светодиод загорится, если ещё раз нажать на кнопку, то светодиод тухнет. Бился целый день, но не получается.
Согласно схеме: на светодиод надо подать 0, чтобы он загорелся, на кнопку надо тоже подать 0, чтобы она сработала и заставила загореться светодиод. Порты прописывал следующим образом: sbit P1_1=0x11 (например светодиод) и P2_1=0x22 (например кнопка). Адреса портов 0x00 условные, т.е. по спецификации я знаю правильный адрес, это для примера привел.
Подскажите, расскажите, объясните. Выслушаю всех, очень хочу научиться.
|
|
|
|
|
 |
Ответов
|
Nov 24 2010, 17:39
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 25 2010, 08:12
|

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

|
Цитата(Djumper @ Nov 24 2010, 20:39)  P0_2 = 1; //загорается "такой-то" светодиод Эдесь, скорее всего, "какой-то" светодиод - погаснет. Посмотрите внимательно в DS: как устроен выход паралельного порта - при выводе в порт нуля соответствующая ножка "замыкается" на "землю" ключем, а при выводе единицы - высокий уровень на ножке обеспечивается подтягивающим резистором. Чтобы загорелся светодиод - его включают между ножкой МК и плюсом питания через резистор, при этом светодиод горит при нуле на ножке МК. МК51 ("классика") может обеспечить достаточный для зажигания светодиода ток (и то не на всех портах) только при нуле на ножке МК (втекающий ток). Цитата(Djumper @ Nov 24 2010, 20:39)  TMOD=0x10; //сконфигурировали таймер как 8-битный тамер счётчик??? Устанавливается "режим 1" работы таймера. В этом режиме счет идёт до FFFFh (т.е. шестнадцатибитный счетчик), при переполнении (FFFF -> 0000) устанавливается бит TF1. Цитата(Djumper @ Nov 24 2010, 20:39)  TCON=0xC0; //сконфигурировали регистр управления таймером ... как...??? Устанавливаются биты TF1 и TR1. Imho, эта строка - лишняя: бит TR1 и так устанавливается несколько ниже, а бит TF1 - в данном случае устанавливать как раз и не надо: его появление при переполнении счетчика ожидается в цикле.
|
|
|
|
Сообщений в этой теме
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) 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|