Сообщение от hizam
|
Здравствуйте.
Подскажите пожалуйста, каким образом можно реализовать вывод на 7-и сегментный индикатор текущей даты в программе Multisim?
|
Вот типа такого:
;Clock is 6MHz
;Configuration Word: cp_off, debug_off,flash_written
; eememory_cp_off, lvp_off, boren_off,
; /pwrten_on, wdten_off, fosc_RC.
list p=16F870
__CONFIG 3F33H
;
;specify SFRs
STATUS equ 0x83;
PORTA equ 0x05;
TRISA equ 0x85;
PORTB equ 0x06;
TRISB equ 0x86;
PORTC equ 0x07;
TRISC equ 0x87;
adcon1 equ 0x9f
;
DELAY_500mks equ 73
DELAY_125ms equ 76
DELAY_1s equ 77
memport2 equ 74
on_off equ 75
TIME1 equ 70
TIME2 equ 71
rotation equ 72
;
org 00
;*******************************
; Ports Initialisation
start bcf STATUS, 6
bcf STATUS, 5 ; Остаёмся в банке 0.
;Tuning port A as inputs, B AND C as outputs.
CLRF PORTA ; Initialize PORTA by setting output data latches
bsf STATUS, 5; select bank1
movlw 0x06 ; Configure all pins
MOVWF adcon1 ; as digital inputs
MOVLW 0x3f ; Value used to initialize data direction
MOVWF TRISA ; Set RA‹5:0› as inputs
;TRISA‹7:6› are always read as ‹0›.
; Tuning portsB:
movlw 0x00 ;
movwf TRISB ; B0,B1,B2 AS OUTPUTS, B3-B7 AS INPUTS
; Tuning portsC:
movlw 0x00 ;
movwf TRISC ; all ports C as outputs
bcf STATUS, 5 ; select bank 0
CLRF PORTA;
clrf PORTB;
clrf PORTC;
; Clear variable TIME1, TIME2
CLRF TIME1;
CLRF TIME2;
;*********************************
; main programm starts here
call DELAY500
CALL DELAY500
INCF TIME1, 1;
MOVF TIME1, 0;
SUBLW D'60';
BTFSC STATUS, 0;
CALL ED_SEC;
m1 BCF PORTC, 0; ВКЛЮЧАЕМ ПЕРВЫЙ ИНДИКАТОР.
movlw 0x06; ЦИФРА 1
movwf PORTB;
CALL DELAY500;
CLRF PORTB;
BSF PORTC, 0;
; CALL DELAY500;
BCF PORTC, 1; ВКЛЮЧАЕМ ВТОРОЙ ИНДИКАТОР.
movlw 0x5B; ЦИФРА 2
movwf PORTB;
CALL DELAY500;
CLRF PORTB;
BSF PORTC, 1;
; CALL DELAY500;
BCF PORTC, 2; ВКЛЮЧАЕМ ТРЕТИЙ ИНДИКАТОР
movlw 0x4F; ЦИФРА 3
movwf PORTB;
CALL DELAY500;
CLRF PORTB;
BSF PORTC, 2;
; CALL DELAY500;
ED_SEC BCF PORTC, 3; ВКЛЮЧАЕМ ЧЕТЁРТЫЙ ИНДИКАТОР
movlw 0x3F; ЦИФРА 4
movwf PORTB;
CALL DELAY500;
CLRF PORTB;
BSF PORTC, 3;
; CALL DELAY500;
goto m1;
; 500 mkS delay @ 6 MHz
DELAY500
MOVLW D'250' ; +1cycle
MOVWF DELAY_500mks ; +2cycle
DELAY500_LOOP
DECFSZ DELAY_500mks, 1
GOTO DELAY500_LOOP ;
DELAY500_END
RETURN
;********************
; A DELAY OF 'W'*500mkS.
X_DELAY500
MOVWF DELAY_125ms
X_DELAY500_LOOP
CALL DELAY500 ;WAIT 500mkSec.
DECFSZ DELAY_125ms, 1
GOTO X_DELAY500_LOOP
MOVLW
X_DELAY500_END
RETURN
;****************************
; TABLUES
end
ps: писал на английском и на русском, но думаю понятно.