Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 22:08   #1
INGBI
 
Регистрация: 07.12.2011
Сообщений: 4
Вопрос (Assembler) Реализовать модель часов реального временни

Добрый день! Была задана задача реализовать модель часов реального временни, главное что-бы выводило секунды, минуты и часы (в стиле кепа ну что тут поделаеш) ( можно просто задать начальные значения вроде 15:59:00 и показать что время меняеться) , реализовать для процесорра 8031, при помощи UMPS.
НО! Я пришёл не с пустыми руками(надеюсь):
вот такой вот код реализации вывода секунд и минут:
Код:
     org 0000h                       ;вказівка лічильнику команд 

     clr P2.3			;вмикаємо індикатори 
     mov A,#00h			;заносимо в Р1 значення 0
     mov P1,#00h		;заносимо в A значення 0
     mov b,#00h
        
        start:
        CLR TCON.4 	        ;обнуляєм біт включення таймера
        JNB P2.1, BEGIN		;якщо біт P2.2 встановлено, то перейти
				;на мітку BEGIN
        SJMP START              ;перейти на мітку START
        BEGIN:
        LCALL DELAY		;викликати функцію DELAY
   
        CJNE A,#059H,NEXT	;якщо регістр А дорівнює 099Н, то перейти на 						;мітку NEXT

        PUSH ACC              ;заносимо значення регістру А в стек
        MOV A,B			;помістити значення регістру А в регістр В	
        INC A			;збільшити значення регітсру А на одиницю
        DA A			;виконати двійково-десяткову корекцію 
        MOV B,A			;помістити значення ругітру В в регістр А
        POP ACC			;витягти зі стеку значення регістру А 

        MOV A,#0ffh		;помістити в регістр А значення 0FFh
        
        NEXT:
        clr c			;скинути прапор С
        INC A                   ;збільшити значення регістру А на одиницю
        DA A			;виконати двійкоко-десяткову корекцію 
        JNB P2.2,LOOK_MIN

        MOV P1,A		;помістити значення регістру А в порт Р1
        SJMP START		;перейти на мітку START
        LOOK_MIN:
        MOV P1,B			;помістити значення регістру В порт Р1
        SJMP START		;перейти на мітку START 
        DELAY:
        MOV TH0,#05ah           ;ініціалізуємо старший байт таймера 0                   
        MOV TL0,#0b0h           ;ініціалізуємо молодший байт таймера 0                   
        MOV TMOD,#01            ;встановлюємо тип таймера в 16 розрядний                  
        SETB TCON.4             ;починаємо відлік (включаємо таймер)                   
        SS:
        JB P2.1,START		  ;якщо біт р2.2 встановлено перейти 
					   ;на мітку START 
        JNB TCON.5,SS           ;перевіряємо на переповненість таймера
        CLR TCON.5              ;обнуляєм біт переповнення 
        CLR TCON.4              ;обнуляєм біт включення таймера
        ret				  ;повернення з функції
Изображения
Тип файла: jpg UMPS.jpg (32.8 Кб, 117 просмотров)
Тип файла: jpg UMPS- VAB.jpg (59.2 Кб, 151 просмотров)

Последний раз редактировалось INGBI; 07.12.2011 в 22:40.
INGBI вне форума Ответить с цитированием
Старый 07.12.2011, 22:08   #2
INGBI
 
Регистрация: 07.12.2011
Сообщений: 4
По умолчанию

И да к первому посту: Запускаеться таймер когда SW2 в состоянии ON, А вывод минут происходит при SW1 ON.
Сразу же покажу, как, что выводиться(код, а то как это выглядит видно со 2 картинки в аттаче):
Код:
;**********************************************
;*Vitual Activity Board Test Project
;*DIPS will be output on D0-D7.
;*Traffic Light LEDs sequence.
;*On Reset, Run, if SW1 is on Lamp test will be performed.
;*PB1 adds DIPS binary to 7-seg.
;*PB2 will Add 1 to 7-segment. 
;*SW2 ON will continuoulsy count on 7-Seg
;*      VAB and programming by Martin Hebel, SIUC
;**********************************************

;Establish symbols for program
DIPS     EQU    P0
PB1      EQU    P3.2
PB2      EQU    P3.3
PB3      EQU    P3.4
SW1      EQU    P2.2
SW2      EQU    P2.1
SW3      EQU    P2.0
TRAFFIC  EQU    20h
GREEN    EQU    07h
YELLOW   EQU    06h
RED      EQU    05h

