|
Подскажите начинающему, 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, 06:29
|

Гуру
     
Группа: Свой
Сообщений: 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>
|
|
|
|
Сообщений в этой теме
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 25 2010, 13:29) Код#in... Nov 29 2010, 11:42 Палыч Цитата(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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|