PIC 16F84A Покажи Данни интерфейс проблем, моля, помогни ми!

D

desmop

Guest
Привет,

Това е първият ми пост за този форум,
за да носят с мен.Аз
съм работа по написването събрание код за R / C microturbine тахометер.Аз
съм съвсем нова за това е така, наистина може да използвате някои от помощ.Аз
съм с помощта на PIC 16F84A микро чип контролер, compling на езика, с MPLAb IDE V 7,30 и монтаж на данни с Mplasm.Аз
съм като проблем показвате повече данни на моя 8 х 2 LCD дисплей Не мога само 5 цифри плюс таг "RPM".Само първите 3 са данни напълнени последните две цифри са отпечатани нули.Начинът, по който аз имам писмена програма е, че той показва
на оборотите на 100 години.Там се намира на втора линия на покаже slectable брой ножове.Искам да съм в състояние да се показва над
99900 rpms, но не мога фигура правилния начин да го направя.Аз Продължавай в кръг и се нуждаят от помощ от тези, които имат опит.Аз бях Закрепихме ASM файла за оценка и предложения.Благодарим предварително!

 
Здрасти,

Интересен проект, но аз не мога да видя всеки прикачен файл: /Цитат:

Само първите 3 са данни напълнени последните две цифри са отпечатани нули.
 
Код афиш за PIC 16F84A Покажи Данни интерфейс проблема .....

СПИСЪК P = 16F84A, R = Hex; 16F84A Писти на 4 MHz
; INCLUDE "P16F84A.inc"
; LCD тахометер ЗА R / C МОДЕЛ турбина ENGINE
; Дезмънд, P
;
; 16F84A Пин Out
;
; Пин 1: RA2 Пин 10: RB4
; Пин 2: RA3 Пин 11: RB5
; Пин 3: RA4/T0CKI Пин 12: RB6
; Пин 4: MCLR Пин 13: RB7
; Пин 5: VSS
5 V Пин 14: VDD
5 V
; Пин 6: RB0/INT Пин 15: OSC2/CLKOUT
; Пин 7: RB1 N / A Пин 16: OSC1/CLKIN
; Пин 8: RB2 Пин 17: RA0
; Пин 9: RB3 Пин 18: RA1
;
; VERSION 3,25: 05/11/2006 Актуализация за KJ66
;
;------- СИСТЕМА ---------------------
__CONFIG H'3FF1 "
;------- Определят RAM ------------
TMR0 EQU 1; Таймер 0
PC EQU 2; ПРОГРАМА Counter
СТАТУТ EQU 3
FSR EQU 4; буфер от НЕПРЕКИ адр
PORTA EQU 5
PORTB EQU 6
EEDATA EQU 8; EEPROM ДАННИТЕ
EEADR EQU 9; EEPROM адр
PCLATH EQU H'A "
INTCON EQU H'B "; прекъсне КОНТРОЛ
OPTIONF EQU 1; 0X81
TRISA EQU 5; 0X85
TRISB EQU 6; 0X86
EECON1 EQU 8; 0X88 СЕ EEPROM CONTROL1
EECON2 EQU 9; 0X89 СЕ EEPROM CONTROL2

;------- Определят Bit -------------
;
С EQU 0
W EQU 0; г стойност за INCF ......
F EQU 1; г СТОЙНОСТ
OFF EQU 0; ФЛАГ Bit 0,
RP0 EQU 5; СТАТУС Bit 5 & 6 = РЕГИСТЪР БАНКА ИЗБЕРИ
RP1 EQU 6
Входно EQU 7; RB7 като входящи PORT
TOIF EQU 2; INTCON TMR0 OVERLOW INT ФЛАГ
TOIE EQU 5; INTCON TOIF даде възможност
GIE EQU 7; INTCON ГЛОБАЛЕН INT позволяват

;------- ПОТРЕБИТЕЛ -------------------------------------
;------- РЕГИСТРИ ------
;
TCNT0 EQU H'C "; = (0.6SEC / INT * * PRESCAL часовник)
INTR0 EQU H'D "; СЛЕД INT, SAVE W СТОЙНОСТ
INTR1 EQU H'E "; СЛЕД INT, SAVE СТАТУС
DD1 EQU H'F "; данни за вход 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 ВСЕКИ INT_DST
INT_C EQU H'16 "; 0-255 -1 ВСЕКИ 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
;
;------- Променливи -----------
;
ОПМ EQU D'181 "; (PRESCALE 64 * 1uS) * 75 = 4800 нас
TCNT_2 EQU D'125 "; 4.8mS * 125 = 600mS, НО FIX НЯКОИ Нечетно КОД
TCNT_3 EQU D'84 "; НАСТОЯЩОТО ДВЕ * PRESCALE 1:64 до 0,6 Второ ВРЕМЕТРАЕНЕ
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="Охлаждам" border="0" />

= 19968 нас

RLIMIT EQU D'200 "; серво ограничат
LLIMIT EQU D'100 '

;------- LCD Сотин -------------------------
;------- РЕГИСТРИ ---------
;
ADDRESS1 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 ";
;
;========== Основната програма =========
;
ORG 0
PAGESEL START
Гото START
;----------------------------------------
;
ORG 4; прекъсне BEGIN

INTB MOVWF INTR0; SAVE W
MOVF СТАТУС, W; SAVE СТАТУС
MOVWF INTR1
BCF статус, RP0; MAKE SURE ИЗБЕРИ BANK0
CHECK_TDST
BTFSC FLAG_REG, F_TDST; АКО SET Гото DST MODE
Гото INT_DST

;----------------------------------
;----- Тахометер прекъсне -----------

INT_TACHO
MOVLW ОПМ; Възстан TIMER0
MOVWF TMR0;
DECFSZ TCNT0, F; ПРЕСКОЧИ АКО ZERO
Гото възнамеряват
Презареждане MOVF TCNT, W; Презареждане TCNT0
MOVWF TCNT0
;------------------------------------------------- --
DISP_RPM
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW B'00110000 "
IORWF DD1, 1
IORWF DD2, 1
IORWF DD3, 1
MOVFW DD1
CALL PRINT_CHAR
MOVFW DD2
CALL PRINT_CHAR
MOVFW DD3
CALL PRINT_CHAR
MOVLW "0"
CALL PRINT_CHAR
MOVLW "0"
CALL PRINT_CHAR
MOVLW "R"
CALL PRINT_CHAR
MOVLW "P"
CALL PRINT_CHAR
MOVLW "М"
CALL PRINT_CHAR
RESET_COUNT
CLRF DD1; указват ДАННИТЕ
CLRF DD2
CLRF DD3;------ Leaf MODE ИЗБЕРИ --------
BTFSS PORTA, 1; ИЗБЕРИ?
BSF FLAG_REG, TACHO_SEL
MOVLW ОПМ; Възстан TIMER0
MOVWF TMR0;
Гото възнамеряват

;------ КРАЯ НА TACHO INT ---------

;---------------------------------
INT_DST
MOVLW TMR1; 256 * 78 = 19968 нас
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; изваждате 100 ОТ НОМЕР
BTFSC СТАТУС, C; отрицателен резултат?
Гото H2; Не?Гото H2
Гото H3; Да?Гото H3 (100
НА DDD3)
H2 INCF DD1, F; увеличение DD1 РЕГИСТЪР
Гото H1; & LOOP BACK за друг ИЗПИТВАНЕ
H3 MOVLW 0X64; 100
ADDWF DD3, F; ДОБАВИ 100 BACK на номер

T1 MOVLW 0X0A; 10
SUBWF DD3, F; изваждате 10 ОТ НОМЕР
BTFSC СТАТУС, C; отрицателен резултат?
Гото Т2; Не?Гото Т2
Гото Т3; Да?Гото Т3 (10
НА DDD3)
Т2 INCF DD2, F; увеличение DD2 РЕГИСТЪР
Гото T1; & LOOP BACK за друг ИЗПИТВАНЕ
Т3 MOVLW 0X0A; 10
ADDWF DD3, F; ADD 10 BACK на номер
;------------------------------------------------- --
MOVLW H'40 "
CALL DDRAM_ADDRESS
MOVLW B'00110000 "
IORWF DD1, 1
IORWF DD2, 1
IORWF DD3, 1
MOVLW "
CALL PRINT_CHAR
MOVFW DD1
CALL PRINT_CHAR
MOVFW DD2
CALL PRINT_CHAR
MOVFW DD3
CALL PRINT_CHAR
MOVLW "0"
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "U"
CALL PRINT_CHAR
MOVLW "S"
CALL PRINT_CHAR
BTFSC FLAG_REG, F_REC
Гото възнамеряват
BSF PORTA, 3
INT_DST1; 10 US LOOP
Ноември
Ноември
Ноември
Ноември
Ноември
Ноември
Ноември
DECFSZ TEMP1, F
Гото INT_DST1; КРАЯ НА LOOP
BCF PORTA, 3
DECF INT_C, F; УВЕЛИЧЕНИЕ INT_COUNTER

;-------------------------------------
Възнамеряват
MOVF INTR1, W; Възстан СТАТУС
MOVWF СТАТУС
MOVF INTR0, W; Възстан W
BCF INTCON, TOIF; RESET ФЛАГ НА INT T0
RETFIE
;
;
;-------------------------------------------------
;============================================
; LCD Сотин

;================================================= =============
PRINT_DATA
BSF PORTB, 2; RS = 1, DATA
MOVWF ADDRESS1
BSF ADDRESS1, 2
MOVF ADDRESS1, 0
MOVWF PORTB
BSF PORTB, 3
Ноември
BCF PORTB, 3
CALL LOOP_S; 100 US
ВРЪЩАНЕ

PRINT_CONT
MOVWF PORTB
BSF PORTB, 3
BCF PORTB, 3
CALL LOOP_S; 100 US
ВРЪЩАНЕ

CLEAR_DISPLAY
MOVLW B'00000000 "; 0
CALL PRINT_CONT
MOVLW B'00010000 "; 1 ЯСНИ
CALL PRINT_CONT
MOVLW 1
CALL LOOP_L; 10mS
ВРЪЩАНЕ

DDRAM_ADDRESS
MOVWF ADDRESS1
BSF ADDRESS1, 7
MOVF ADDRESS1, 0
ANDLW B'11110000 ";
CALL PRINT_CONT
SWAPF ADDRESS1, W; суап Половинки F
ANDLW B'11110000 ";
CALL PRINT_CONT
ВРЪЩАНЕ

PRINT_CHAR
MOVWF CHAR1
ANDLW B'11110000 ";
CALL PRINT_DATA
SWAPF CHAR1, W; суап Половинки F
ANDLW B'11110000 "; изпратени LOW 4 BITS
CALL PRINT_DATA
ВРЪЩАНЕ

LOOP_S; 100uS LOOP
MOVLW D'33 '
MOVWF TEMP4_LCD
LOOP_S1
DECFSZ TEMP4_LCD, 1;
Гото LOOP_S1
ВРЪЩАНЕ

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
Ноември
DECFSZ TEMP3_LCD, 1
Гото LOOP_L3
DECFSZ TEMP2_LCD, 1
Гото LOOP_L2
DECFSZ TEMP1_LCD, 1
Гото LOOP_L1
ВРЪЩАНЕ

DISP_MESSAGE
MOVWF TABLE_INDEX; W -> индекс началото на съобщението
CALL MESSAGE1
ANDLW 0FFH
SKPNZ; АКО ТАБЛИЦА ВЪЗВРЪЩАЕМОСТ 0, КРАЯ НА ПОСЛАНИЕ РАЗДЕЛ
ВРЪЩАНЕ
CALL PRINT_CHAR; DOSPLAY
INCF TABLE_INDEX, 0
Гото 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 "А"
RETLW "С"
RETLW "з"
RETLW "О"
RETLW "
RETLW "
RETLW "
RETLW 0
RETLW "А"; 9
RETLW "Е"
RETLW "R"
RETLW "V"
RETLW "О"
RETLW "
RETLW "T"
RETLW "X"
RETLW 0
RETLW "А"; 18
RETLW "р"
RETLW "Е"
RETLW "Е"
RETLW "г"
RETLW "
RETLW "T"
RETLW "X"
RETLW 0
RETLW "R"; 27
RETLW "Е"
RETLW "С"
RETLW "Е"
RETLW "Аз"
RETLW "V"
RETLW "Е"
RETLW "R"
RETLW 0

Ноември; 36;=======================================
;---------- ПРОГРАМА BEGIN -----------
;----------------------------------------
;

START
BSF статус, RP0; SET 3,5 позволяват BANK1
MOVLW B'00000001 "
MOVWF TRISB; SET RB 1/7 продукция, 0 Input
MOVLW B'00000111 "
MOVWF TRISA; SET RA0-RA2 INTPUT, RA3, RA4 изход
BCF статус, RP0; даде възможност BANK0
BCF PORTA, 3; OUT PWM
BSF PORTA, 4; OUT
5 V OFF
CLRF PORTB
BCF INTCON, GIE
CLRF FLAG_REG
MOVLW D'150 '
MOVWF PWM_C

INIT_LCD
MOVLW 5; POWER ПО незабавно 50mS
CALL LOOP_L
SET_4BIT_MOD; SET LCD AT 4 Bit МОДЕЛ
MOVLW B'00110000 "3
CALL PRINT_CONT
MOVLW 1
CALL LOOP_L; 10mS
MOVLW B'00110000 "3
CALL PRINT_CONT
MOVLW B'00110000 "3
CALL PRINT_CONT
MOVLW B'00100000 "2, 4BIT MODE
CALL PRINT_CONT
MOVLW B'00100000 "2
CALL PRINT_CONT
MOVLW B'10000000 "; 8 4BITS, 2 линии, FONT 0
CALL PRINT_CONT

INIT_DISPLAY
MOVLW B'00000000 "; O
CALL PRINT_CONT
MOVLW B'11000000 "; C ЕКРАН ON, NO CURSOR, NO мига
CALL PRINT_CONT
CALL CLEAR_DISPLAY; CLEAR указватMOVLW "
CALL PRINT_CHAR
MOVLW "К"
CALL PRINT_CHAR
MOVLW "J"; показват на челно място РАЗДЕЛ ПОСЛАНИЕ
CALL PRINT_CHAR
MOVLW "-"
CALL PRINT_CHAR
MOVLW "6"
CALL PRINT_CHAR
MOVLW "6"
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHARMOVLW H'40 "
CALL DDRAM_ADDRESS
MOVLW "Д"
CALL PRINT_CHAR
MOVLW "S"
CALL PRINT_CHAR
MOVLW "T"
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "V"
CALL PRINT_CHAR
MOVLW "3"
CALL PRINT_CHAR
MOVLW "."
CALL PRINT_CHAR
MOVLW "2"
CALL PRINT_CHAR

MOVLW D'150 '
CALL LOOP_L; незабавно 3,0 Второ

CLRF MODE_SEL
INCF MODE_SEL, F
;------------------------------------------
MMODE_00
MOVLW H'40 "
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS; GET MODE ИМЕ НАЧАЛОТО
CALL DISP_MESSAGE; режим ИМЕ
MOVLW D'50 '
CALL LOOP_L; 1,0 Второ ПРОМЯНА MODE
BTFSS PORTA, 1
Гото MMODE_01; бута, NEXT MODE
BTFSS PORTA, 0
Гото MMODE_02; ИЗБЕРИ бута,

Гото MMODE_00
MMODE_01
INCF MODE_SEL, F
MOVLW 5; MODE_SEL 1/4 САМО
SUBWF MODE_SEL, W
SKPZ
Гото MMODE_00
MOVLW 1
MOVWF MODE_SEL
Гото MMODE_00
MMODE_02

;------- ПО MODE_SEL Гото ----------
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
Гото ОСНОВНИ; 1 TACHO
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
Гото DST_MAIN; 2 DST
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
Гото SCT_MAIN; 3 SCT
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
Гото RECT_MAIN; 4 RECT
;------------------------------------

ОСНОВНИ
BSF PORTA, 4; OUT
5 V OFF
CALL CLEAR_DISPLAY; CLEAR указват
MOVLW 0
CALL DDRAM_ADDRESS
MOVLW 1
CALL MODE_ADDRESS; GET MODE ИМЕ НАЧАЛОТО
CALL DISP_MESSAGE; режим ИМЕ

BSF статус, RP0; SET 3,5 позволяват BANK1
MOVLW B'10000101 "
MOVWF OPTIONF; INTERNAT часовник, TRM0, 1:64
BCF статус, RP0; даде възможност BANK0
CLRF DD1; указват ДАННИТЕ
CLRF DD2
CLRF DD3
MOVLW 1; DEFAULT 2 напусне
MOVWF MODE_SEL
Гото T_SEL
MAIN01
MOVLW ОПМ; 75
MOVWF TMR0
MOVLW TCNT; зависи от напусне
MOVWF TCNT0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; позволяват INT
;----------------------------------
MAIN1
BTFSC FLAG_REG, TACHO_SEL
Гото T_SEL
BTFSS PORTA, 2
Гото START
BTFSC PORTA, 0; АКО вход = 0, ПРЕСКОЧИ
Гото MAIN1
MAIN2
BTFSC FLAG_REG, TACHO_SEL
Гото T_SEL
BTFSS PORTA, 2
Гото START
BTFSS PORTB, 0; АКО вход = 1, ПРЕСКОЧИ
Гото MAIN2
MAIN3 INCF DD3, F
MOVLW H'0A "
SUBWF DD3, W
SKPZ; DIGITAL 1 = А, трябва да AJUST
Гото MAIN1
CLRF DD3
INCF DD2, F
MOVLW H'0A "
SUBWF DD2, W
SKPZ; DIGITAL 1 = А, трябва да AJUST
Гото MAIN1
CLRF DD2
INCF DD1, F; DIGITAL 3 НЯМА ДА> 9, SO NO CHECK
Гото MAIN1

;------------------------------------
;------ TACHO MODE ИЗБЕРИ -----------
T_SEL
BCF FLAG_REG, TACHO_SEL
BCF INTCON, GIE
INCF MODE_SEL, F
MOVLW 6; MODE_SEL 2/5 САМО
SUBWF MODE_SEL, W
SKPZ
Гото T_SEL1
MOVLW 2
MOVWF MODE_SEL
T_SEL1
MOVLW H'40 "
CALL DDRAM_ADDRESS
MOVLW H'30 "; КОНВЕРТИРАНЕ Hex ДА ASCII
ADDWF MODE_SEL, W; КОНВЕРТИРАНЕ Hex ДА ASCII
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "Б"
CALL PRINT_CHAR
MOVLW "S"
CALL PRINT_CHAR

;------- ПО MODE_SEL Гото ----------
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
Гото TMODE_2; 2 напусне
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
Гото TMODE_3; 3
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
Гото TMODE_4; 4
;------------------------------------
TMODE_5; 5
MOVLW TCNT_5
MOVWF TCNT
Гото T_SEL_5
TMODE_4
MOVLW TCNT_4
MOVWF TCNT
Гото T_SEL_5
TMODE_3
MOVLW TCNT_3
MOVWF TCNT
Гото T_SEL_5
TMODE_2
MOVLW TCNT_2
MOVWF TCNT
Гото T_SEL_5
T_SEL_5
MOVLW D'50 '; 0,01 Второ * 50
CALL LOOP_L
BTFSS PORTA, 1
Гото T_SEL; ПРОМЯНА MODE
Гото MAIN01

;------ КРАЯ НА тахометер --------------
;================================================= ===
DST_MAIN
BCF PORTA, 4; OUT
5 V Включи
BSF FLAG_REG, F_TDST; АКО SET Гото DST MODE
CALL CLEAR_DISPLAY; CLEAR указват
MOVLW 0
CALL DDRAM_ADDRESS

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

BSF статус, RP0; SET 3,5 позволяват BANK1
MOVLW B'10000111 "
MOVWF OPTIONF; INTERNAT часовник, TRM0, 1:256
BCF статус, RP0; даде възможност BANK0
MOVLW TMR1; 256 * 78 = 19968 нас
MOVWF TMR0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; позволяват INTCLRF MODE_SEL
;-----------------------------------------------
MODE_0
INCF MODE_SEL, F
MOVLW 7; MODE_SEL 1/5 САМО
SUBWF MODE_SEL, W
SKPZ
Гото MODE_01
MOVLW 1
MOVWF MODE_SEL

