Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 62

Таймер для светофора на микропроцессоре intel 8051

09.05.2017, 20:41. Показов 2677. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовать модель светофора, если принять что включение каждой лампы обусловливается «1» на одном из первых трех контактах P1. Использовать прерывание от Т/С 1. Основную программу написал, сейчас проблема в том что не знаю как организовать задержку для каждого из сигналов, потому такое количество секунд не предусмотренно для таймера. Была идея сделать цикл в котором счетчик отсчитывает каждую секунду, а в это время работает таймер на 1 секунду и так для каждого сигнала, то есть например таймер работает на 1 секунду, но он вызывается 50 секунд. К сожалению, уже не могу сообразить как это организовать в своей программе, мозги набекрень от ассемблера, тем более я больше по вебу. Помогите пожалуйста написать)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
;*****************************************************************************
;***   Constants                                                           ***
;*****************************************************************************
F_OSC               EQU         12              ; OSC Frequency, [MHz]
Red         EQU     P1.0
Yellow          EQU     P1.1
Green           EQU     P1.2
;*****************************************************************************
;***   Bit addressable data segment                                        ***
;*****************************************************************************
BSEG
MyBitVar:       DBIT    1               ; Define a bit variable
 
;*****************************************************************************
;***   Byte addressable data segment                                       ***
;*****************************************************************************
DSEG AT 30h
;MyVar:          DS      1               ; Define a single-byte variable
;MyVar32:        DS      4               ; Define a 4-byte variable
 
;*****************************************************************************
;***    Indirect addressable data segment                                  ***
;*****************************************************************************
ISEG AT 60h
Stack:          DS      20h             ; Stack top
 
;*****************************************************************************
;***    Code segment                                                       ***
;*****************************************************************************
CSEG
;*****************************************************************************
;***    Table of interrupt vectors                                         ***
;*****************************************************************************
        ORG     0000h
        LJMP    Start                   ; Power on
        ORG     0003h
        LJMP    Interrupt_0             ; INT0 Interrupt
        ORG     000Bh
        LJMP    Timer_0                 ; Timer/Counter 0 Interrupt
        ORG     0013h
        LJMP    Interrupt_1             ; INT1 Interrupt
        ORG     001Bh
        LJMP    Timer_1                 ; Timer/Counter 1 Interrupt
        ORG     0023h
        LJMP    UART                    ; Serial port Interrupt
 
;*****************************************************************************
;***    INT0 Interrupt                                                     ***
;*****************************************************************************
Interrupt_0:
        RETI                            ; Return from interrupt
 
;*****************************************************************************
;***    Timer/Counter 0 Interrupt                                          ***
;*****************************************************************************
Timer_0:
        RETI                            ; Return from interrupt
 
;*****************************************************************************
;***    INT1 Interrupt                                                     ***
;*****************************************************************************
Interrupt_1:
        RETI                            ; Return from interrupt
 
;*****************************************************************************
;***    Timer/Counter 1 Interrupt                                          ***
;*****************************************************************************
Timer_1:
        clr     TF1
loop:
        djnz        R1, exit
        mov     R1, #50
        djnz        R0, exit
        mov     R0, #50
 
;   Red -> A = 0
;   Red+Yellow -> A = 1
;   Green -> A = 2
;   Yellow -> A = 3
 
;if Green now       
        cjne        A, #2, YR
        setb        Yellow
        clr     Green
        mov     A, #3
 
        jmp     exit
        
;if need Yellow -> Red
YR:     cjne        A, #3, GR
        setb        Red
        clr     Yellow
        mov     A, #0
        jmp     exit
        
;if Yellow + Red now
GR:     cjne        A, #1, RY
        setb        Green
        clr     Red
        clr     Yellow
        mov     A, #2
        jmp     exit
        
;if Red now, it's nessesary to have Red + Yellow
RY:     cjne        A, #0, exit
        setb        Yellow
        mov     A, #1
        jmp     exit
        
exit:       mov     TH1, #high(-16960)
        mov     TL1, #low(-16960)
        cjne A,R2, loop
        RETI                            ; Return from interrupt
 
;*****************************************************************************
;***    Serial port Interrupt                                              ***
;*****************************************************************************
UART:
        RETI                            ; Return from interrupt
 
;*****************************************************************************
;***    Power on                                                           ***
;*****************************************************************************
Start:
        mov     P1, 0
        setb        P1.0
        mov     A, 0
        mov     R0, #50
        mov     R1, #50
        mov     TH1, #high(-16960)
        mov     TL1, #low(-16960)
        mov     TMOD, #001bh
        
        setb    ET1
        setb    EA
        setb    TR1
    
        LJMP    $                       ; Endless loop
 
        END                             ; End of file
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2017, 20:41
Ответы с готовыми решениями:

Не получается реализовать таймер для этого светофора
Не могу понять, как сделать в таймере два цикла: первый цикл - сначала должен гореть красный, потом включается желтый(красные горит вместе...

Найти невозможные или ошибочные команды на Ассемблере для микроконтроллера Intel 8051
Пожалуйста, срочно нужно Найти невозможные или ошибочные команды на Ассемблере для микроконтроллера Intel 8051 JC 23H AJMP RR IE:...

(Intel 8051) Устройство сбора информации для определения текущего значения методом двухтактного интегрирования
Подскажите пожалуйста: необходимо разработать устройство сбора информации на основе микропроцессора для определения текущего значения...

3
1184 / 673 / 113
Регистрация: 15.05.2012
Сообщений: 4,085
10.05.2017, 10:44
;*************************************** **************************************
;*** Timer/Counter 1 Interrupt ***
;*************************************** **************************************
если Время, то Время--;
иначе
{//прошла 1 сек
Время= N;
// управляем цветами
}
0
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,078
10.05.2017, 22:29
Цитата Сообщение от PaFrCh Посмотреть сообщение
сейчас проблема в том что не знаю как организовать задержку для каждого из сигналов, потому такое количество секунд не предусмотренно для таймера.
Так у вас это уже сделано программным методом:
Assembler
1
2
3
4
5
loop:
     djnz      R1, exit
     mov       R1, #50
     djnz      R0, exit
     mov       R0, #50
Сначала в 50 раз увеличивается задержка, и дальше еще в 50 раз. В 2500 получается.
0
1184 / 673 / 113
Регистрация: 15.05.2012
Сообщений: 4,085
11.05.2017, 08:01
Цитата Сообщение от paskal Посмотреть сообщение
сделано
Засада в том, что не определен регистр R2 на выходе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2017, 08:01
Помогаю со студенческими работами здесь

таймер прерывания 8051
Здравствуйте такой вопрос #загрузка указателя 0006 0200: 90 03 00 p: MOV DPTR,#300H #Сброс аккумулятора ...

Intel 8051
1 В сегменте CODE помещена строка-константа неопределенной длины, но для строки задан конечный символ, например, “This is long string...

Intel 8051 - pinnacle
Задача: МП контроллер сейфа Код замка от 0000 до 9999 Установка кода по последовательному каналу с центрального пульта охраны (ЦПО). ...

Intel 8051. УСАПП
Добрый вечер, может быть кто нибудь показать как реализуется УСАПП с асинхронным режимом. Не понимаю как сделать чтобы усапп тактировался...

Работа со стеками intel 8051
1 Реализовать программу. Пользователь устанавливает в Р0 некоторое число N. Программа должна занести в стек натуральные числа от 1 до N....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru