Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры

Войти
Регистрация
Восстановить пароль
 
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 295
#1

[i8051] Реализация ШИМ - Микроконтроллер

04.12.2017, 21:04. Просмотров 221. Ответов 10
Метки нет (Все метки)

К порту P0 микроконтроллера подключена клавиатура. С порта P1.0 выходят сами выходные сигналы. (Порты восьмибитные. Клавиатура "занимает" все 8 бит) ШИМ осуществляется за счет изменения длительности импульса http://www.cyberforum.ru/cgi-bin/latex.cgi?\tau, вводимого с клавиатуры. Импульсы следуют с постоянным периодом 250 мс.
http://www.cyberforum.ru/cgi-bin/latex.cgi?\tau изменяется в диапазонах от 0 до 250 мс.
Микроконтроллер i8051.
Если бы не было ограничения на то, что импульсы следуют с определенным периодом, то я бы решил задачу так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
MOV TMOD,#1100000B; зпаускаем таймер
CLR P1.0; для того, чтобы избежать случайного запуска
MOV TL1,P0;
BEGIN: XRL TL1,#255;инвертируем все биты
INC TL1;теперь у нас есть дополнительный код того, что нам поступило в качестве управляющей команды
далее включаем таймер и генератор импульсов
SETB TR1
SETB P1.0
WAIT: JNB TF1,WAIT
CLR P1.0
MOV TCON,#0;
JMP BEGIN
Но условие, говорящее о том, что импульсы должны генерироваться с определенным периодом сбивает с толку. Была мысль вычитать из 250 величину импульса, который должен быть сгенерирован, чтобы создать задержку, а потом подать новый импульс, но, мне кажется, что это бредовая идея и должен быть более правильный путь решения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2017, 21:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [i8051] Реализация ШИМ (Микроконтроллер):

