; LE 22/08/1997 ; Edited with PFE and assembled with MPASM ; Tristan@Club-Internet.fr or F1CJN @ F6KBF.FRPA (by packet radio) ; 5*7 new routines ; 7 characters visible scrolling long text on upper line, yes the pic do it ! ; 8 Grey level bars in the middle of the screen ; 4 digits clock in the bottom ; setup of the clock with two push buttons ; the 625 lines TV screen looks like this ; By Alain FORT and Peter KNIGHT ; Free for public domain by Internet ; ; ************* ; * T E X T * this line is scrolling to the left ; * grey bars * ; * 12:00 * (This is the clock) ; ************* ; ; TITLE "PICDREAM" LIST P=16F84A ; 16F84A Runs at 4 MHz INCLUDE "p16f84a.inc" __CONFIG _PWRTE_ON & _XT_OSC & _WDT_OFF ; uses 4 MHz crystal ERRORLEVEL -224 ; supress annoying message from tris ERRORLEVEL -302 ; supress message from page change ;#Define W 0 ;#Define F 1 cblock 0x0C Delay Count Count2 Count3 SubSec ; HrT ; HrU ;; MiT ; MiU ; SeU ;clock registers CA0 CA1 CA2 CA3 CA4 CA5 CA6 ;caracters pointers Ta0 Ta1 Ta2 Ta3 Ta4 Ta5 Ta6 TNB TNB1 ;caracter lines pointers Ptrtxt ;text pointer PtrtxtS ;text pointer DD ENDC ; Page 1 registers Roption EQU 01H RAMbase EQU 0CH #define Sync PORTA,0 ; Synchro out at RA0 (PIN 17) ; DNOP - Double NOP. Delay of 2 cycles, takes only one instruction DNOP MACRO LOCAL Label Label GOTO Label+1 ENDM ; Delay3W - Delay 3 * W cycles, three instructions Delay3W MACRO LOCAL Label MOVWF Delay Label DECFSZ Delay,F GOTO Label ENDM SKIPCC MACRO BTFSC STATUS,C ENDM SKIPNZ MACRO BTFSC STATUS,Z ENDM ;----------------------------------------------------------------- ;----------------------------------------------------------------- ORG 0 CLRF Ptrtxt ;RAZ text pointer if end of scroll CLRF PtrtxtS GOTO Main ORG 4 retfie ; Table of caracters Table ADDWF PCL,F Tbase equ $ Car0 equ $-Tbase CarO equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. Car1 equ $-Tbase RETLW B'00000100' ; .....*.. RETLW B'00001100' ; ....**.. RETLW B'00000100' ; .....*.. RETLW B'00000100' ; .....*.. RETLW B'00000100' ; .....*.. RETLW B'00000100' ; .....*.. RETLW B'00001110' ; ....***. Car2 equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00000001' ; .......* RETLW B'00000010' ; ......*. RETLW B'00000100' ; .....*.. RETLW B'00001000' ; ....*... RETLW B'00011111' ; ...***** Car3 equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ;....*...* RETLW B'00000001' ; .......* RETLW B'00000110' ; .....**. RETLW B'00000001' ; .......* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. Car4 equ $-Tbase RETLW B'00000010' ; ......*. RETLW B'00000110' ; .....**. RETLW B'00001010' ; ....*.*. RETLW B'00010010' ; ...*..*. RETLW B'00011111' ; ...***** RETLW B'00000010' ; ......*. RETLW B'00000010' ; ......*. Car5 equ $-Tbase RETLW B'00011111' ; ...***** RETLW B'00010000' ; ...*.... RETLW B'00011110' ; ...****. RETLW B'00000001' ; .......* RETLW B'00000001' ; .......* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. Car6 equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010000' ; ...*.... RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. Car7 equ $-Tbase RETLW B'00011111' ; ...***** RETLW B'00000001' ; .......* RETLW B'00000001' ; .......* RETLW B'00000010' ; ......*. RETLW B'00000010' ; ......*. RETLW B'00000100' ; .....*.. RETLW B'00000100' ; .....*.. Car8 equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. Car9 equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00001111' ; ....**** RETLW B'00000001' ; .......* RETLW B'00010001' ; ...*...* RETLW B'00001110' ; ....***. CarSP equ $-Tbase RETLW B'00000000' ; ........ RETLW B'00000000' ; ........ RETLW B'00000000' ; ........ CarDot equ $-Tbase RETLW B'00000000' ; ........ RETLW B'00000000' ; ........ RETLW B'00000000' ; ........ RETLW B'00000000' ; ........ RETLW B'00000000' ; ........ RETLW B'00011000' ; ...**... RETLW B'00011000' ; ...**... CarA equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00011111' ; ...***** CarW equ $-Tbase RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010101' ; ...*.*.* RETLW B'00011011' ; ...**.** RETLW B'00010001' ; ...*...* CarB equ $-Tbase RETLW B'00011110' ; ...****. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00011110' ; ...****. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00011110' ;....****. CarS equ $-Tbase RETLW B'00001110' ; ....***. RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00001110' ; ....***. RETLW B'00000001' ; .......* RETLW B'00010001' ; ...*...* CarC equ $-Tbase RETLW B'00011110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* CarG equ $-Tbase RETLW B'00011110' ; ....***. RETLW B'00010001' ; ...*...* RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00010011' ; ...*..** RETLW B'00010001' ; ...*...* RETLW B'00001110' ;.....***. CarR equ $-Tbase RETLW B'00011110' ; ...****. RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00011110' ; ...****. CarH equ $-Tbase RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00011111' ; ...***** RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* CarL equ $-Tbase RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00010001' ; ...*...* CarE equ $-Tbase RETLW B'00011111' ; ...***** RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00011100' ; ...***.. RETLW B'00010000' ; ...*.... RETLW B'00010000' ; ...*.... RETLW B'00011111' ; ...***** CarN equ $-Tbase RETLW B'00010001' ; ...*...* RETLW B'00011001' ; ...**..* RETLW B'00010101' ; ...*.*.* RETLW B'00010101' ; ...*.*.* RETLW B'00010101' ; ...*.*.* RETLW B'00010011' ; ...*..** CarM equ $-Tbase RETLW B'00010001' ; ...*...* RETLW B'00011011' ; ...**.** RETLW B'00010101' ; ...*.*.* RETLW B'00010101' ; ...*.*.* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* RETLW B'00010001' ; ...*...* ;----------------------------------------------------------------- ;----------------------------------------------------------------- Main BSF STATUS,RP0 ; addressing bank 1 MOVLW B'10000' MOVWF TRISA MOVLW B'11000000' MOVWF TRISB ;ports B as outputs except RB7 and RB6 BCF STATUS,RP0 ;addressing bank 0 for the rest of the program BCF Roption,7 ;we need the integrated pull-up resistors bcf INTCON,0 ;INt on inputs 4,5,6,7 change bcf INTCON,1 ;clear INT flag bsf INTCON,3 ;RBIE bcf INTCON,5 ;TMR0 disabled bcf INTCON,6 ; DISABLE INT interrupts bCf INTCON,7 ;enable Global interrupts ; CLRF SeU ;Initialisation clock at 00.00 ; CLRF MiU ; CLRF MiT ; CLRF HrU ; CLRF HrT CLRF Delay CLRF Count CLRF Count2 CLRF Count3 CLRF SubSec CLRF CA0 CLRF CA1 CLRF CA2 CLRF CA3 CLRF CA4 CLRF CA5 CLRF CA6 ;caracters pointers CLRF Ta0 CLRF Ta1 CLRF Ta2 CLRF Ta3 CLRF Ta4 CLRF Ta5 CLRF Ta6 CLRF TNB CLRF TNB1 ;caracter lines pointers CLRF Ptrtxt ; CLRF DD ; Frame starts here. ; ; Frame must be exactly 312.5 Lignes long, each Ligne 64 cycles. ; That ensures frame rate of exactly 50Hz to crystal accuracy. ;5 Long Equalisation pulses ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- Frame ;Main Loop BCF Sync ;30us Sync DNOP MOVLW 6 MOVWF Count Loop1 MOVLW 8 Delay3W BSF Sync ;2us Black NOP BCF Sync ;30us Sync NOP DECFSZ Count,F GOTO Loop1 MOVLW 8 Delay3W NOP BSF Sync ;2us Black NOP ; Now 5 short equalisation pulses, 4 on interlace BCF Sync ;2us Sync NOP BSF Sync ;30us Black MOVLW 6 BTFSC SubSec,0 ;on interlace (SubSec odd) MOVLW 5 MOVWF Count Loop2 MOVLW 8 ; 8 8 8 8 Delay3W ;32 32 32 32 BCF Sync ; 1 1 1 1 ;2us Sync NOP ; 2 2 2 2 BSF Sync ; 3 3 3 3 ;30us Black NOP ; 4 4 4 4 DECFSZ Count,F ; - - - - GOTO Loop2 ; 7 7 7 CLRF TNB ;RAZ de TBN a chaque trame MOVLW 8 Delay3W ; 304 visible Lines ; 41 black Lines BCF Sync MOVLW D'30' CALL BlkLns ; **** INIT TEXTE ****** line 15 BCF Sync Call Preptxt3 ; **** INIT TEXTE CONTINUED ****** line 18 BCF Sync Call Preptxt4 ;********** DISPLAY TEXTE ********* ( + 60 lines) = 78 BCF Sync CALL DisTxt ; 15 black lines = 118 BCF Sync MOVLW D'5' CALL BlkLns ; ***** GREY BARS ***** 60 lines = 138 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;line 10 148 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 20 158 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 30 168 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 40 178 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 50 188 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 60 198 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 70 208 BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE BCF Sync CALL BARRE ;Line 74 212 ; BCF Sync ; CALL BARRE ; BCF Sync ; CALL BARRE ; BCF Sync ; CALL BARRE ; BCF Sync ; CALL BARRE ;***** 14 BLACK LINES =192 ***** 202 BCF Sync MOVLW D'5' CALL BlkLns ;***** KEYS TEST 1 line = 193 ***** 203 ; BCF Sync ;Line 54 ; CALL TOUCHE BTFSS PORTB,6 goto SecondTextbottom BCF Sync Call Preptxt5 ; **** INIT TEXTE CONTINUED ****** line 18 BCF Sync Call Preptxt6 goto FirstTextbottom ;***** PREPARE CLOCK = 194 ***** 204 ; BCF Sync ;Line 54 ; CALL PREPH ;***** DISPLAY CLOCK = 254 ***** (this takes 60 Lignes) 264 SecondTextbottom BCF Sync CLRF PtrtxtS Call Preptxt7 ; **** INIT TEXTE CONTINUED ****** line 18 BCF Sync Call Preptxt8 FirstTextbottom BCF Sync CALL DisTxt ;Increment time BCF Sync INCF SubSec,f ;Increment 1/50th sec MOVLW -D'50' ADDWF SubSec,W ;Carry now set if second has expired BSF Sync SKIPCC ;Zero SubSec if =50 CLRF SubSec ; ***** 489 BLACK LINES = 304 ***** BCF Sync ;;5us Sync MOVLW D'10' CALL BlkLns ; insert half Ligne here on interlace ; Now 5 short equalisation pulses ; prefixed by half video Ligne on interlace ; Slight bodge of CCIR/PAL - the half Ligne segment is actually a short eq pulse BCF Sync ;2us Sync NOP BSF Sync ;30us Black MOVLW 6 BTFSS SubSec,0 MOVLW 5 MOVWF Count Loop6 MOVLW 8 ; 8 8 8 8 Delay3W ;32 32 32 32 BCF Sync ; 1 1 1 1 ; 2us Sync NOP ; 2 2 2 2 BSF Sync ; 3 3 3 ; 30us Black NOP ; 4 4 4 4 DECFSZ Count,F ; - - - - GOTO Loop6 ; 7 7 7 MOVLW 7 Delay3W DNOP ; CLRF Ptrtxt ;RAZ text pointer if end of scroll ; CLRF PCLATH ;RAZ PClath for reading lire caracters table page at page 0 ; CLRF TNB ;TNB initialisation GOTO Frame ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ; Delay routines Delay6 NOP Delay5 NOP Delay4 RETURN ; Some black Lignes BlkLns ADDLW -1 BSF Sync ;59us black MOVWF Count DNOP Loop5 MOVLW D'17' ; 1 1 1 1 MOVWF Delay ; 1 1 1 1 LoopD9 DECFSZ Delay,F ;18 18 18 18 GOTO LoopD9 ;32 32 32 32 NOP ; 1 1 1 1 DNOP ; 2 2 2 2 BCF Sync ; 1 1 1 1 ;5us Sync CALL Delay4 ; 4 4 4 4 BSF Sync ; 1 1 1 1 ;59us Black DECFSZ Count,F ; 1 1 1 2 GOTO Loop5 ; 2 2 2 NOP MOVLW D'17' Delay3W NOP RETURN ;Display ; Call immediately after BCF Sync, takes 60 Ligne periods DisTxt DNOP BSF Sync MOVLW D'19' ;delai=57 Delay3W BCF Sync MOVLW D'2' CALL BlkLns BCF Sync ;+1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 12 is black, + 1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 20 is black, +1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 28 is black,+1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 36 is black, +1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 44 is black, +1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 52 is black, +1 for caracters line CALL INCLIN BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync CALL Showline BCF Sync ;Line 60 GOTO Showline Showline MOVF TNB1,W ;old TNB (without plus one) ADDWF CA6,W ;Incline (continued), seventh caracter preparation BSF Sync CALL Table MOVWF Ta6 MOVF Ta0,W ;CHarac 1 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB MOVF Ta1,W ;CHarac 2 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB MOVF Ta2,W ;CHarac 3 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB MOVF Ta3,W ;CHarac 4 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB MOVF Ta4,W ;CHarac 5 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB MOVF Ta5,W ;CHarac 6 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB ;Put 0 ( black video between 2 caracters) MOVF Ta6,W ;CHarac 7 MOVWF PORTB RLF PORTB,F RLF PORTB,F RLF PORTB,F RLF PORTB,F CLRF PORTB ;no more room for any NOP RETURN ;----------------------------------------------------------------- Preptxt3 DNOP BSF Sync MOVF SubSec,w ANDLW B'00000001' ; SKIPNZ ; GOTO GT4 ; MOVLW D'16' ; ADDWF Count3,F ; SKIPNZ ; INCF Ptrtxt,F ; GOTO GT5 GT4 CALL Delay4 NOP GT5 MOVLW HIGH Texte ;prepare to read the text page at 3C0 ; INCF DD,F MOVWF PCLATH MOVF Ptrtxt,W ;first caracter CALL Texte MOVWF CA0 INCF Ptrtxt,F MOVF Ptrtxt,W ;Second caracter CALL Texte MOVWF CA1 INCF Ptrtxt,F MOVF Ptrtxt,W ;Third caracter CALL Texte MOVWF CA2 INCF Ptrtxt,F MOVF Ptrtxt,W ;Fourth caracter CALL Texte MOVWF CA3 INCF Ptrtxt,F MOVLW D'2' Delay3W ;equ 6 cycles NOP RETURN ;----------------------------------------------------------------- Preptxt4 DNOP BSF Sync MOVF Ptrtxt,W ;Fith caracter CALL Texte MOVWF CA4 INCF Ptrtxt,F MOVF Ptrtxt,W ;Sixth caracter CALL Texte MOVWF CA5 INCF Ptrtxt,F MOVF Ptrtxt,W ;Seventh caracter CALL Texte MOVWF CA6 MOVLW D'7' Delay3W ;equ 21 MOVLW -D'6' ;plus 6 for a one caracter shift ADDWF Ptrtxt,F MOVF Ptrtxt,W ADDLW -(FTexte-ETexte); compar to text length SKIPCC CLRF Ptrtxt ;RAZ text pointer if end of scroll CLRF PCLATH ;RAZ PClath for reading lire caracters table page at page 0 CLRF TNB ;TNB initialisation RETURN ;----------------------------------------------------------------- Preptxt5 ; DNOP BSF Sync MOVF SubSec,w ANDLW B'00000001' SKIPNZ GOTO GT6 BTFSC PORTB,7 GOTO NOSCROLL MOVLW D'16' ADDWF Count3,F SKIPNZ INCF PtrtxtS,F GOTO GT7 GT6 CALL Delay4 NOP NOSCROLL GT7 MOVLW HIGH CTexte ;prepare to read the text page at 3C0 ; INCF DD,F MOVWF PCLATH MOVF PtrtxtS,W ;first caracter CALL CTexte MOVWF CA0 INCF PtrtxtS,F MOVF PtrtxtS,W ;Second caracter CALL CTexte MOVWF CA1 INCF PtrtxtS,F MOVF PtrtxtS,W ;Third caracter CALL CTexte MOVWF CA2 INCF PtrtxtS,F MOVF PtrtxtS,W ;Fourth caracter CALL CTexte MOVWF CA3 INCF PtrtxtS,F MOVLW D'2' Delay3W ;equ 6 cycles NOP RETURN ;----------------------------------------------------------------- Preptxt6 DNOP BSF Sync MOVF PtrtxtS,W ;Fith caracter CALL CTexte MOVWF CA4 INCF PtrtxtS,F MOVF PtrtxtS,W ;Sixth caracter CALL CTexte MOVWF CA5 INCF PtrtxtS,F MOVF PtrtxtS,W ;Seventh caracter CALL CTexte MOVWF CA6 MOVLW D'7' Delay3W ;equ 21 MOVLW -D'6' ;plus 6 for a one caracter shift ADDWF PtrtxtS,F MOVF PtrtxtS,W ADDLW -(FTexte-FTexte); compar to text length SKIPCC CLRF PtrtxtS ;RAZ text pointer if end of scroll CLRF PCLATH ;RAZ PClath for reading lire caracters table page at page 0 CLRF TNB ;TNB initialisation RETURN ;----------------------------------------------------------------- Preptxt7 DNOP BSF Sync MOVF SubSec,w ANDLW B'00000001' ; SKIPNZ GOTO GT8 ; MOVLW D'16' ; ADDWF Count3,F ; SKIPNZ ; INCF Ptrtxt,F ; GOTO GT9 GT8 CALL Delay4 NOP GT9 MOVLW HIGH HTexte ;prepare to read the text page at 3C0 ; INCF DD,F MOVWF PCLATH MOVF Ptrtxt,W ;first caracter CALL HTexte MOVWF CA0 INCF Ptrtxt,F MOVF Ptrtxt,W ;Second caracter CALL HTexte MOVWF CA1 INCF Ptrtxt,F MOVF Ptrtxt,W ;Third caracter CALL HTexte MOVWF CA2 INCF Ptrtxt,F MOVF Ptrtxt,W ;Fourth caracter CALL HTexte MOVWF CA3 INCF Ptrtxt,F MOVLW D'2' Delay3W ;equ 6 cycles NOP RETURN ;----------------------------------------------------------------- Preptxt8 DNOP BSF Sync MOVF Ptrtxt,W ;Fith caracter CALL HTexte MOVWF CA4 INCF Ptrtxt,F MOVF Ptrtxt,W ;Sixth caracter CALL HTexte MOVWF CA5 INCF Ptrtxt,F MOVF Ptrtxt,W ;Seventh caracter CALL HTexte MOVWF CA6 MOVLW D'7' Delay3W ;equ 21 MOVLW -D'6' ;plus 6 for a one caracter shift ADDWF Ptrtxt,F MOVF Ptrtxt,W ADDLW -(HTexte-ITexte); compar to text length SKIPCC CLRF Ptrtxt ;RAZ text pointer if end of scroll CLRF PCLATH ;RAZ PClath for reading lire caracters table page at page 0 CLRF TNB ;TNB initialisation RETURN ;----------------------------------------------------------------- INCLIN MOVF TNB,W ;Computing the table input address MOVWF TNB1 BSF Sync ;and store in Ta0 to Ta5 registers NOP MOVF TNB,W ADDWF CA0,W ;Add TNB to result CALL Table ;Call line number NB MOVWF Ta0 ;Table in TA0 MOVF TNB,W ADDWF CA1,W CALL Table MOVWF Ta1 MOVF TNB,W ADDWF CA2,W CALL Table MOVWF Ta2 MOVF TNB,W ADDWF CA3,W CALL Table MOVWF Ta3 MOVF TNB,W ADDWF CA4,W CALL Table MOVWF Ta4 MOVF TNB,W ADDWF CA5,W CALL Table MOVWF Ta5 INCF TNB,F ;the (Ta6) is in the Showline routine !! RETURN ;----------------------------------------------------------------- BARRE DNOP ;Grey for outputs RA1 RA2 RA3 BSF Sync MOVLW B'10000' ; Outputs Activation RA1 RA2 RA3 on portA TRIS PORTA MOVLW D'1' ;Only even numbers (for sync='1') MOVWF PORTA CALL Delay4 CALL Delay4 MOVLW D'3' MOVWF PORTA CALL Delay4 MOVLW D'5' MOVWF PORTA CALL Delay4 MOVLW D'7' MOVWF PORTA CALL Delay4 MOVLW D'9' MOVWF PORTA CALL Delay4 MOVLW D'11' MOVWF PORTA CALL Delay4 MOVLW D'13' MOVWF PORTA CALL Delay4 MOVLW D'15' MOVWF PORTA CALL Delay4 MOVLW B'11110' ;Ouput in tristate (except sync) on Port A TRIS PORTA RETURN ;----------------------------------------------------------------- Org 3A0 Texte ADDWF PCL,F RETLW CarW RETLW CarB RETLW Car8 RETLW CarL RETLW CarG RETLW CarA ETexte; equ $-6 ; necessairy for scrolling 7 caracters on the screen RETLW CarSP CTexte ADDWF PCL,F RETLW CarM RETLW CarA RETLW CarR RETLW CarE RETLW CarN RETLW CarG RETLW CarO RETLW CarSP RETLW CarC RETLW CarH RETLW CarA RETLW CarR RETLW CarL RETLW CarE RETLW CarS RETLW CarSP RETLW Car1 RETLW Car4 RETLW Car7 RETLW CarDot RETLW Car4 RETLW Car5 RETLW CarSP RETLW CarSP RETLW CarSP RETLW CarSP FTexte; equ $-6 ; necessairy for scrolling 7 caracters on the screen RETLW CarSP HTexte ADDWF PCL,F RETLW CarC RETLW CarH RETLW CarA RETLW CarR RETLW CarL RETLW CarE RETLW CarS ITexte; equ $-6 ; necessairy for scrolling 7 caracters on the screen RETLW CarSP RETLW CarSP RETLW CarSP RETLW CarSP RETLW CarSP END ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- ;----------------------------------------------------------------- TOUCHE DNOP BSF Sync MOVF PORTB,w ;reading PortB XORLW B'11111111' ;compare with before which was '1' due to the pull-up loads ANDLW B'11000000' ;mask for RB7 et RB6 BTFSC STATUS,Z ;zero set=no buttons GOTO RT2 ;out if no key press INCFSZ Count2,F ;delay (with frame counter) if a key at 1 GOTO RT1 BTFSC PORTB,7 ;minutes button test INCF MiU,F BTFSC PORTB,6 ;hours button test INCF HrU,F MOVLW D'236' ; Wait a while MOVWF Count2 GOTO RT3 RT2 MOVLW D'236' MOVWF Count2 RT1 CALL Delay4 CALL Delay4 RT3 MOVLW D'13' Delay3W return ;----------------------------------------------------------------- PREPH DNOP ;Clock BSF Sync BCF STATUS,C MOVLW D'80' ;First caracter is space (black) MOVWF CA0 MOVF HrT,W ;Hours Tens MOVWF CA1 RLF CA1,F ;multiply by 7 for table access RLF CA1,F ADDWF CA1,F ADDWF CA1,F ADDWF CA1,F MOVF HrU,W ;HOURs Units MOVWF CA2 RLF CA2,F ; multiply by 7 for table access RLF CA2,F ADDWF CA2,F ADDWF CA2,F ADDWF CA2,F MOVLW D'70' BTFSC SeU,0 ;parity test for seconds ADDLW D'5' MOVWF CA3 ;result = 70 or 75 MOVF MiT,W ;Minutes Tens MOVWF CA4 RLF CA4,F ;multiply by 7 for table access RLF CA4,F ADDWF CA4,F ADDWF CA4,F ADDWF CA4,F MOVF MiU,W ;Minutes Units MOVWF CA5 RLF CA5,F ;multiply by 7 for table access RLF CA5,F ADDWF CA5,F ADDWF CA5,F ADDWF CA5,F MOVLW D'80' MOVWF CA6 ;Last caracter is a space MOVLW D'5' Delay3W ;eq (15) DNOP CLRF TNB RETURN RETLW CarM RETLW CarA RETLW CarR RETLW CarE RETLW CarN RETLW CarG RETLW CarO ;Increment time BCF Sync INCF SubSec,F ;Increment 1/50th sec MOVLW -D'50' ADDWF SubSec,W ;Carry now set if second has expired BSF Sync SKIPCC ;Zero SubSec if =50 CLRF SubSec goto NOTIME SKIPCC INCF SeU,F ;And increment Second Units SKIPCC NOP ;seconds counter modulo 256 MOVLW -D'60' ADDWF SeU,W ;Carry if needed Second Units->Tens SKIPCC CLRF SeU SKIPCC INCF MiU,F ;Minutes Units MOVLW -D'10' ADDWF MiU,W SKIPCC CLRF MiU SKIPCC INCF MiT,F ;Minutes tens MOVLW -D'6' ADDWF MiT,W SKIPCC CLRF MiT SKIPCC INCF HrU,F MOVLW -D'10' ADDWF HrU,W SKIPCC CLRF HrU SKIPCC INCF HrT,F MOVF HrU,W ;Now check for Hours=24 BTFSC HrT,0 ADDLW D'10' BTFSC HrT,1 ADDLW -D'4' SKIPCC CLRF HrU ;clear hours units SKIPCC CLRF HrT ;clear hours tens MOVLW D'6' Delay3W BTFSS PORTB,7 GOTO NOTIME ;Increment time BCF Sync INCF SubSec,F ;Increment 1/50th sec MOVLW -D'50' ADDWF SubSec,W ;Carry now set if second has expired BSF Sync SKIPCC ;Zero SubSec if =50 CLRF SubSec NOTIME