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

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

09.05.2017, 20:41. Показов 2661. Ответов 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 / 670 / 113
Регистрация: 15.05.2012
Сообщений: 4,078
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 / 670 / 113
Регистрация: 15.05.2012
Сообщений: 4,078
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru