Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
1

Какая максимальная прогрешность в моем таймере в MCS-51?

26.05.2014, 02:34. Просмотров 609. Ответов 2
Метки нет (Все метки)

вообщем задача стояла такая, написать програма которая обеспечивает мигание двух светодиодов с разным времени если одна из двух кнопок нажата и частота МК помоему 4000 мгц помоему, ну ето не суть, вопрос вот в чем, мигание должно быть 0,3 с и 0,8с и столько же не мигать и погрешность 0,1с. Я программу написал приложу ее ниже, а преподаватель задал такой вопрос какая максимальная погрешность моей программы, но тоесть я когда делаю проверки мигание время постояно получается разным то 800 240 мс, то 800 350мс и с 0,3 та же история, вот он и спрашивает от чего ето зависит и какая максимальная погрешность может быть, если кто может дайте ответ, ну или же подскажите где можно поискать вопрос на ответ, там например как вбить в гугле, а то сколько искал и по методичке и в интернете ненашол нечего путнего
Текс програмы
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
        bank0           equ     00000000b
        bank1           equ     00010000b
        bank2           equ     00100000b
        bank3           equ     00110000b
        button1         equ     p1.0
        button2         equ     p1.1
        ledgreen        equ     p0.1
        ledred          equ     p0.0
        
        dseg
        org             30h
        timer100ms:     ds      1
        vtimer1:        ds      1
        vtimer2:        ds      1
        vtimer3:        ds      1
        vtimer4:        ds      1
        cseg
        org             0000h
        ljmp            initsystem
        org             000bh
        ljmp            InterruptT0
initsystem:
                ;----------------------- Инициализация переменных в памяти
        MOV     Timer100mS,#10 ;Загрузка для формирования 100mS
        MOV     VTimer1,#0 ;Установка в 0 виртуальных таймеров
        MOV     VTimer2,#0 ;VTimer1, VTimer2, VTimer3, VTimer4
        MOV     VTimer3,#0
        MOV     VTimer4,#0
        ;----------------------- Установка индикаторов
        clr             ledgreen
        clr             ledred
        
        MOV     TMOD,#00000001B
        MOV     TH0,#HIGH(0FFFFH-10000)
        MOV     TL0,#LOW(0FFFFH-10000)
        SETB    TR0
        MOV     SP,#6FH
        ;....................... Настройка "Разрешение прерываний"
        MOV     IE,#10000010B
;----------------------- Переход на основную программу
        LJMP    MainProgram
        
MainProgram:
    nop
;№1===================== Проверка состояния кнопки
DiagnosticButton:
 
    JNB     Button1,OffRedGreen
;№2===================== Проверка VTimer1 (окончания
    DiagnosticVTimer1: ;времени для красного индикатора)
    MOV A,VTimer1
    JNZ DiagnosticVTimer2
    ;№3,4------------------- Время красного индикатора истекло
    CPL ledgreen ;Переключение красного индикатора
    MOV VTimer1,#3 ;Перезагрузка выд.времени кр.индик.
    ;№5===================== Проверка VTimer2 (окончания
DiagnosticVTimer2: ;времени для зеленого индикатора)
    MOV A,VTimer2
    JNZ DiagnosticButton
;№6,7------------------- Время зеленого индикатора истекло
    CPL ledred ;Переключение зеленого индикатора
    MOV VTimer2,#8 ;Перезагрузка выд.времени зел.индик.
    SJMP DiagnosticButton
    ;======================= Кнопка не нажата (сигнал == 0)
    OffRedGreen:
;№8--------------------- Выключение индикаторов
    CLR ledred ;Выключение красного индикатора
    CLR ledgreen ;Выключение зеленого индикатора
;№9--------------------- Останов виртуальных таймеров
    MOV VTimer1,#0 ;Останов VTimer1
    MOV VTimer2,#0 ;Останов VTimer2
    SJMP DiagnosticButton
        
        
;==================================== П/п обработки прерываний T0 ===
InterruptT0:
;№1===================== Сохранение РОН в стеке
    PUSH ACC
    PUSH PSW
    PUSH B
    PUSH DPH
    PUSH DPL
    ;№2..................... Переключение банка РОН
    MOV PSW,#Bank1 ;Уст. активного банка №1
    ;№3===================== Перезагрузка T0 для нового отсчета
    CLR TR0 ;Останов счета таймера
    MOV TH0,#HIGH(0FFFFH-10000+21) ;Загрузка коэф. отсчета
    MOV TL0,#LOW(0FFFFH-10000+21)
    SETB TR0 ;Запуск счета таймера
    ;№4,5=================== Формирование отметчика на 100mS
    DJNZ Timer100mS,EndInterruptT0
    ;----------------------- Отметка времени 100mS
    Point100mS:
    ;№6,7................... Выполняется через каждые 100mS
    MOV Timer100mS,#10 ;Перезагрузка таймера на 100mS
    LCALL VirtualTimer
    ;======================= Выход из п/п InterruptT0
    EndInterruptT0:
    ;#8===================== Восстановление РОН из стека
    POP DPL
    POP DPH
    POP B
    POP PSW
    POP ACC