;------- ПО MODE_SEL Гото ----------
MODE_01
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
Гото MODE_1; НАРЪЧНИК
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
Гото MODE_3; FSAT
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
Гото MODE_4; MIDDLE
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
Гото MODE_2; СЛУУ
MOVLW 5
SUBWF MODE_SEL, W
SKPNZ
Гото MODE_5; Случайни
Гото MODE_6; ESCAPE
;-------------------------------------------------
MODE_1
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW "М"
CALL PRINT_CHAR
MOVLW "А"
CALL PRINT_CHAR
MOVLW "N"
CALL PRINT_CHAR
MOVLW "U"
CALL PRINT_CHAR
MOVLW "А"
CALL PRINT_CHAR
MOVLW "L"
CALL PRINT_CHAR
MOVLW BDELAY
CALL LOOP_L
MODE_10
MOVLW D'150 '
MOVWF PWM_C
MODE_11
BTFSS PORTA, 0
Гото INC_B
BTFSS PORTA, 2
Гото DEC_B
BTFSS PORTA, 1
Гото CENT_B
CLRF PUSH_C
Гото MODE_11
INC_B MOVLW RLIMIT
SUBWF PWM_C, W
SKPNZ
Гото MODE_11; = RLIMIT, да не правят нищо
INCF PWM_C, F
MOVLW D'5 "; продължава 5 СТЪПКА, Ускорение
SUBWF PUSH_C, W
SKPNZ
Гото INC_B1;
MOVLW D'20 '; 0,2 Второ
CALL LOOP_L; 0,1 CALL Второ LOOP
INCF PUSH_C, F
Гото MODE_11
INC_B1; БЪРЗО Inc
MOVLW D'6 '
CALL LOOP_L; 0,06 Второ
Гото MODE_11
DEC_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
Гото MODE_11; = LLIMIT, да не правят нищо
DECF PWM_C, F
MOVLW D'5 "; продължава 5 СТЪПКА, Ускорение
SUBWF PUSH_C, W
SKPNZ
Гото DEC_B1;
MOVLW D'20 ';
CALL LOOP_L; 0,1 CALL Второ LOOP
INCF PUSH_C, F
Гото MODE_11
DEC_B1; БЪРЗО DEC
MOVLW D'6 '
CALL LOOP_L; 0,06 Второ
Гото MODE_11
CENT_B
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото MODE_0; ПРОМЯНА MODE
Гото MODE_10
;------------------------------------------------
MODE_2
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW "S"
CALL PRINT_CHAR
MOVLW "L"
CALL PRINT_CHAR
MOVLW "О"
CALL PRINT_CHAR
MOVLW "w"
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MODE_20; СЛУУ 10 Второ
MOVLW D'150 '
MOVWF PWM_C
BSF FLAG_REG, F_UP
MODE_21
BTFSS PORTA, 0
Гото INC_B2
BTFSS PORTA, 2
Гото MODE_21
BTFSS PORTA, 1
Гото CENT_B2
Гото MODE_21
INC_B2
MOVLW 2; 2 пъти
MOVWF PUSH_C
MOVLW 5
MOVWF INT_C
INC_B21
MOVF INT_C, W; 5 * 100 * 20mS = 10 Второ
SKPZ
Гото INC_B21

MOVLW 5; 5 * 100 * 20mS = 10 Второ
MOVWF INT_C
BTFSS FLAG_REG, F_UP; UP / DOWN?
Гото INC_B23; COUNT_DOWN
INC_B22
MOVLW RLIMIT; UP
SUBWF PWM_C, W
SKPNZ
Гото INC_B24; TURN_DOWN
INCF PWM_C, F
BTFSS PORTA, 2; STOP?
Гото MODE_21
Гото INC_B21
INC_B24; TURN_DOWN
BCF FLAG_REG, F_UP
INC_B23
MOVLW LLIMIT;
SUBWF PWM_C, W
SKPNZ
Гото INC_B25; TURN_UP
DECF PWM_C, F
BTFSS PORTA, 2; STOP?
Гото MODE_21
Гото INC_B21
INC_B25
BSF FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
Гото MODE_21
Гото INC_B22

CENT_B2
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото MODE_0; ПРОМЯНА MODE
Гото MODE_20

;------------------------
MODE_3
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW "F"
CALL PRINT_CHAR
MOVLW "А"
CALL PRINT_CHAR
MOVLW "S"
CALL PRINT_CHAR
MOVLW "T"
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR; БЪРЗО 0,5 Второ
MODE_30
MOVLW D'150 '
MOVWF PWM_C
MODE_31
BTFSS PORTA, 0
Гото INC_B3
BTFSS PORTA, 2
Гото MODE_31
BTFSS PORTA, 1
Гото CENT_B3
Гото MODE_31
INC_B3
MOVLW 5
MOVWF PUSH_C
INC_B31
MOVLW RLIMIT
MOVWF PWM_C
BTFSS PORTA, 2
Гото MODE_3
MOVLW D'45 '; 0.45SECOD
22 прекъсне
CALL LOOP_L; 0,1 CALL Второ LOOP
MOVLW LLIMIT
MOVWF PWM_C
BTFSS PORTA, 2
Гото MODE_3
MOVLW D'45 '
CALL LOOP_L
DECFSZ PUSH_C, F
Гото INC_B31
Гото MODE_3

CENT_B3
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото MODE_0; ПРОМЯНА MODE
Гото MODE_30

