PIC 16F84A Display Data Interface Težava, prosim pomoč!

D

desmop

Guest
Zdravo,

To je moja prva objava na tem forumu, tako nosijo s seboj.Delam na pisno sestavljanje koda za R / C microturbine hitrosti.Zelo sem novi v tem, da sem resnično lahko uporabijo pomoč.Jaz sem z uporabo PIC 16F84A mikro krmilnik čip, compling jezik s MPLAb IDE proti 7,30 in montažo s podatki Mplasm.Imam problem prikazovanja več podatkov na moj 8 x 2 LCD zaslona lahko le 5 številk ter oznako "RPM".Samo prve 3 so podatki napolnjena števk v zadnjih dveh le natisnjena ničel.Pot dobim program pisno, da se prikaže RPM's 100's.Obstaja na drugi vrstici zaslona je slectable število lamel.Želim biti sposoben prikazati več kot 99.900 rpms pa lahko podatek pravilen način, da to naredite.I nadaljuj v krogih in potreba neki pomoč od tistih, ki imajo izkušnje.Sem priloženo v ASM file za vrednotenje in predloge.Thanks in advance!

 
Živjo,

Zanimiv projekt, ampak jaz ne vidim koli prilogo:Citat:

Samo prve 3 so podatki napolnjena števk v zadnjih dveh le natisnjena ničel.
 
Koda za napotene PIC 16F84A Display Data Interface problem .....

SEZNAM P = 16F84A, R = hex; 16F84A Izvaja na 4 MHz
; INCLUDE "P16F84A.inc"
; LCD Tahometar ZA R / C MODEL motorjev
; Desmonda, P
;
; 16F84A Pin Out
;
; Pin 1: RA2 Pin 10: RB4
; Pin 2: RA3 Pin 11: RB5
; Pin 3: RA4/T0CKI Pin 12: RB6
; Pin 4: MCLR Pin 13: RB7
; Pin 5: VSS
5 V Pin 14: VDD
5 proti
; Pin 6: RB0/INT Pin 15: OSC2/CLKOUT
; Pin 7: RB1 N / A Pin 16: OSC1/CLKIN
; Pin 8: RB2 Pin 17: RA0
; Pin 9: RB3 Pin 18: RA1
;
; VERSION 3,25: 05/11/2006 UPDATE ZA KJ66
;
;------- SISTEM ---------------------
__CONFIG H'3FF1 "
;------- Opredeliti RAM ------------
TMR0 EQU 1; časovnik 0
PC EQU 2; PROGRAM NASPROTNO
STATUS EQU 3
OKS EQU 4; pufernega POSREDNIH naslov
Porta EQU 5
PORTB EQU 6
EEDATA EQU 8; EEPROM PODATKOV
EEADR EQU 9; EEPROM naslov
PCLATH EQU H'A "
INTCON EQU H'B "; prekine NADZOR
OPTIONF EQU 1; 0X81
TRISA EQU 5; 0X85
TRISB EQU 6; 0X86
EECON1 EQU 8; 0X88 IS EEPROM CONTROL1
EECON2 EQU 9; 0X89 IS EEPROM CONTROL2

;------- Opredeliti BIT -------------
;
C EQU 0
W EQU 0; d VREDNOST ZA INCF ......
F EQU 1; d VREDNOST
OFF EQU 0; ZASTAVE BIT 0,
RP0 EQU 5; STATUS BIT 5 & 6 = REGISTER BANK SELECT
RP1 EQU 6
INPUT EQU 7; RB7 KOT INPUT PORT
TOIF EQU 2; INTCON TMR0 OVERLOW INT ZASTAVE
TOIE EQU 5; INTCON TOIF omogočajo
GIE EQU 7; INTCON GLOBAL INT omogočajo

;------- UPORABO -------------------------------------
;------- REGISTRI ------
;
TCNT0 EQU H'C "= (0.6SEC / INT * PRESCAL * ura)
INTR0 EQU H'D "PO INT, SAVE W VREDNOST
INTR1 EQU H'E "PO INT, SAVE STATUS
DD1 EQU H'F "; PODATKOV ZA VNOS RPM
DD2 EQU H'10 '
DD3 EQU H'11 '
TEMP1 EQU H'12 ';
TEMP2 EQU H'13 '
TEMP3 EQU H'14 '
SLOW_C EQU H'15 '; 100-200 -
1. VSAKA INT_DST
INT_C EQU H'16 '; 0-255 -1 VSAK INT_DST
FLAG_REG EQU H'17 '
MODE_SEL EQU H'18 '
PWM_C EQU H'19 '
PUSH_C EQU H'1A "
RAND_HI EQU H'1B "
RAND_LO EQU H'1C "
TCNT EQU H'1D "

