С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 298
1

[i8051] Реализация ШИМ

04.12.2017, 21:04. Просмотров 354. Ответов 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
Поставлена задача : реализовать задержку в 50 секунд на микроконтроллере i8051....

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

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

Нужен совет с прогой к i8051
Задание такое: Пусть в памяти программ задан массив значений (беззнаковые числа...

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

10
northener
пофигист широкого профиля
3429 / 2328 / 631
Регистрация: 15.07.2013
Сообщений: 13,796
04.12.2017, 23:34 2
Поставить таймер на, к примеру, 1мс и заведи счетчик. Каждые 250 тактов счетчик обнуляй и выставляй единицу. При значении счетчика Х выставляй ноль.
0
northener
пофигист широкого профиля
3429 / 2328 / 631
Регистрация: 15.07.2013
Сообщений: 13,796
06.12.2017, 02:16 3
ТС молчит. Так что позволю себе высказать реплику с неким недоумением.
Господа студенты, изучающие программирование в целом и в частности программирование микропроцессоров/микроконтроллеров. Неужели вам ваши преподы ни разу не упоминали термин "прерывание" (на ненашем языке interrupt)?
Уже не в первый раз за свою недолгую историю в этой конференции я вижу "код троешника"
Assembler
1
WAIT: JNB TF1,WAIT
Код конечно рабочий. Но у меня нет нематерных слов чтобы сказать что я об этом коде думаю.
1
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,952
06.12.2017, 06:06 4
Цитата Сообщение от northener Посмотреть сообщение
в этой конференции я вижу "код троешника"
на 99% согласен
но есть еще один процент как сделать чтобы процессор "умер" на какое то время?
а это и есть самый простой способ
0
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 298
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
Сообщений: 298
07.12.2017, 19:48  [ТС] 8
northener, а можно Вас попросить немного разжевать озвученную Вами идею ?
Цитата Сообщение от northener Посмотреть сообщение
Поставить таймер на, к примеру, 1мс и заведи счетчик. Каждые 250 тактов счетчик обнуляй и выставляй единицу.
Я правильно понимаю, что начало программы будет таким же, как и у меня ? То есть, запустим таймер, прочитаем значение с клавиатуры и преобразуем прочитанное в дополнительный код ? А как дальше сделать? Можно ещё какую-нибудь наводящую подсказку ? Просто таким "троечникам", как я, очень трудно понять
0
northener
пофигист широкого профиля
3429 / 2328 / 631
Регистрация: 15.07.2013
Сообщений: 13,796
08.12.2017, 02:02 9
Цитата Сообщение от Генрисон Посмотреть сообщение
Я правильно понимаю, что начало программы будет таким же, как и у меня ?
Нет. Кроме
Цитата Сообщение от Генрисон Посмотреть сообщение
прочитаем значение с клавиатуры
.
А дальше ответ зависит от того хотите ли вы попробовать познакомиться с прерываниями или хотите улученные костыли.
Я собственно озвучил алгоритм, который наиболее подходит для решения этой задачи. А как его реализовать есть несколько вариантов.
0
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 298
08.12.2017, 21:37  [ТС] 10
northener, в данном случае, к сожалению, придется решать без прерываний, потому что было поставлено такое условие преподавателем. Прошу прощения, что сразу я его не озвучил. Впредь буду осмотрительнее
0
northener
пофигист широкого профиля
3429 / 2328 / 631
Регистрация: 15.07.2013
Сообщений: 13,796
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
Доброго! Собственно по сабжу: Необходимо реализовать деление двубайтных чисел в...

Установка периода таймера на 20 мс (i8051)
частота кварца 11,59 МГц #include &lt;reg51.h&gt; sbit SB1 = P3^2; sbit SB2 = P3^3;...

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


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

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

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