;------------------------
MODE_4; MID 2 Второ
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW "М"
CALL PRINT_CHAR
MOVLW "Аз"
CALL PRINT_CHAR
MOVLW "г"
CALL PRINT_CHAR
MOVLW "г"
CALL PRINT_CHAR
MOVLW "L"
CALL PRINT_CHAR
MOVLW "Е"
CALL PRINT_CHAR
MODE_40
MOVLW D'150 '
MOVWF PWM_C
BSF FLAG_REG, F_UP
MODE_41
BTFSS PORTA, 0
Гото INC_B4
BTFSS PORTA, 2
Гото MODE_41
BTFSS PORTA, 1
Гото CENT_B4
Гото MODE_41
INC_B4
MOVLW 5; 5 пъти
MOVWF PUSH_C
MOVLW 1
MOVWF INT_C
INC_B41
MOVF INT_C, W; 1 * 100 * 20mS = 2 Второ
SKPZ
Гото INC_B41

MOVLW 1; 1 * 100 * 20mS = 2 Второ
MOVWF INT_C
BTFSS FLAG_REG, F_UP; UP / DOWN?
Гото INC_B43; COUNT_DOWN
INC_B42
MOVLW RLIMIT; UP
SUBWF PWM_C, W
SKPNZ
Гото INC_B44; TURN_DOWN
INCF PWM_C, F
BTFSS PORTA, 2; STOP?
Гото MODE_41
Гото INC_B41
INC_B44; TURN_DOWN
BCF FLAG_REG, F_UP
INC_B43
MOVLW LLIMIT;
SUBWF PWM_C, W
SKPNZ
Гото INC_B45; TURN_UP
DECF PWM_C, F
BTFSS PORTA, 2; STOP?
Гото MODE_41
Гото INC_B41
INC_B45
BSF FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
Гото MODE_41
Гото INC_B42

CENT_B4
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото MODE_0; ПРОМЯНА MODE
Гото MODE_40
;------------------------------------------------- --------

MODE_5; Случайни
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW "R"
CALL PRINT_CHAR
MOVLW "А"
CALL PRINT_CHAR
MOVLW "N"
CALL PRINT_CHAR
MOVLW "г"
CALL PRINT_CHAR
MOVLW "О"
CALL PRINT_CHAR
MOVLW съм "
CALL PRINT_CHAR
MODE_50
MOVLW D'150 '
MOVWF PWM_C
MODE_51
DECFSZ RAND_LO, F; Случайна SEED GENERATOR
Гото MODE_52
DECF RAND_LO, F; MAKE SURE NO ZERO
DECFSZ RAND_HI, F
Гото MODE_52
DECF RAND_HI, F; MAKE SURE NO ZERO
MODE_52 BTFSS PORTA, 0
Гото INC_B5
BTFSS PORTA, 2
Гото MODE_51
BTFSS PORTA, 1
Гото CENT_B5
Гото MODE_51
INC_B5
MOVLW H'20 "; 20-30 Случайна ИЗПИТВАНЕ
MOVWF PUSH_C
INC_B51
MOVLW D'10 '; 10 импулси PER ПОЗИЦИЯ
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
Гото RANDOM16
MOVLW LLIMIT
SUBWF RAND_LO, W
SKPC; F> W, C = 1
Гото RANDOM16
MOVF RAND_LO, W
MOVWF PWM_C
INC_B52
MOVF INT_C, W
SKPZ
Гото INC_B52
BTFSS PORTA, 2; STOP?
Гото MODE_5
DECFSZ PUSH_C, F
Гото INC_B51
Гото MODE_51
CENT_B5
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото MODE_0; ПРОМЯНА MODE
Гото MODE_50

;---------------------------------
MODE_6; Случайни
MOVLW H'0 "
CALL DDRAM_ADDRESS
MOVLW "Q"
CALL PRINT_CHAR
MOVLW "U"
CALL PRINT_CHAR
MOVLW "Аз"
CALL PRINT_CHAR
MOVLW "T"
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR
MOVLW "
CALL PRINT_CHAR

MODE_61
BTFSS PORTA, 0
Гото START
BTFSC PORTA, 1
Гото MODE_61

MOVLW BDELAY
CALL LOOP_L
BTFSS PORTA, 1
Гото MODE_0
Гото MODE_61
;------ КРАЯ НА DST ---------------;----------------------------------
;----- SPEED Controller Tester --
SCT_MAIN
BSF PORTA, 4; OUT
5 V OFF
BSF FLAG_REG, F_TDST; АКО SET Гото DST MODE
CALL CLEAR_DISPLAY; CLEAR указват
MOVLW 0
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS; GET MODE ИМЕ НАЧАЛОТО
CALL DISP_MESSAGE; режим ИМЕ
MOVLW BDELAY
CALL LOOP_L
;-----------------------------------------------