;------- BIT ----------------
F_ON EQU 0
F_UP EQU 1
F_TDST EQU 2
F_REC EQU 3
TACHO_SEL EQU 4
;
;------- SPREMENLJIVKE -----------
;
TMR EQU D'181 '; (PRESCALE 64 * 1uS) * 75 = 4800 US
TCNT_2 EQU D'125 '; 4.8mS * 125 = 600mS, VENDAR NEKAJ ODD FIX CODE
TCNT_3 EQU D'84 '; NASLEDNJO DVE * PRESCALE 1:64, do 0,6 sekunde TRAJANJE
TCNT_4 EQU D'62 '
TCNT_5 EQU D'50 '
BDELAY EQU D'40 '
TMR1 EQU D'178 '; (PRESCALE 256 * 7

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Hladen" border="0" />

= 19968 ZDA

RLIMIT EQU D'200 '; SERVO MEJNE
LLIMIT EQU D'100 '

;------- LCD SOUTINE -------------------------
;------- REGISTRI ---------
;
Naslov1 EQU H'41 '
CHAR1 EQU H'42 '
TEMP1_LCD EQU H'43 '
TEMP2_LCD EQU H'44 '
TEMP3_LCD EQU H'45 '
TEMP4_LCD EQU H'46 '
TABLE_INDEX EQU H'47 ';
;
;========== GLAVNI PROGRAM =========
;
ORG 0
PAGESEL START
Goto START
;----------------------------------------
;
ORG 4; prekine BEGIN

INTB MOVWF INTR0; SAVE W
MOVF STATUS, W; SAVE STATUS
MOVWF INTR1
BCF STATUS, RP0; ZAGOTOVITE SELECT BANK0
CHECK_TDST
BTFSC FLAG_REG, F_TDST; ČE SET Goto DST MODE
Goto INT_DST

;----------------------------------
;----- Hitrosti prekinjata -----------

INT_TACHO
MOVLW TMR; Restore TIMER0
MOVWF TMR0;
DECFSZ TCNT0, F; SKIP ČE ZERO
Goto nameravajo
Reload MOVF TCNT, W; Reload TCNT0
MOVWF TCNT0
;------------------------------------------------- --
DISP_RPM
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW B'00110000 "
IORWF DD1, 1
IORWF DD2, 1
IORWF DD3, 1
MOVFW DD1
RAZPIS PRINT_CHAR
MOVFW DD2
RAZPIS PRINT_CHAR
MOVFW DD3
RAZPIS PRINT_CHAR
MOVLW'0 '
RAZPIS PRINT_CHAR
MOVLW'0 '
RAZPIS PRINT_CHAR
MOVLW "R"
RAZPIS PRINT_CHAR
MOVLW "P"
RAZPIS PRINT_CHAR
MOVLW "M"
RAZPIS PRINT_CHAR
RESET_COUNT
CLRF DD1; DISPLAY PODATKOV
CLRF DD2
CLRF DD3;------ LISTNA MODE SELECT --------
BTFSS Porta, 1; SELECT?
BSF FLAG_REG, TACHO_SEL
MOVLW TMR; Restore TIMER0
MOVWF TMR0;
Goto nameravajo

;------ END OF TACHO INT ---------

;---------------------------------
INT_DST
MOVLW TMR1; 256 * 78 =
19968 ZDA
MOVWF TMR0
MOVF PWM_C, W
MOVWF TEMP1
;-------------------------------------
BIN2BCD MOVWF DD3; 1
CLRF DD2; 10
CLRF DD1 100

H1 MOVLW 0X64; 100
SUBWF DD3, F; odštejemo 100 IZ ŠTEVILKA
BTFSC STATUS, C; negativen rezultat?
Goto H2; NE?Goto H2
Goto H3; YES?Goto H3 (100'S DDD3)
H2 INCF DD1, F; Posamični DD1 REGISTRA
Goto H1; & LOOP NAZAJ ZA DRUGE TEST
H3 MOVLW 0X64; 100
ADDWF DD3, F; ADD 100 NAZAJ NA ŠTEVILO

T1 MOVLW 0X0A; 10
SUBWF DD3, F; odštejemo 10 iz ŠTEVILKA
BTFSC STATUS, C; negativen rezultat?
Pojdi na T2, NO?Goto T2
Goto T3; YES?Goto T3 (10'S DDD3)
T2 INCF DD2, F; Posamični DD2 REGISTRA
Goto T1; & LOOP NAZAJ ZA DRUGE TEST
T3 MOVLW 0X0A; 10
ADDWF DD3, F; Dodamo 10 NAZAJ NA ŠTEVILO
;------------------------------------------------- --
MOVLW H'40 '
RAZPIS DDRAM_ADDRESS
MOVLW B'00110000 "
IORWF DD1, 1
IORWF DD2, 1
IORWF DD3, 1
MOVLW "
RAZPIS PRINT_CHAR
MOVFW DD1
RAZPIS PRINT_CHAR
MOVFW DD2
RAZPIS PRINT_CHAR
MOVFW DD3
RAZPIS PRINT_CHAR
MOVLW'0 '
RAZPIS PRINT_CHAR
MOVLW "CALL PRINT_CHAR MOVLW "u"
RAZPIS PRINT_CHAR
MOVLW 'S'
RAZPIS PRINT_CHAR
BTFSC FLAG_REG, F_REC
Goto nameravajo
BSF Porta, 3
INT_DST1 10. nas LOOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMP1, F
Goto INT_DST1; END zanke
BCF Porta, 3
DECF INT_C, F; POVEČANJE INT_COUNTER

;-------------------------------------
Nameravajo
MOVF INTR1, W; Povrni STATUS
MOVWF STATUS
MOVF INTR0, W; Povrni W
BCF INTCON, TOIF; Ponastavi zastavo INT T0
RETFIE
;
;
;-------------------------------------------------
;============================================
; LCD SOUTINE

;================================================= =============
PRINT_DATA
BSF PORTB, 2; RS = 1, PODATKOV
MOVWF Naslov1
BSF Naslov1, 2
MOVF Naslov1, 0
MOVWF PORTB
BSF PORTB, 3
NOP
BCF PORTB, 3
RAZPIS LOOP_S 100 us
DONOSNOST

PRINT_CONT
MOVWF PORTB
BSF PORTB, 3
BCF PORTB, 3
RAZPIS LOOP_S 100 us
DONOSNOST

CLEAR_DISPLAY
MOVLW B'00000000 "; 0
RAZPIS PRINT_CONT
MOVLW B'00010000 "1. CLEAR
RAZPIS PRINT_CONT
MOVLW 1
RAZPIS LOOP_L; 10mS
DONOSNOST

DDRAM_ADDRESS
MOVWF Naslov1
BSF Naslov1, 7
MOVF Naslov1, 0
ANDLW B'11110000 ";
RAZPIS PRINT_CONT
SWAPF Naslov1, W; SWAP polovicami F
ANDLW B'11110000 ";
RAZPIS PRINT_CONT
DONOSNOST

PRINT_CHAR
MOVWF CHAR1
ANDLW B'11110000 ";
RAZPIS PRINT_DATA
SWAPF CHAR1, W; SWAP polovicami F
ANDLW B'11110000 "; POSLANE LOW 4 BITS
RAZPIS PRINT_DATA
DONOSNOST

LOOP_S; 100uS LOOP
MOVLW D'33 '
MOVWF TEMP4_LCD
LOOP_S1
DECFSZ TEMP4_LCD, 1;
Goto LOOP_S1
DONOSNOST

LOOP_L; 10 ms LOOP
MOVWF TEMP1_LCD
LOOP_L1
MOVLW D'10 '; 10 ms
MOVWF TEMP2_LCD
LOOP_L2
MOVLW D'249 '; (249 * 4),
5 = 1001
MOVWF TEMP3_LCD
LOOP_L3
NOP
DECFSZ TEMP3_LCD, 1
Goto LOOP_L3
DECFSZ TEMP2_LCD, 1
Goto LOOP_L2
DECFSZ TEMP1_LCD, 1
Goto LOOP_L1
DONOSNOST

DISP_MESSAGE
MOVWF TABLE_INDEX; W -> INDEX, THE BEGIN sporočila
RAZPIS MESSAGE1
ANDLW 0FFH
SKPNZ; ČE TABELA VRAČILU 0, Konec sporočila ODDELEK
DONOSNOST
RAZPIS PRINT_CHAR; DOSPLAY
INCF TABLE_INDEX, 0
Goto DISP_MESSAGE
;================================================= ===
MODE_ADDRESS

ADDWF PC, F
RETLW 0
RETLW 0
RETLW D'9 '
RETLW D'18 '
RETLW D'27 '

MESSAGE1

ADDWF PC, F
RETLW "T"
RETLW "a"
RETLW "c"
RETLW "h"
RETLW "o"
RETLW "
RETLW "
RETLW "
RETLW 0
RETLW "S"; 9
RETLW "e"
RETLW "r"
RETLW "proti"
RETLW "o"
RETLW "
RETLW "T"
RETLW "x"
RETLW 0
RETLW "S"; 18
RETLW 'p'
RETLW "e"
RETLW "e"
RETLW "d"
RETLW "
RETLW "T"
RETLW "x"
RETLW 0
RETLW "R"; 27
RETLW "e"
RETLW "c"
RETLW "e"
RETLW "i"
RETLW "proti"
RETLW "e"
RETLW "r"
RETLW 0

NOP; 36;=======================================
;---------- PROGRAM BEGIN -----------
;----------------------------------------
;

START
BSF STATUS, RP0; SET 3,5 omogočajo BANK1
MOVLW B'00000001 "
MOVWF TRISB; SET RB 1-7 OUTPUT, 0 INPUT
MOVLW B'00000111 "
MOVWF TRISA; SET RA0-RA2 INTPUT, RA3, RA4 IZHOD
BCF STATUS, RP0; omogočajo BANK0
BCF Porta, 3; OUT PWM
BSF Porta, 4,
5 V OUT OFF
CLRF PORTB
BCF INTCON, GIE
CLRF FLAG_REG
MOVLW D'150 '
MOVWF PWM_C

INIT_LCD
MOVLW 5; MOČ ZA ODLOGA 50mS
RAZPIS LOOP_L
SET_4BIT_MOD; SET LCD AT 4 BIT MODEL
MOVLW B'00110000 "3.
RAZPIS PRINT_CONT
MOVLW 1
RAZPIS LOOP_L; 10mS
MOVLW B'00110000 "3.
RAZPIS PRINT_CONT
MOVLW B'00110000 "3.
RAZPIS PRINT_CONT
MOVLW B'00100000 "; 2, 4BIT MODE
RAZPIS PRINT_CONT
MOVLW B'00100000 "2.
RAZPIS PRINT_CONT
MOVLW B'10000000 "; 8 4BITS, 2 črtici, FONT 0
RAZPIS PRINT_CONT

INIT_DISPLAY
MOVLW B'00000000 "O
RAZPIS PRINT_CONT
MOVLW B'11000000 "; C SCREEN ON, cursor NO, NO utripa
RAZPIS PRINT_CONT
RAZPIS CLEAR_DISPLAY; CLEAR DISPLAYMOVLW "
RAZPIS PRINT_CHAR
MOVLW 'K'
RAZPIS PRINT_CHAR
MOVLW "J" se prikažejo prve ODDELEK SPOROČILO
RAZPIS PRINT_CHAR
MOVLW "-"
RAZPIS PRINT_CHAR
MOVLW'6 '
RAZPIS PRINT_CHAR
MOVLW'6 '
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHARMOVLW H'40 '
RAZPIS DDRAM_ADDRESS
MOVLW "D"
RAZPIS PRINT_CHAR
MOVLW 'S'
RAZPIS PRINT_CHAR
MOVLW "T"
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MOVLW "V"
RAZPIS PRINT_CHAR
MOVLW'3 '
RAZPIS PRINT_CHAR
MOVLW '. "
RAZPIS PRINT_CHAR
MOVLW'2 '
RAZPIS PRINT_CHAR

MOVLW D'150 '
RAZPIS LOOP_L; ODLOGA 3,0 sekunde

CLRF MODE_SEL
INCF MODE_SEL, F
;------------------------------------------
MMODE_00
MOVLW H'40 '
RAZPIS DDRAM_ADDRESS
MOVFW MODE_SEL
RAZPIS MODE_ADDRESS; GET MODE IME ZAČETKU
RAZPIS DISP_MESSAGE; Display Mode IME
MOVLW D'50 '
RAZPIS LOOP_L; 1,0 sekunde SPREMEMBA MODE
BTFSS Porta, 1
Goto MMODE_01; PUSH, SUCCESSIVA MODE
BTFSS Porta, 0
Goto MMODE_02; PUSH SELECT,

Goto MMODE_00
MMODE_01
INCF MODE_SEL, F
MOVLW 5; MODE_SEL 1-4 SAMO
SUBWF MODE_SEL, W
SKPZ
Goto MMODE_00
MOVLW 1
MOVWF MODE_SEL
Goto MMODE_00
MMODE_02

;------- O MODE_SEL Goto ----------
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
Goto GLAVNA 1. TACHO
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
Goto DST_MAIN 2 DST
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
Goto SCT_MAIN 3 SCT
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
Goto RECT_MAIN 4. rect
;------------------------------------

GLAVNA
BSF Porta, 4,
5 V OUT OFF
RAZPIS CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
RAZPIS DDRAM_ADDRESS
MOVLW 1
RAZPIS MODE_ADDRESS; GET MODE IME ZAČETKU
RAZPIS DISP_MESSAGE; Display Mode IME

BSF STATUS, RP0; SET 3,5 omogočajo BANK1
MOVLW B'10000101 "
MOVWF OPTIONF; INTERNAT URA, TRM0, 1:64
BCF STATUS, RP0; omogočajo BANK0
CLRF DD1; DISPLAY PODATKOV
CLRF DD2
CLRF DD3
MOVLW 1; DEFAULT 2 listov
MOVWF MODE_SEL
Goto T_SEL
MAIN01
MOVLW TMR; 75
MOVWF TMR0
MOVLW TCNT; odvisni od listov
MOVWF TCNT0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; omogočajo INT
;----------------------------------
MAIN1
BTFSC FLAG_REG, TACHO_SEL
Goto T_SEL
BTFSS Porta, 2
Goto START
BTFSC Porta, 0; ČE INPUT = 0, SKIP
Goto MAIN1
MAIN2
BTFSC FLAG_REG, TACHO_SEL
Goto T_SEL
BTFSS Porta, 2
Goto START
BTFSS PORTB, 0; ČE INPUT = 1, SKIP
Goto MAIN2
MAIN3 INCF DD3, F
MOVLW H'0A "
SUBWF DD3, W
SKPZ; DIGITAL 1 = A, morajo AJUST
Goto MAIN1
CLRF DD3
INCF DD2, F
MOVLW H'0A "
SUBWF DD2, W
SKPZ; DIGITAL 1 = A, morajo AJUST
Goto MAIN1
CLRF DD2
INCF DD1, F; DIGITAL 3 NE BO> 9, ZATO NE CHECK
Goto MAIN1

;------------------------------------
;------ TACHO MODE SELECT -----------
T_SEL
BCF FLAG_REG, TACHO_SEL
BCF INTCON, GIE
INCF MODE_SEL, F
MOVLW 6; MODE_SEL 2-5 SAMO
SUBWF MODE_SEL, W
SKPZ
Goto T_SEL1
MOVLW 2
MOVWF MODE_SEL
T_SEL1
MOVLW H'40 '
RAZPIS DDRAM_ADDRESS
MOVLW H'30 '; Pretvorimo Hex DO ASCII
ADDWF MODE_SEL, W; Pretvorimo Hex DO ASCII
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MOVLW "B"
RAZPIS PRINT_CHAR
MOVLW "e"
RAZPIS PRINT_CHAR

;------- O MODE_SEL Goto ----------
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
Goto TMODE_2 2. listi
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
Goto TMODE_3 3
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
Goto TMODE_4; 4
;------------------------------------
TMODE_5; 5
MOVLW TCNT_5
MOVWF TCNT
Goto T_SEL_5
TMODE_4
MOVLW TCNT_4
MOVWF TCNT
Goto T_SEL_5
TMODE_3
MOVLW TCNT_3
MOVWF TCNT
Goto T_SEL_5
TMODE_2
MOVLW TCNT_2
MOVWF TCNT
Goto T_SEL_5
T_SEL_5
MOVLW D'50 '; 0,01 sekunde * 50
RAZPIS LOOP_L
BTFSS Porta, 1
Goto T_SEL; SPREMEMBA MODE
Goto MAIN01

;------ END OF Tahometar --------------
;================================================= ===
DST_MAIN
BCF Porta, 4,
5 V IZ OBRATOV ZA
BSF FLAG_REG, F_TDST; ČE SET Goto DST MODE
RAZPIS CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
RAZPIS DDRAM_ADDRESS

;------- SETUP_INTERRUPT -------

BSF STATUS, RP0; SET 3,5 omogočajo BANK1
MOVLW B'10000111 "
MOVWF OPTIONF; INTERNAT URA, TRM0, 1:256
BCF STATUS, RP0; omogočajo BANK0
MOVLW TMR1; 256 * 78 =
19968 ZDA
MOVWF TMR0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; omogočajo INTCLRF MODE_SEL
;-----------------------------------------------
MODE_0
INCF MODE_SEL, F
MOVLW 7; MODE_SEL 1-5 SAMO
SUBWF MODE_SEL, W
SKPZ
Goto MODE_01
MOVLW 1
MOVWF MODE_SEL

;------- O MODE_SEL Goto ----------
MODE_01
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
Goto MODE_1; PRIROČNIK
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
Goto MODE_3; FSAT
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
Goto MODE_4; BLIŽNJIM
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
Goto MODE_2; POČASI
MOVLW 5
SUBWF MODE_SEL, W
SKPNZ
Goto MODE_5; NAKLJUČNIM
Goto MODE_6; ESCAPE
;-------------------------------------------------
MODE_1
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW "M"
RAZPIS PRINT_CHAR
MOVLW "a"
RAZPIS PRINT_CHAR
MOVLW 'n'
RAZPIS PRINT_CHAR
MOVLW "u"
RAZPIS PRINT_CHAR
MOVLW "a"
RAZPIS PRINT_CHAR
MOVLW "l"
RAZPIS PRINT_CHAR
MOVLW BDELAY
RAZPIS LOOP_L
MODE_10
MOVLW D'150 '
MOVWF PWM_C
MODE_11
BTFSS Porta, 0
Goto INC_B
BTFSS Porta, 2
Goto DEC_B
BTFSS Porta, 1
Goto CENT_B
CLRF PUSH_C
Goto MODE_11
INC_B MOVLW RLIMIT
SUBWF PWM_C, W
SKPNZ
Goto MODE_11; = RLIMIT, ni treba storiti nič
INCF PWM_C, F
MOVLW D'5 '; še 5 KORAK, POSPEŠEVANJEM
SUBWF PUSH_C, W
SKPNZ
Goto INC_B1;
MOVLW D'20 '; 0,2 sekunde
RAZPIS LOOP_L; RAZPIS 0,1 sekunde LOOP
INCF PUSH_C, F
Goto MODE_11
INC_B1; HITRE INC
MOVLW D'6 '
RAZPIS LOOP_L; 0,06 DRUGO
Goto MODE_11
DEC_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
Goto MODE_11; = LLIMIT, ni treba storiti nič
DECF PWM_C, F
MOVLW D'5 '; še 5 KORAK, POSPEŠEVANJEM
SUBWF PUSH_C, W
SKPNZ
Goto DEC_B1;
MOVLW D'20 ';
RAZPIS LOOP_L; RAZPIS 0,1 sekunde LOOP
INCF PUSH_C, F
Goto MODE_11
DEC_B1; HITRE DEC
MOVLW D'6 '
RAZPIS LOOP_L; 0,06 DRUGO
Goto MODE_11
CENT_B
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto MODE_0; SPREMEMBA MODE
Goto MODE_10
;------------------------------------------------
MODE_2
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW 'S'
RAZPIS PRINT_CHAR
MOVLW "l"
RAZPIS PRINT_CHAR
MOVLW "o"
RAZPIS PRINT_CHAR
MOVLW "m"
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MODE_20; POČASI 10 DRUGO
MOVLW D'150 '
MOVWF PWM_C
BSF FLAG_REG, F_UP
MODE_21
BTFSS Porta, 0
Goto INC_B2
BTFSS Porta, 2
Goto MODE_21
BTFSS Porta, 1
Goto CENT_B2
Goto MODE_21
INC_B2
MOVLW 2; 2-krat
MOVWF PUSH_C
MOVLW 5
MOVWF INT_C
INC_B21
MOVF INT_C, W, 5 * 100 * 20mS = 10 DRUGO
SKPZ
Goto INC_B21

MOVLW 5, 5 * 100 * 20mS = 10 DRUGO
MOVWF INT_C
BTFSS FLAG_REG, F_UP; gor / dol?
Goto INC_B23; COUNT_DOWN
INC_B22
MOVLW RLIMIT; UP
SUBWF PWM_C, W
SKPNZ
Goto INC_B24; TURN_DOWN
INCF PWM_C, F
BTFSS Porta, 2 STOP?
Goto MODE_21
Goto INC_B21
INC_B24; TURN_DOWN
BCF FLAG_REG, F_UP
INC_B23
MOVLW LLIMIT;
SUBWF PWM_C, W
SKPNZ
Goto INC_B25; TURN_UP
DECF PWM_C, F
BTFSS Porta, 2 STOP?
Goto MODE_21
Goto INC_B21
INC_B25
BSF FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
Goto MODE_21
Goto INC_B22

CENT_B2
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto MODE_0; SPREMEMBA MODE
Goto MODE_20

;------------------------
MODE_3
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW "F"
RAZPIS PRINT_CHAR
MOVLW "a"
RAZPIS PRINT_CHAR
MOVLW "e"
RAZPIS PRINT_CHAR
MOVLW "t"
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR; FAST 0,5 sekunde
MODE_30
MOVLW D'150 '
MOVWF PWM_C
MODE_31
BTFSS Porta, 0
Goto INC_B3
BTFSS Porta, 2
Goto MODE_31
BTFSS Porta, 1
Goto CENT_B3
Goto MODE_31
INC_B3
MOVLW 5
MOVWF PUSH_C
INC_B31
MOVLW RLIMIT
MOVWF PWM_C
BTFSS Porta, 2
Goto MODE_3
MOVLW D'45 '; 0.45SECOD
22 motim
RAZPIS LOOP_L; RAZPIS 0,1 sekunde LOOP
MOVLW LLIMIT
MOVWF PWM_C
BTFSS Porta, 2
Goto MODE_3
MOVLW D'45 '
RAZPIS LOOP_L
DECFSZ PUSH_C, F
Goto INC_B31
Goto MODE_3

CENT_B3
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto MODE_0; SPREMEMBA MODE
Goto MODE_30

;------------------------
MODE_4; MID 2 sekunde
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW "M"
RAZPIS PRINT_CHAR
MOVLW 'i'
RAZPIS PRINT_CHAR
MOVLW 'd'
RAZPIS PRINT_CHAR
MOVLW 'd'
RAZPIS PRINT_CHAR
MOVLW "l"
RAZPIS PRINT_CHAR
MOVLW "e"
RAZPIS PRINT_CHAR
MODE_40
MOVLW D'150 '
MOVWF PWM_C
BSF FLAG_REG, F_UP
MODE_41
BTFSS Porta, 0
Goto INC_B4
BTFSS Porta, 2
Goto MODE_41
BTFSS Porta, 1
Goto CENT_B4
Goto MODE_41
INC_B4
MOVLW 5, 5-krat
MOVWF PUSH_C
MOVLW 1
MOVWF INT_C
INC_B41
MOVF INT_C, W; 1 * 100 * 20mS = 2 sekunde
SKPZ
Goto INC_B41

MOVLW 1, 1 * 100 * 20mS = 2 sekunde
MOVWF INT_C
BTFSS FLAG_REG, F_UP; gor / dol?
Goto INC_B43; COUNT_DOWN
INC_B42
MOVLW RLIMIT; UP
SUBWF PWM_C, W
SKPNZ
Goto INC_B44; TURN_DOWN
INCF PWM_C, F
BTFSS Porta, 2 STOP?
Goto MODE_41
Goto INC_B41
INC_B44; TURN_DOWN
BCF FLAG_REG, F_UP
INC_B43
MOVLW LLIMIT;
SUBWF PWM_C, W
SKPNZ
Goto INC_B45; TURN_UP
DECF PWM_C, F
BTFSS Porta, 2 STOP?
Goto MODE_41
Goto INC_B41
INC_B45
BSF FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
Goto MODE_41
Goto INC_B42

CENT_B4
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto MODE_0; SPREMEMBA MODE
Goto MODE_40
;------------------------------------------------- --------

MODE_5; Random
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW "R"
RAZPIS PRINT_CHAR
MOVLW "a"
RAZPIS PRINT_CHAR
MOVLW 'n'
RAZPIS PRINT_CHAR
MOVLW 'd'
RAZPIS PRINT_CHAR
MOVLW "o"
RAZPIS PRINT_CHAR
MOVLW "m"
RAZPIS PRINT_CHAR
MODE_50
MOVLW D'150 '
MOVWF PWM_C
MODE_51
DECFSZ RAND_LO, F; NAKLJUČNIM SEED generatorja
Goto MODE_52
DECF RAND_LO, F; NE ZAGOTOVITE, ZERO
DECFSZ RAND_HI, F
Goto MODE_52
DECF RAND_HI, F; NE ZAGOTOVITE, ZERO
MODE_52 BTFSS Porta, 0
Goto INC_B5
BTFSS Porta, 2
Goto MODE_51
BTFSS Porta, 1
Goto CENT_B5
Goto MODE_51
INC_B5
MOVLW H'20 '; 20-30 NAKLJUČNIM TEST
MOVWF PUSH_C
INC_B51
MOVLW D'10 '; 10 pulzov na položaj
MOVWF INT_C
;---------------
RANDOM16
RLF RAND_HI, W
XORWF RAND_HI, W
RLF TEMP1, F
SWAPF RAND_HI, F
SWAPF RAND_LO, W
RLF TEMP1, F
XORWF RAND_HI, W
SWAPF RAND_HI, F
ANDLW 0x01
RLF RAND_LO, F
XORWF RAND_LO, F
RLF RAND_HI, F
;---------------------------------
MOVLW RLIMIT
SUBWF RAND_LO, W
SKPNC; F <W, C = 0
Goto RANDOM16
MOVLW LLIMIT
SUBWF RAND_LO, W
SKPC; F> W, C = 1
Goto RANDOM16
MOVF RAND_LO, W
MOVWF PWM_C
INC_B52
MOVF INT_C, W
SKPZ
Goto INC_B52
BTFSS Porta, 2 STOP?
Goto MODE_5
DECFSZ PUSH_C, F
Goto INC_B51
Goto MODE_51
CENT_B5
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto MODE_0; SPREMEMBA MODE
Goto MODE_50

;---------------------------------
MODE_6; Random
MOVLW H'0 "
RAZPIS DDRAM_ADDRESS
MOVLW 'Q'
RAZPIS PRINT_CHAR
MOVLW "u"
RAZPIS PRINT_CHAR
MOVLW 'i'
RAZPIS PRINT_CHAR
MOVLW "t"
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR
MOVLW "
RAZPIS PRINT_CHAR

MODE_61
BTFSS Porta, 0
Goto START
BTFSC Porta, 1
Goto MODE_61

MOVLW BDELAY
RAZPIS LOOP_L
BTFSS Porta, 1
Goto MODE_0
Goto MODE_61
;------ KONEC DST ---------------;----------------------------------
;----- HITROST NADZORNIKU Tester --
SCT_MAIN
BSF Porta, 4,
5 V OUT OFF
BSF FLAG_REG, F_TDST; ČE SET Goto DST MODE
RAZPIS CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
RAZPIS DDRAM_ADDRESS
MOVFW MODE_SEL
RAZPIS MODE_ADDRESS; GET MODE IME ZAČETKU
RAZPIS DISP_MESSAGE; Display Mode IME
MOVLW BDELAY
RAZPIS LOOP_L
;-----------------------------------------------

BSF STATUS, RP0; SET 3,5 omogočajo BANK1
MOVLW B'10000111 "
MOVWF OPTIONF; INTERNAT URA, TRM0, 1:256
BCF STATUS, RP0; omogočajo BANK0
MOVLW TMR1; 256 * 78 =
19968 ZDA
MOVWF TMR0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; omogočajo INT

;-------------------------------------------------
SCT_1
MOVLW D'100 '; NAJNIŽJIH
MOVWF PWM_C
SCT_11
BTFSS Porta, 0
Goto ISCT_B
BTFSS Porta, 2
Goto DSCT_B
BTFSS Porta, 1
Goto DCENT_B
CLRF PUSH_C
Goto SCT_11
ISCT_B MOVLW RLIMIT
SUBWF PWM_C, W
SKPNZ
Goto SCT_11; = RLIMIT, ni treba storiti nič
INCF PWM_C, F
MOVLW D'5 '; še 5 KORAK, POSPEŠEVANJEM
SUBWF PUSH_C, W
SKPNZ
Goto ISCT_B1;
MOVLW D'20 '; 0,2 sekunde
RAZPIS LOOP_L; RAZPIS 0,1 sekunde LOOP
INCF PUSH_C, F
Goto SCT_11
ISCT_B1; HITRE INC
MOVLW D'6 '
RAZPIS LOOP_L; 0,06 DRUGO
Goto SCT_11
DSCT_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
Goto SCT_11; = LLIMIT, ni treba storiti nič
DECF PWM_C, F
MOVLW D'5 '; še 5 KORAK, POSPEŠEVANJEM
SUBWF PUSH_C, W
SKPNZ
Goto DSCT_B1;
MOVLW D'20 ';
RAZPIS LOOP_L; RAZPIS 0,1 sekunde LOOP
INCF PUSH_C, F
Goto SCT_11
DSCT_B1; HITRE DEC
MOVLW D'6 '
RAZPIS LOOP_L; 0,06 DRUGO
Goto SCT_11
DCENT_B
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto START; SPREMEMBA MODE
Goto SCT_1; Pojdi na začetek, 1000uS

;------ KONEC SCT -----------------
;================================================= ======
RECT_MAIN
BSF Porta, 4,
5 V OUT OFF
BSF FLAG_REG, F_TDST
BSF FLAG_REG, F_REC
RAZPIS CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
RAZPIS DDRAM_ADDRESS
MOVFW MODE_SEL
RAZPIS MODE_ADDRESS; GET MODE IME ZAČETKU
RAZPIS DISP_MESSAGE; Display Mode IME

BSF STATUS, RP0;
MOVLW B'10000000 "
MOVWF OPTIONF; INTERNAT URA, TRM0, 1:2
MOVLW B'00001111 "; SET RA, 3 INPUT
MOVWF TRISA;
BCF STATUS, RP0;
CLRF PWM_C
BSF INTCON, TOIE
BSF INTCON, GIE; omogočajo INT ZA DISPLAY XXX nas
NOP
NOP
;--------------------------------
REC_0
BCF INTCON, TOIF
BCF INTCON, TOIE
BCF INTCON, GIE;

;------- START UKREPA -------------
REC_2
CLRF PWM_C
REC_3
BTFSS Porta, 1
Goto REC_B
BTFSS Porta, 3
Goto REC_3
REC_4
NOP 10. nas LOOP
NOP
NOP
NOP
INCF PWM_C, F
SKPNZ
Goto REC_ERROR; ČE PWM_C> 255, NAPAKA
BTFSC Porta, 3
Goto REC_4
DECF PWM_C, F; PRAVILNI 1-20 nam
Goto REC_5
REC_ERROR; IF> 255 DISPLAY 255
MOVLW H'FF "
MOVWF PWM_C
REC_5
BSF INTCON, TOIE
BSF INTCON, GIE; omogočajo INT ZA DISPLAY XXX nas
Goto REC_0
REC_B
MOVLW BDELAY; 0,01 sekunde * 40
RAZPIS LOOP_L
BTFSS Porta, 1
Goto START; CHANGR način SCT Maun
Goto RECT_MAIN;-------------------------------------------------

END

 

Welcome to EDABoard.com

Sponsor

Back
Top