SL_DELAY EQU    TH1
LED_EN   EQU    P2.4
LED_DAT  EQU    00h
SEG_EN   EQU    P2.3
SEG_DAT  EQU    01h
DISP_BUS EQU    P1

ORG 0000h
                LJMP START

;Interrupt Vectors
ORG 0003h       ;External 0
                LJMP ADDDIP2SEG
ORG 00Bh        ;timer/counter 0
                LJMP SEG_COUNT
ORG 0013h       ;external 1
                LJMP SEG_COUNT
ORG 001Bh       ;timer/counter 1
                LJMP TRAFFIC_LT
;Initialize
ORG 100h
START:          MOV SP,#60h
                MOV C,SW1
                JC MAIN
                ACALL LTEST

MAIN:           MOV DISP_BUS, #00h
                SETB IT0
                SETB IT1
                MOV TMOD, #12h 
                MOV TH0, #08h
                MOV TL1, #0FFh
                MOV TH1, #01h
                SETB TR1
                SETB TR0
                SETB ET1
                SETB EX0
                MOV P2, #00h
                SETB RED
                CLR GREEN
                CLR YELLOW
                MOV P2,TRAFFIC
                MOV SEG_DAT, #00
                ACALL SEG_DISPLAY

;main loop
LOOP:           MOV LED_DAT, DIPS
                ACALL LED_DISPLAY
                MOV C, SW2
                MOV EX1,C
                CPL C
                MOV ET0,C
                LJMP LOOP

;Place Dips_bus data on LEDs
LED_DISPLAY:
                CLR IE.7
                MOV DISP_BUS, LED_DAT
                SETB LED_EN
                ACALL DELAY
                CLR LED_EN
                SETB IE.7
                RET

;Place Disp_bus data on 7-segments
SEG_DISPLAY:
                MOV DISP_BUS, SEG_DAT
                CLR SEG_EN
                ACALL DELAY
                SETB SEG_EN
                RET

;Increment 1 on 7-seg
SEG_COUNT:      PUSH ACC
                MOV A, SEG_DAT
                ADD A, #1h
                DA A
                MOV SEG_DAT,A
                ACALL SEG_DISPLAY
                MOV C, SW2
                MOV EX1,C
                CPL C
                MOV ET0,C
                POP ACC
                RETI

;Add DIPs binary to 7-seg
ADDDIP2SEG:
                MOV A, SEG_DAT
                ADD A, DIPS
                DA A
                MOV SEG_DAT,A
                ACALL SEG_DISPLAY
                RETI

;Cycle the traffic lights   
TRAFFIC_LT:     JB RED, TURNGREEN
                JB GREEN, TURNYELLOW

TURNRED:        SETB RED
                CLR YELLOW
                MOV SL_DELAY, #80h 
                SJMP CHANGE

TURNYELLOW:     SETB YELLOW
                CLR GREEN
                MOV SL_DELAY, #0D0h
                SJMP CHANGE

TURNGREEN:      SETB GREEN
                CLR RED
                MOV SL_DELAY, #60h
  
CHANGE:
                PUSH ACC
                MOV A, P2
                ANL A, #00011111b
                ORL A, TRAFFIC
                MOV P2,A
                POP ACC
                RETI

;Perform lamp test                    
LTEST:
                MOV R4, #20h
LAMP_LOOP:      MOV LED_DAT, #0FFh
                SETB SEG_EN
                SETB LED_EN
                ACALL LED_DISPLAY
                MOV P2, #0FFH
                CLR LED_EN
                MOV SEG_DAT, #88h
                MOV DISP_BUS,SEG_DAT
                CLR SEG_EN
                ACALL SEG_DISPLAY
                DJNZ R4, LAMP_LOOP
                RET

;Short delay.  Allows UMPS resources to update
DELAY:          CLR TR0
                MOV R3, #080h
DELAY_LOOP:     DJNZ R3, DELAY_LOOP
                SETB TR0
                RET

Последний раз редактировалось INGBI; 07.12.2011 в 22:10.
INGBI вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сколько часов, минут и секунд прошло от начала суток до поворота часовой стрелки часов на f градусов (нужна блок-схема) lady.ulumba Помощь студентам 5 08.09.2011 15:08
Реализовать на assembler Mr.Steroid Помощь студентам 0 19.11.2010 21:45
реализовать поиск (assembler) Xdron Помощь студентам 0 12.03.2010 23:57
часы показывают m часов, n минут и k секунд. Каковы будут показатели часов через p часов, q минут и r сек Паскалька^^ Помощь студентам 3 11.10.2009 19:41
создание часов Dj_DeVaIs Мультимедиа в Delphi 4 06.04.2009 18:31