BSF статус, RP0; SET 3,5 позволяват BANK1
MOVLW B'10000111 "
MOVWF OPTIONF; INTERNAT часовник, TRM0, 1:256
BCF статус, RP0; даде възможност BANK0
MOVLW TMR1; 256 * 78 = 19968 нас
MOVWF TMR0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; позволяват INT

;-------------------------------------------------
SCT_1
MOVLW D'100 '; МИНИМАЛНИ
MOVWF PWM_C
SCT_11
BTFSS PORTA, 0
Гото ISCT_B
BTFSS PORTA, 2
Гото DSCT_B
BTFSS PORTA, 1
Гото DCENT_B
CLRF PUSH_C
Гото SCT_11
ISCT_B MOVLW RLIMIT
SUBWF PWM_C, W
SKPNZ
Гото SCT_11; = RLIMIT, да не правят нищо
INCF PWM_C, F
MOVLW D'5 "; продължава 5 СТЪПКА, Ускорение
SUBWF PUSH_C, W
SKPNZ
Гото ISCT_B1;
MOVLW D'20 '; 0,2 Второ
CALL LOOP_L; 0,1 CALL Второ LOOP
INCF PUSH_C, F
Гото SCT_11
ISCT_B1; БЪРЗО Inc
MOVLW D'6 '
CALL LOOP_L; 0,06 Второ
Гото SCT_11
DSCT_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
Гото SCT_11; = LLIMIT, да не правят нищо
DECF PWM_C, F
MOVLW D'5 "; продължава 5 СТЪПКА, Ускорение
SUBWF PUSH_C, W
SKPNZ
Гото DSCT_B1;
MOVLW D'20 ';
CALL LOOP_L; 0,1 CALL Второ LOOP
INCF PUSH_C, F
Гото SCT_11
DSCT_B1; БЪРЗО DEC
MOVLW D'6 '
CALL LOOP_L; 0,06 Второ
Гото SCT_11
DCENT_B
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото START; ПРОМЯНА MODE
Гото SCT_1; Гото началото 1000uS

;------ КРАЯ НА SCT -----------------
;================================================= ======
RECT_MAIN
BSF PORTA, 4; OUT
5 V OFF
BSF FLAG_REG, F_TDST
BSF FLAG_REG, F_REC
CALL CLEAR_DISPLAY; CLEAR указват
MOVLW 0
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS; GET MODE ИМЕ НАЧАЛОТО
CALL DISP_MESSAGE; режим ИМЕ

BSF статус, RP0;
MOVLW B'10000000 "
MOVWF OPTIONF; INTERNAT часовник, TRM0, 1:2
MOVLW B'00001111 "; SET RA, 3 входа
MOVWF TRISA;
BCF статус, RP0;
CLRF PWM_C
BSF INTCON, TOIE
BSF INTCON, GIE; INT даде възможност да се покажат XXX нас
Ноември
Ноември
;--------------------------------
REC_0
BCF INTCON, TOIF
BCF INTCON, TOIE
BCF INTCON, GIE;

;------- START MEASURE -------------
REC_2
CLRF PWM_C
REC_3
BTFSS PORTA, 1
Гото REC_B
BTFSS PORTA, 3
Гото REC_3
REC_4
Ноември; 10 US LOOP
Ноември
Ноември
Ноември
INCF PWM_C, F
SKPNZ
Гото REC_ERROR; АКО PWM_C> 255, ERROR
BTFSC PORTA, 3
Гото REC_4
DECF PWM_C, F; ПРАВИЛНО 1-20 нас
Гото REC_5
REC_ERROR; АКО> 255 указват 255
MOVLW H'FF "
MOVWF PWM_C
REC_5
BSF INTCON, TOIE
BSF INTCON, GIE; INT даде възможност да се покажат XXX нас
Гото REC_0
REC_B
MOVLW BDELAY; 0,01 Второ * 40
CALL LOOP_L
BTFSS PORTA, 1
Гото START; CHANGR MODE за SCT MAUN
Гото RECT_MAIN;-------------------------------------------------

END

 

Welcome to EDABoard.com

Sponsor

Back
Top