RETI
 
 
VirtualTimer:
    ;№1--------------------- Обработка виртуального таймера №1
    VT1: MOV A,VTimer1 ;Проверка VTimer1 на 0, и если не
    JZ VT2 ;равен 0, то декремент VTimer1
    ;№2..................... Уменьшение на 1 значения VTimer1
    DEC VTimer1
    ;№3--------------------- Обработка виртуального таймера №2
    VT2: MOV A,VTimer2 ;Проверка VTimer2 на 0, и если не
    JZ VT3 ;равен 0, то декремент VTimer2
    ;№4..................... Уменьшение на 1 значения VTimer1
    DEC VTimer2
    ;№5--------------------- Обработка виртуального таймера №3
    VT3: MOV A,VTimer3 ;Проверка VTimer3 на 0, и если не
    JZ VT4 ;равен 0, то декремент VTimer3
    ;№6..................... Уменьшение на 1 значения VTimer1
    DEC VTimer3
    ;№7--------------------- Обработка виртуального таймера №4
    VT4: MOV A,VTimer4 ;Проверка VTimer4 на 0, и если не
    JZ EndVirtualTimer ;равен 0, то декремент VTimer4
    ;№8..................... Уменьшение на 1 значения VTimer1
    DEC VTimer4
    ;----------------------- Выход из п/п VirtualTimer
EndVirtualTimer:
RET
end
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2014, 02:34
Ответы с готовыми решениями:

Какая максимальная скорость передачи данных у MAX3232??
Вожусь с камерой uCAM-232. На ней стоит микросхема max3232. В даташите камеры написано, что...

Какая максимальная видеокарта подойдет к Xeon e5440
Хочу обновить свою gtx470 на что-то поновее Характеристики: Проц - Xeon е5440 (Разогнан до...

FX-9370: Какая максимальная температура для моего процессора?
имеется AMD FX-9370 4.4 GHz@5GHz при кодировании видео нечего не зависает, нечего не глючит только...

какая максимальная температура должна быть на такой системе?
привет всем.такой вопрос. какая максимальная температура должна быть на такой системе как эта ...

Какая максимальная частота для процессора Athlon X4 635?
Какая максимальная частота для процессора Athlon X4 635?Мне удалось разогнать до 3,4 ГГЦ с...

2
pyzhman
809 / 499 / 70
Регистрация: 15.05.2012
Сообщений: 2,826
26.05.2014, 18:38 2
Цитата Сообщение от итернал Посмотреть сообщение
Я программу написал
Автор программы не может не знать от чего и что у него в программе работает. + к тому комментарии резко отличаются от стиля изложения вашего сообщения. В чём подвох?
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
27.05.2014, 12:33  [ТС] 3
Цитата Сообщение от pyzhman Посмотреть сообщение
Автор программы не может не знать от чего и что у него в программе работает.
я знаю что и как у меня работает, я просто немогу понять почему от переключения до переключения все время проходит разное количество машинных циклов и получается разное время, просто было как бы две задачи с таймерами, первая написать задержку на 3000мкС и там все работает как часы, нужно количество проходов по программе и время, а тут получается погрешность и я немогу понять из-за чего

Цитата Сообщение от pyzhman Посмотреть сообщение
+ к тому комментарии резко отличаются от стиля изложения вашего сообщения. В чём подвох?
нету подвоха, просто в методичке коментариями было показаная примерная как бы структура программы, я взял ее скопировал и дальше писал свою програму, ну было примерно что-то типо
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
;----------------------- Настройка приемопередатчика
NOP
;----------------------- Переопределение вершины стека
NOP
;----------------------- Настройка режима INT0
16
NOP
;----------------------- Настройка режима INT1
NOP
;----------------------- Настройка системы прерываний
;....................... Настройка приоритетов прерываний
NOP
;....................... Настройка «Разрешение прерываний»
NOP
или вы не об етом?

Добавлено через 14 часов 55 минут
тема актуальна
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2014, 12:33

Какая максимальная температура видеокарты Nvidia Geforce Gt 220?
Скажите пожалуйста, какая максимальная температура видеокарты Nvidia Geforce Gt 220. У меня до 90...

Какая максимальная температура у ATI Mobility Radeon HD 5730 1Gb?
Купил ноутбук Asus n61da c этой видяхой, хочу узнать какая максимальная температура у нее?или где...

Как узнать какая дата была в предыдущем месяце максимальная
Всем привет. Как узнать какая дата была в предыдущем месяце максимальная? Добавлено через 2...


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

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

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