Реализация умножения и деления в микроконтроллере серии i8051 - Микроконтроллер
Здравствуйте уважаемые пользователи, подскажите, кто может, как реализовано умножение и деление в микроконтроллере серии i8051 (алгоритм,...

МК i8051. Сравнить биты В3 и В7 - Микроконтроллер
Вот условие задачки по которой нужно написать программу: "В считанном байте сравниваются биты В3 и В7. Если они равны то на выход...

Подсчитать количество элементов (i8051) - Микроконтроллер
Помогите написать прогу на ассемьлере под і8051. Задание такое : Подсчитать количество элементов, значение которых лежит в интервале...

Нужен совет с прогой к i8051 - Микроконтроллер
Задание такое: Пусть в памяти программ задан массив значений (беззнаковые числа <256 ). Найти сумму элементов, значение которых нечетное...

Установка периода таймера на 20 мс (i8051) - Микроконтроллер
частота кварца 11,59 МГц #include <reg51.h> sbit SB1 = P3^2; sbit SB2 = P3^3; sbit LED1 = P3^4; sbit LED2 = P3^5; int ttrol=0; ...

Деление двубайтных чисел на i8051 - Микроконтроллер
Доброго! Собственно по сабжу: Необходимо реализовать деление двубайтных чисел в 8-ми битном i8051. Какие есть предложения? Спасибо

10
northener
пофигист широкого профиля
3207 / 2260 / 485
Регистрация: 15.07.2013
Сообщений: 13,213
04.12.2017, 23:34 #2
Поставить таймер на, к примеру, 1мс и заведи счетчик. Каждые 250 тактов счетчик обнуляй и выставляй единицу. При значении счетчика Х выставляй ноль.
0
northener
пофигист широкого профиля
3207 / 2260 / 485
Регистрация: 15.07.2013
Сообщений: 13,213
06.12.2017, 02:16 #3
ТС молчит. Так что позволю себе высказать реплику с неким недоумением.
Господа студенты, изучающие программирование в целом и в частности программирование микропроцессоров/микроконтроллеров. Неужели вам ваши преподы ни разу не упоминали термин "прерывание" (на ненашем языке interrupt)?
Уже не в первый раз за свою недолгую историю в этой конференции я вижу "код троешника"
Assembler
1
WAIT: JNB TF1,WAIT
Код конечно рабочий. Но у меня нет нематерных слов чтобы сказать что я об этом коде думаю.
1
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,443
06.12.2017, 06:06 #4
Цитата Сообщение от northener Посмотреть сообщение
в этой конференции я вижу "код троешника"
на 99% согласен
но есть еще один процент как сделать чтобы процессор "умер" на какое то время?
а это и есть самый простой способ
0
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 295
06.12.2017, 15:35  [ТС] #5
northener, простите пожалуйста, что не ответил Вам вовремя, просто до нельзя замотался.
Вот хотите верьте, хотите нет, но курс изучения программирования микроконтроллера закончился словами: "Прерывания я Вам рассказывать не буду. Нет времени. Не волнуйтесь, на зачете про это спрашивать не буду". Вот так вот всё и было. Именно поэтому я решаю задачи с помощью, так называемых, костылей или, как ещё можно выразиться, в лоб.
0
northener
07.12.2017, 00:44
  #6

Не по теме:

Цитата Сообщение от Генрисон Посмотреть сообщение
Вот хотите верьте, хотите нет
Верю. Очередной никому, кроме администрации учебного заведения, нафиг не нужный курс по программированию.

0
ValeryS
07.12.2017, 08:03
  #7

Не по теме:

Цитата Сообщение от Генрисон Посмотреть сообщение
Вот хотите верьте, хотите нет, но курс изучения программирования микроконтроллера закончился словами:
а вот мой курс программирования не закончился, поскольку не начинался
а вот худо-бедно лет пятнадцать прогаю, есть же книги, даташиты,интернет.....

0
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 295
07.12.2017, 19:48  [ТС] #8
northener, а можно Вас попросить немного разжевать озвученную Вами идею ?
Цитата Сообщение от northener Посмотреть сообщение
Поставить таймер на, к примеру, 1мс и заведи счетчик. Каждые 250 тактов счетчик обнуляй и выставляй единицу.
Я правильно понимаю, что начало программы будет таким же, как и у меня ? То есть, запустим таймер, прочитаем значение с клавиатуры и преобразуем прочитанное в дополнительный код ? А как дальше сделать? Можно ещё какую-нибудь наводящую подсказку ? Просто таким "троечникам", как я, очень трудно понять
0
northener
пофигист широкого профиля
3207 / 2260 / 485
Регистрация: 15.07.2013
Сообщений: 13,213
08.12.2017, 02:02 #9
Цитата Сообщение от Генрисон Посмотреть сообщение
Я правильно понимаю, что начало программы будет таким же, как и у меня ?
Нет. Кроме
Цитата Сообщение от Генрисон Посмотреть сообщение
прочитаем значение с клавиатуры
.
А дальше ответ зависит от того хотите ли вы попробовать познакомиться с прерываниями или хотите улученные костыли.
Я собственно озвучил алгоритм, который наиболее подходит для решения этой задачи. А как его реализовать есть несколько вариантов.
0
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 295
08.12.2017, 21:37  [ТС] #10
northener, в данном случае, к сожалению, придется решать без прерываний, потому что было поставлено такое условие преподавателем. Прошу прощения, что сразу я его не озвучил. Впредь буду осмотрительнее
0
northener
пофигист широкого профиля
3207 / 2260 / 485
Регистрация: 15.07.2013
Сообщений: 13,213
10.12.2017, 11:53 #11
Генрисон, прошу извинить за задержку.
Хотите верьте, хотите нет, но задержала меня работа именно по программированию для 8051.
Вот вам код для ознакомления
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
;               Program PWM
 
Period: EQU     65535-999
 
 
        .DATA
        .ABSOLUTE
        .ORG    30H
Takt:   DB
        .ENDS
 
        .CODE
        .ABSOLUTE
        .ORG    00H
        LJMP    Start
 
        .ORG    30H
        .RELATIVE
Start:  MOV     TMOD,#01H
        MOV     TH0,#>Period
        MOV     TL0,#<Period
        MOV     Takt,#250
        SETB    TR0
 
Loop:   JNB     TF0,Loop
        CLR     TF0
        MOV     TH0,#>Period
        MOV     TL0,#<Period
        MOV     A,Takt
        CJNE    A,P0,$+3
        MOV     P1.0,C
        DEC     A
        JZ      Loop1
        MOV     Takt,A
        SJMP    Loop
Loop1:  MOV     Takt,#250
        SJMP    Loop
 
        END
1
10.12.2017, 11:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2017, 11:53
Привет! Вот еще темы с ответами:

i8051. Программная эмуляция работы устройства - Микроконтроллер
Задание (пункт 3): вот электрическая схема: само устройство:

Сложить попарно элементы массивов [i8051] - Микроконтроллер
Написать в среде Proview 32 программу на Assembler Выполнить попарное сложение 16-разрядных чисел со знаком, содержащихся в двух...

Стробированый ввод и вывод по тетрадам для i8051 - Микроконтроллер
Здравствуйте . У меня. Проблема. как делать вывод тетрадами: младшая тетрада затем старшая тетрада в кодах МК i8051. Ранее я просто не...

Программирование арифметических операций (i8051 Keil uVision) - Микроконтроллер
Переход от двоичного формата к двоично-десятичному (целые числа без знака). Задано двухбайтовое двоичное число. В четырех последовательных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru