0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 4
1

Proteus

23.11.2021, 21:44. Показов 563. Ответов 8

Здравствуйте, могли бы мне помочь проверить код для Proteus?
Задание следующее:
Промоделировать работу схемы, формирующую на выходе разрядов P1.1 и Р1.2 прямоугольные импульсы: ширина импульса tи=5мС, ширина паузы tп=1мС. 10 импульсов на выходе Р1.1, затем 10 импульсов на выходе Р1.2 далее процесс повторяется.
Код следующий:
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
40
41
42
43
Start:  
      MEANDR: MOV TMOD,#00000001B; Настройка T/C0 в таймер, режим 1
GENERATE:     MOV R5,#10 ;Загрузка количества импульсов
          MOV R6,#10 ;
              MOV P1,#00; Обнуление порта 
          MOV P2,#00; Обнуление порта 
GENERATE_1:   SETB P1.1;  Формирование фронта импульса
              CALL DELAY_S; Формирование ширины импульса
              CLR P1.1; Формирование спада импульса
          CALL DELAY_P;
              DJNZ R5,GENERATE_1;  Если не все сформированы,
              CALL DELAY_S
          
GENERATE_2:   SETB P1.2; Формирование фронта импульса
          CALL DELAY_S; Формирование ширины импульса
          CLR P1.2; Формирование спада импульса
              CALL DELAY_P; Формирование паузы
          DJNZ R6,GENERATE_2;  Если не все сформированы,
          CALL DELAY_S
              jmp GENERATE ;
DELAY_S:     MOV TL0,#77H; Загрузка регистра таймера числом 60535 = EC77H (65535 – 5000 = 60535),
              MOV TH0,#0ECH; то до переполнения регистра таймера пройдет ровно 5 мС.
              SETB TR0 ; Включение таймера
          RET;
WAIT_1:       JNB TF0, WAIT_1 ; Дождаться переполнения регистра
              CLR TF0; Сбросить флаг
              CLR TR0; Выключить таймер
              RET ;
DELAY_P:      MOV TL0,#17H; Загрузка регистра таймера числом 64535 = FC17H (65535 – 1000 = 64535),
              MOV TH0,#0FCH; то до переполнения регистра таймера пройдет ровно 1 мС.
              SETB TR0 ; Включение таймера
          RET;
 
WAIT_2:       JNB TF0, WAIT_2 ; Дождаться переполнения регистра
              CLR TF0; Сбросить флаг
              CLR TR0; Выключить таймер
              RET ; 
 
Loop:   
      jmp Loop
 
;====================================================================
      END
На выходе получаем, что размер импульсов равен 5 микросекунд, а пауза 6 микросекунд?
В чем ошибка и как её исправить?
Есть компетентный человек который мог бы обяснить это +- подробно и просто?
Ниже прикрепляю сам проект
Вложения
Тип файла: rar timer.rar (15.0 Кб, 0 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2021, 21:44
Ответы с готовыми решениями:

proteus
установил протеус и был удивлён что часть выводов МК мега16 отсутсвуют Vcc gnd и ещё несколько,...

Proteus либы
Скачал и поставил себе протеус 8.5 все нормально но без библиотек почему то. Зашел в папку...

Проблема с Proteus 7.10
Приветствую. Вот такая проблема, я скачал и установил Proteus 7.10, крякнул как положено и поставил...

Proteus: SP is not initialized
Проблема решилась обновлением proteus до 7.4 SP3 (6792) PC=0x****. SP is not initiotyzed ...

Proteus и отладка на С
Сабж. можно-ли как-то прикрутить к протеусу исходники от AVR студии и т.д. на С. или файл Lss в...

8
977 / 601 / 100
Регистрация: 15.05.2012
Сообщений: 3,550
24.11.2021, 08:03 2
Assembler
1
2
SETB P1.1;  Формирование фронта импульса
              CALL DELAY_S
Согласен. А дальше-то что? Таймер отрабатывает вхолостую.
Assembler
1
WAIT_1
Неиспользуемая подпрограмма. Нафига?
0
Модератор
Эксперт по электронике
8514 / 6329 / 857
Регистрация: 14.02.2011
Сообщений: 21,979
24.11.2021, 08:14 3
Цитата Сообщение от pyzhman Посмотреть сообщение
Таймер отрабатывает вхолостую.
строчки 24 и 32 нужно выкинуть RET здесь не нужен
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 4
24.11.2021, 11:16  [ТС] 4
Цитата Сообщение от pyzhman Посмотреть сообщение
AssemblerВыделить код
1
WAIT_1
Неиспользуемая подпрограмма. Нафига?
Хм, а как поправить, что бы работало и заданные значения совпадали с реальными?

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
строчки 24 и 32 нужно выкинуть RETздесь не нужен
Если его убрать код перестает работать
0
Модератор
Эксперт по электронике
8514 / 6329 / 857
Регистрация: 14.02.2011
Сообщений: 21,979
24.11.2021, 11:45 5
Цитата Сообщение от Yariy_228 Посмотреть сообщение
Если его убрать код перестает работать
почему?
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 4
24.11.2021, 12:59  [ТС] 6
Цитата Сообщение от ValeryS Посмотреть сообщение
почему?
Как-то так:

asem.exe" ­Ґ пў«пҐвбп ў­гв७­Ґ© Ё«Ё ў­Ґи­Ґ©
Є®¬ ­¤®©, ЁбЇ®«­пҐ¬®© Їа®Ја ¬¬®© Ё«Ё Ї ЄҐв­л¬ д ©«®¬.
make: *** [Debug.HEX] Error 1
0
977 / 601 / 100
Регистрация: 15.05.2012
Сообщений: 3,550
24.11.2021, 13:11 7
Цитата Сообщение от Yariy_228 Посмотреть сообщение
как поправить
Я бы засунул всё в прерывания. Надёжно и просто как танк.
Кстати, прерывания и таймер обязательны или лишь бы работало?
0
Модератор
Эксперт по электронике
8514 / 6329 / 857
Регистрация: 14.02.2011
Сообщений: 21,979
24.11.2021, 13:27 8
Цитата Сообщение от Yariy_228 Посмотреть сообщение
Как-то так:
а разобратся с ним?
было
Цитата Сообщение от Yariy_228 Посмотреть сообщение
Assembler
1
2
3
4
5
6
7
8
DELAY_S:     MOV TL0,#77H; Загрузка регистра таймера числом 60535 = EC77H (65535 – 5000 = 60535),
              MOV TH0,#0ECH; то до переполнения регистра таймера пройдет ровно 5 мС.
              SETB TR0 ; Включение таймера
          RET;
WAIT_1:       JNB TF0, WAIT_1 ; Дождаться переполнения регистра
              CLR TF0; Сбросить флаг
              CLR TR0; Выключить таймер
              RET ;
стало
Assembler
1
2
3
4
5
6
7
8
DELAY_S:     MOV TL0,#77H; Загрузка регистра таймера числом 60535 = EC77H (65535 – 5000 = 60535),
              MOV TH0,#0ECH; то до переполнения регистра таймера пройдет ровно 5 мС.
              SETB TR0 ; Включение таймера
   
WAIT_1:       JNB TF0, WAIT_1 ; Дождаться переполнения регистра
              CLR TF0; Сбросить флаг
              CLR TR0; Выключить таймер
              RET ;
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 4
24.11.2021, 14:30  [ТС] 9
Цитата Сообщение от pyzhman Посмотреть сообщение
Кстати, прерывания и таймер обязательны или лишь бы работало?
Нужно, просто, что бы работало и значения на осцилографе соответствовали заданию.

Цитата Сообщение от ValeryS Посмотреть сообщение
а разобратся с ним?
Собственно, я и обратился на форум, что бы компитентные в этом вопросе люди, если имеется свобоные несколько минут жизни, поправили и кратенько объяснили откуда не стыковки и почему не получается ожидаемого результата.
Т.к. мои знаниня стемятся к 0
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2021, 14:30

Сдвиговый регистр в Proteus
Добрый день! Пытаюсь собрать схему в Proteus, проблема с использованием сдвигового регистра 74198:...

Замена PIC32MX775F256H в Proteus
Господа, здравствуйте. Не ругайтесь, пожалуйста, я студент и я учусь. Возможно, вопрос будет...

Диодный мост + proteus
Привет, народ! Вот начал разбираться с электротехникой, в основном в связке с...

Проблемка эмуляции tiny2313 в proteus
Всем привет! Изучаю матчасть, а именно организацию ШИМ на tiny2313. Написал программу, нарисовал...

Помогите разобраться (AD8032+Proteus)....
Толи я совсем дурак, то ли протеус чудит(((( Выбираю ОУ строю на нем схему, а он вообще показывает...


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

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

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