ПОС 16F84A интерфейс отображения данных, пожалуйста помогите!

D

desmop

Guest
Здравствуйте,

Это мой первый пост в этом форуме, так что терпеть меня.Я работаю на написание кода для сборки на R / C microturbine тахометр.Я очень новой для этой темы, я действительно мог бы использовать некоторые помочь.Я использую ПОС 16F84A микро чип контроллера, compling язык с MPLAb IDE V 7.30 и собирать данные с Mplasm.У меня
возникают проблемы отображения данных на моем 8 х 2 LCD я могу показать только 5 цифр плюс тег "RPM".Только в первые 3 данные заполняются цифры последних двух просто печатный нуля.Так, как я есть программа, написанная в том, что она отображает RPM's
In 100.Существует на второй строке дисплея в slectable число лопастей.Я хочу иметь возможность отображать более
99900 пакетов, но я могу цифра правильный способ сделать это.Я все время собирается в круг, и необходима некоторая помощь от тех, которые имеют опыт.Я придает АНМ файл для оценки и предложения.Спасибо заранее!

 
Привет,

Интересный проект, но я не вижу каких-либо вложений: /Цитата:

Только в первые 3 данные заполняются цифры последних двух просто печатный нуля.
 
Кодекс размещен в ПОС 16F84A отображения интерфейса данных проблема .....

СПИСОК P = 16F84A, R = HEX; 16F84A Работает на 4 МГц
; INCLUDE "P16F84A.inc"
; LCD Тахометр ПО R / C ОБРАЗЕЦ ТУРБИННЫХ ДВИГАТЕЛЕЙ
; Десмонд, P
;
; 16F84A Из Pin
;
; 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 V
; Pin 6: RB0/INT Pin 15: OSC2/CLKOUT
; Pin 7: RB1 N / A Контакт 16: OSC1/CLKIN
; Pin 8: RB2 Pin 17: RA0
; Пин 9: RB3 Pin 18: RA1
;
Версия 3.25: 05/11/2006 Обновление для KJ66
;
;------- СИСТЕМА ---------------------
__CONFIG H'3FF1 '
;------- DEFINE RAM ------------
TMR0 EQU 1; TIMER 0
PC EQU 2; Счетчик
Статус EQU 3
FSR EQU 4; буфер НЕПРЯМОГО ADDR
PORTA EQU 5
PORTB EQU 6
EEDATA EQU 8; EEPROM ДАННЫХ
EEADR EQU 9; EEPROM ADDR
PCLATH EQU H'A '
INTCON EQU H'B '; прерываниями
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

;------- DEFINE BIT -------------
;
C EQU 0
W EQU 0; D ЗНАЧЕНИЕ ДЛЯ INCF ......
F EQU 1; D VALUE
OFF EQU 0; FLAG BIT 0,
RP0 EQU 5; СТАТУС BIT 5
И 6 = РЕГИСТРАЦИЯ БАНКА SELECT
RP1 EQU 6
INPUT EQU 7; RB7 качестве входных порта
TOIF EQU 2; INTCON TMR0 OVERLOW INT FLAG
TOIE EQU 5; INTCON TOIF ENABLE
GIE EQU 7; INTCON GLOBAL INT ENABLE

;------- ПОЛЬЗОВАТЕЛЬ -------------------------------------
;------- РЕГИСТРОВ ------
;
TCNT0 EQU H'C '; = (0.6SEC / INT * * PRESCAL CLOCK)
INTR0 EQU H'D '; ПОСЛЕ INT,
сохранить W VALUE
INTR1 EQU H'E '; ПОСЛЕ INT,
сохранить СТАТУС
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 EVERY INT_DST
INT_C EQU H'16 '; 0-255 -1 EVERY 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 ODD КОДЕКС
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 '; SERVO LIMIT
LLIMIT EQU D'100 '

;------- LCD Сутину -------------------------
;------- РЕГИСТРОВ ---------
;
Адрес1 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 НАЧАЛО
GOTO НАЧАЛО
;----------------------------------------
;
ORG 4; Interrupt BEGIN

INTB MOVWF INTR0; SAVE W
MOVF STATUS, W; СОХРАНИТЬ СТАТУС
MOVWF INTR1
РМДС СТАТУС, RP0; УБЕДИТЕСЬ В ТОМ, ЧТО ВЫБОР BANK0
CHECK_TDST
BTFSC FLAG_REG, F_TDST; если установлен GOTO DST MODE
GOTO INT_DST

;----------------------------------
Тахометр ;----- Interrupt -----------

INT_TACHO
MOVLW ПМР; RESTORE TIMER0
MOVWF TMR0;
DECFSZ TCNT0, F; SKIP IF ZERO
GOTO намерены
RELOAD MOVF TCNT, W; RELOAD 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 'M'
CALL PRINT_CHAR
RESET_COUNT
CLRF DD1; отображения данных
CLRF DD2
CLRF DD3;------ LEAF MODE SELECT --------
BTFSS PORTA, 1; выбрать?
БСФ FLAG_REG, TACHO_SEL
MOVLW ПМР; RESTORE TIMER0
MOVWF TMR0;
GOTO намерены

;------ END OF 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 STATUS, C; отрицательный результат?
GOTO H2, нет?GOTO H2
GOTO H3; ДА?GOTO H3 (100 DDD3)
H2 INCF DD1, F; Прирост DD1 РЕГИСТР
GOTO H1;
И LOOP BACK еще TEST
H3 MOVLW 0x64; 100
ADDWF DD3, Ж,
добавить 100 BACK TO НОМЕР

T1 MOVLW 0x0A 10;
SUBWF DD3, F; вычесть из числа 10
BTFSC STATUS, C; отрицательный результат?
GOTO T2, нет?GOTO T2
GOTO T3; ДА?GOTO T3 (10'S DDD3)
T2 INCF DD2, F; Прирост DD2 РЕГИСТР
GOTO T1;
И LOOP BACK еще TEST
T3 MOVLW 0x0A 10;
ADDWF DD3, Ж,
добавить 10 BACK TO НОМЕР
;------------------------------------------------- --
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
GOTO намерены
БСФ PORTA, 3
INT_DST1 10; США LOOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMP1, F
GOTO INT_DST1; END OF LOOP
РМДС PORTA, 3
DECF INT_C, Ж,
повышение INT_COUNTER

;-------------------------------------
Намерен
MOVF INTR1, W; ВОССТАНОВИТЬ СТАТУС
MOVWF СТАТУС
MOVF INTR0, W; RESTORE W
РМДС INTCON, TOIF; RESET флаг INT T0
RETFIE
;
;
;-------------------------------------------------
;============================================
; LCD Сутин

;================================================= =============
PRINT_DATA
БСФ PORTB, 2; RS = 1, DATA
MOVWF Адрес1
БСФ Адрес1, 2
MOVF Адрес1, 0
MOVWF PORTB
БСФ PORTB, 3
NOP
РМДС PORTB, 3
CALL LOOP_S 100 США
RETURN

PRINT_CONT
MOVWF PORTB
БСФ PORTB, 3
РМДС PORTB, 3
CALL LOOP_S 100 США
RETURN

CLEAR_DISPLAY
MOVLW B'00000000 '; 0
CALL PRINT_CONT
MOVLW B'00010000 '1; CLEAR
CALL PRINT_CONT
MOVLW 1
CALL LOOP_L; 10МС
RETURN

DDRAM_ADDRESS
MOVWF Адрес1
БСФ Адрес1, 7
MOVF Адрес1, 0
ANDLW B'11110000 ';
CALL PRINT_CONT
SWAPF Адрес1, W; SWAP половинки F
ANDLW B'11110000 ';
CALL PRINT_CONT
RETURN

PRINT_CHAR
MOVWF CHAR1
ANDLW B'11110000 ';
CALL PRINT_DATA
SWAPF CHAR1, W; SWAP половинки F
ANDLW B'11110000 '; SENT LOW 4 бита
CALL PRINT_DATA
RETURN

LOOP_S; 100uS LOOP
MOVLW D'33 '
MOVWF TEMP4_LCD
LOOP_S1
DECFSZ TEMP4_LCD, 1;
GOTO LOOP_S1
RETURN

LOOP_L; 10 мс LOOP
MOVWF TEMP1_LCD
LOOP_L1
MOVLW D'10 '; 10 мс
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
RETURN

DISP_MESSAGE
MOVWF TABLE_INDEX; W -> индекс, BEGIN сообщения
CALL MESSAGE1
ANDLW 0FFH
SKPNZ,
если ТАБЛИЦА RETURN 0, END сообщения РАЗДЕЛ
RETURN
CALL PRINT_CHAR; DOSPLAY
INCF TABLE_INDEX, 0
GOTO DISP_MESSAGE
;================================================= ===
MODE_ADDRESS

ADDWF ПК, Ж
RETLW 0
RETLW 0
RETLW D'9 '
RETLW D'18 '
RETLW D'27 '

MESSAGE1

ADDWF ПК, Ж
RETLW 'T'
RETLW 'а'
RETLW 'C'
RETLW 'H'
RETLW 'O'
RETLW ''
RETLW ''
RETLW ''
RETLW 0
RETLW 'S' 9;
RETLW 'E'
RETLW 'R'
RETLW 'V'
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 'V'
RETLW 'E'
RETLW 'R'
RETLW 0

NOP; 36;=======================================
;---------- ПРОГРАММА BEGIN -----------
;----------------------------------------
;

НАЧАЛО
БСФ СТАТУС, RP0; 3,5 SET ENABLE BANK1
MOVLW B'00000001 '
MOVWF TRISB; SET РБ OUTPUT 1-7, 0 INPUT
MOVLW B'00000111 '
MOVWF TRISA; SET RA0-RA2 INTPUT, RA3, RA4 OUTPUT
РМДС СТАТУС, RP0; ENABLE BANK0
РМДС PORTA, 3; OUT PWM
БСФ PORTA, 4; OUT 5 V ВЫКЛ
CLRF PORTB
РМДС INTCON, GIE
CLRF FLAG_REG
MOVLW D'150 '
MOVWF PWM_C

INIT_LCD
MOVLW 5; POWER ON DELAY 50mS
CALL LOOP_L
SET_4BIT_MOD; SET LCD НА 4 бита ОБРАЗЕЦ
MOVLW B'00110000 '3;
CALL PRINT_CONT
MOVLW 1
CALL LOOP_L; 10МС
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 строки,
шрифт 0
CALL PRINT_CONT

INIT_DISPLAY
MOVLW B'00000000 '; O
CALL PRINT_CONT
MOVLW B'11000000 '; C НА ЭКРАН, CURSOR НЕТ, НЕТ Мигает
CALL PRINT_CONT
CALL CLEAR_DISPLAY; CLEAR DISPLAYMOVLW ''
CALL PRINT_CHAR
MOVLW 'K'
CALL PRINT_CHAR
MOVLW 'J'; DISPLAY ПЕРВЫЙ РАЗДЕЛ СООБЩЕНИЕ
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 'D'
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; DELAY 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 NAME НАЧАЛО
CALL DISP_MESSAGE; DISPLAY MODE NAME
MOVLW D'50 '
CALL LOOP_L; 1.0 ВТОРОЙ CHANGE MODE
BTFSS PORTA, 1
GOTO MMODE_01; PUSH, следующем режиме
BTFSS PORTA, 0
GOTO MMODE_02; SELECT PUSH,

GOTO MMODE_00
MMODE_01
INCF MODE_SEL, F
MOVLW 5; MODE_SEL 1-4 ТОЛЬКО
SUBWF MODE_SEL, W
SKPZ
GOTO MMODE_00
MOVLW 1
MOVWF MODE_SEL
GOTO MMODE_00
MMODE_02

;------- ПО MODE_SEL GOTO ----------
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
ГЛАВНАЯ GOTO 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
;------------------------------------

ГЛАВНАЯ
БСФ PORTA, 4; OUT 5 V ВЫКЛ
CALL CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS
MOVLW 1
CALL MODE_ADDRESS; GET MODE NAME НАЧАЛО
CALL DISP_MESSAGE; DISPLAY MODE NAME

БСФ СТАТУС, RP0; 3,5 SET ENABLE BANK1
MOVLW B'10000101 '
MOVWF OPTIONF; INTERNAT часы, TRM0, 1:64
РМДС СТАТУС, RP0; ENABLE BANK0
CLRF DD1; отображения данных
CLRF DD2
CLRF DD3
MOVLW 1; DEFAULT 2 ЛИСТЬЯХ
MOVWF MODE_SEL
GOTO T_SEL
MAIN01
MOVLW ПМР; 75
MOVWF TMR0
MOVLW TCNT; зависеть от ЛИСТЬЯХ
MOVWF TCNT0
РМДС INTCON, TOIF
БСФ INTCON, TOIE
БСФ INTCON, GIE; ENABLE INT
;----------------------------------
Main1
BTFSC FLAG_REG, TACHO_SEL
GOTO T_SEL
BTFSS PORTA, 2
GOTO НАЧАЛО
BTFSC PORTA, 0; IF INPUT = 0, SKIP
GOTO main1
MAIN2
BTFSC FLAG_REG, TACHO_SEL
GOTO T_SEL
BTFSS PORTA, 2
GOTO НАЧАЛО
BTFSS PORTB, 0; IF INPUT = 1, SKIP
GOTO MAIN2
MAIN3 INCF DD3, F
MOVLW H'0A '
SUBWF DD3, W
SKPZ; DIGITAL 1 = A, должны AJUST
GOTO main1
CLRF DD3
INCF DD2, F
MOVLW H'0A '
SUBWF DD2, W
SKPZ; DIGITAL 1 = A, должны AJUST
GOTO main1
CLRF DD2
INCF DD1, F; DIGITAL НЕ 3> 9, SO NO CHECK
GOTO main1

;------------------------------------
;------ TACHO MODE SELECT -----------
T_SEL
РМДС FLAG_REG, TACHO_SEL
РМДС INTCON, GIE
INCF MODE_SEL, F
MOVLW 6; MODE_SEL 2-5 ТОЛЬКО
SUBWF MODE_SEL, W
SKPZ
GOTO T_SEL1
MOVLW 2
MOVWF MODE_SEL
T_SEL1
MOVLW H'40 '
CALL DDRAM_ADDRESS
MOVLW H'30 '; CONVERT HEX К ASCII
ADDWF MODE_SEL, W; CONVERT HEX К ASCII
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR
MOVLW 'B'
CALL PRINT_CHAR
MOVLW 'S'
CALL PRINT_CHAR

;------- ПО MODE_SEL GOTO ----------
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
GOTO TMODE_2 2; ЛИСТЬЯХ
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 ВТОРОЙ * 50
CALL LOOP_L
BTFSS PORTA, 1
GOTO T_SEL; CHANGE MODE
GOTO MAIN01

;------ END OF Тахометр --------------
;================================================= ===
DST_MAIN
РМДС PORTA, 4; OUT 5 V TURN ПО
БСФ FLAG_REG, F_TDST; если установлен GOTO DST MODE
CALL CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS

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

БСФ СТАТУС, RP0; 3,5 SET ENABLE BANK1
MOVLW B'10000111 '
MOVWF OPTIONF; INTERNAT часы, TRM0, 1:256
РМДС СТАТУС, RP0; ENABLE BANK0
MOVLW TMR1; 256 * 78 = 19968 США
MOVWF TMR0
РМДС INTCON, TOIF
БСФ INTCON, TOIE
БСФ INTCON, GIE; ENABLE INTCLRF MODE_SEL
;-----------------------------------------------
MODE_0
INCF MODE_SEL, F
MOVLW 7; MODE_SEL 1-5 ТОЛЬКО
SUBWF MODE_SEL, W
SKPZ
GOTO MODE_01
MOVLW 1
MOVWF MODE_SEL

;------- ПО MODE_SEL GOTO ----------
MODE_01
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_1; РУКОВОДСТВО
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_3; FSAT
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_4; БЛИЖНЕМ
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_2; SLOW
MOVLW 5
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_5; RANDOM
GOTO MODE_6; ESCAPE
;-------------------------------------------------
MODE_1
MOVLW H'0 '
CALL DDRAM_ADDRESS
MOVLW 'M'
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
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, ничего не делать
INCF PWM_C, F
MOVLW D'5 '; ПРОДОЛЖИТЬ ШАГ 5,
ускорениеSUBWF PUSH_C, W
SKPNZ
GOTO INC_B1;
MOVLW D'20 '; 0,2
секундыCALL LOOP_L; CALL 0,1
секунды LOOP
INCF PUSH_C, F
GOTO MODE_11
INC_B1; FAST МКП
MOVLW D'6 '
CALL LOOP_L; 0.06 ВТОРОЙ
GOTO MODE_11
DEC_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
GOTO MODE_11; = LLIMIT, ничего не делать
DECF PWM_C, F
MOVLW D'5 '; ПРОДОЛЖИТЬ ШАГ 5,
ускорениеSUBWF PUSH_C, W
SKPNZ
GOTO DEC_B1;
MOVLW D'20 ';
CALL LOOP_L; CALL 0,1
секунды LOOP
INCF PUSH_C, F
GOTO MODE_11
DEC_B1; FAST DEC
MOVLW D'6 '
CALL LOOP_L; 0.06 ВТОРОЙ
GOTO MODE_11
CENT_B
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; CHANGE MODE
GOTO MODE_10
;------------------------------------------------
MODE_2
MOVLW H'0 '
CALL DDRAM_ADDRESS
MOVLW 'S'
CALL PRINT_CHAR
MOVLW 'L'
CALL PRINT_CHAR
MOVLW 'O'
CALL PRINT_CHAR
MOVLW 'W'
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR
MODE_20; SLOW 10 секунд
MOVLW D'150 '
MOVWF PWM_C
БСФ 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 раза
MOVWF PUSH_C
MOVLW 5
MOVWF INT_C
INC_B21
MOVF INT_C, W; 5 * 100 * 10 = 20mS ВТОРОЙ
SKPZ
GOTO INC_B21

MOVLW 5; 5 * 100 * 10 = 20mS ВТОРОЙ
MOVWF INT_C
BTFSS FLAG_REG, F_UP; UP / DOWN?
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; СТОП?
GOTO MODE_21
GOTO INC_B21
INC_B24; TURN_DOWN
РМДС 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; СТОП?
GOTO MODE_21
GOTO INC_B21
INC_B25
БСФ FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
GOTO MODE_21
GOTO INC_B22

CENT_B2
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; CHANGE MODE
GOTO 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 'т'
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR; FAST 0,5 ВТОРОЙ
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 Interrupt
CALL LOOP_L; CALL 0,1
секунды LOOP
MOVLW LLIMIT
MOVWF PWM_C
BTFSS PORTA, 2
GOTO MODE_3
MOVLW D'45 '
CALL LOOP_L
DECFSZ PUSH_C, F
GOTO INC_B31
GOTO MODE_3

CENT_B3
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; CHANGE MODE
GOTO MODE_30

;------------------------
MODE_4; MID 2 ВТОРОЙ
MOVLW H'0 '
CALL DDRAM_ADDRESS
MOVLW 'M'
CALL PRINT_CHAR
MOVLW 'я'
CALL PRINT_CHAR
MOVLW 'D'
CALL PRINT_CHAR
MOVLW 'D'
CALL PRINT_CHAR
MOVLW 'L'
CALL PRINT_CHAR
MOVLW 'E'
CALL PRINT_CHAR
MODE_40
MOVLW D'150 '
MOVWF PWM_C
БСФ 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 раз
MOVWF PUSH_C
MOVLW 1
MOVWF INT_C
INC_B41
MOVF INT_C, Вт, 1 * 100 * 20mS = 2 ВТОРОЙ
SKPZ
GOTO INC_B41

MOVLW 1; 1 * 100 * 20mS = 2 ВТОРОЙ
MOVWF INT_C
BTFSS FLAG_REG, F_UP; UP / DOWN?
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; СТОП?
GOTO MODE_41
GOTO INC_B41
INC_B44; TURN_DOWN
РМДС 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; СТОП?
GOTO MODE_41
GOTO INC_B41
INC_B45
БСФ FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
GOTO MODE_41
GOTO INC_B42

CENT_B4
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; CHANGE MODE
GOTO 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 'D'
CALL PRINT_CHAR
MOVLW 'O'
CALL PRINT_CHAR
MOVLW 'M'
CALL PRINT_CHAR
MODE_50
MOVLW D'150 '
MOVWF PWM_C
MODE_51
DECFSZ RAND_LO, F; SEED RANDOM GENERATOR
GOTO MODE_52
DECF RAND_LO, F; УБЕДИТЕСЬ В ТОМ, ЧТО НЕТ ZERO
DECFSZ RAND_HI, F
GOTO MODE_52
DECF RAND_HI, F; УБЕДИТЕСЬ В ТОМ, ЧТО НЕТ 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 выборочное испытание
MOVWF PUSH_C
INC_B51
MOVLW D'10 '10; PULSES 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
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; СТОП?
GOTO MODE_5
DECFSZ PUSH_C, F
GOTO INC_B51
GOTO MODE_51
CENT_B5
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; CHANGE MODE
GOTO 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 'т'
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR
MOVLW ''
CALL PRINT_CHAR

MODE_61
BTFSS PORTA, 0
GOTO НАЧАЛО
BTFSC PORTA, 1
GOTO MODE_61

MOVLW BDELAY
CALL LOOP_L
BTFSS PORTA, 1
GOTO MODE_0
GOTO MODE_61
;------ END OF DST ---------------;----------------------------------
;----- SPEED CONTROLLER TESTER --
SCT_MAIN
БСФ PORTA, 4; OUT 5 V ВЫКЛ
БСФ FLAG_REG, F_TDST; если установлен GOTO DST MODE
CALL CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS; GET MODE NAME НАЧАЛО
CALL DISP_MESSAGE; DISPLAY MODE NAME
MOVLW BDELAY
CALL LOOP_L
;-----------------------------------------------

БСФ СТАТУС, RP0; 3,5 SET ENABLE BANK1
MOVLW B'10000111 '
MOVWF OPTIONF; INTERNAT часы, TRM0, 1:256
РМДС СТАТУС, RP0; ENABLE BANK0
MOVLW TMR1; 256 * 78 = 19968 США
MOVWF TMR0
РМДС INTCON, TOIF
БСФ INTCON, TOIE
БСФ INTCON, GIE; ENABLE INT

;-------------------------------------------------
SCT_1
MOVLW D'100 '; МИНИМАЛЬНЫЕ
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, ничего не делать
INCF PWM_C, F
MOVLW D'5 '; ПРОДОЛЖИТЬ ШАГ 5,
ускорениеSUBWF PUSH_C, W
SKPNZ
GOTO ISCT_B1;
MOVLW D'20 '; 0,2
секундыCALL LOOP_L; CALL 0,1
секунды LOOP
INCF PUSH_C, F
GOTO SCT_11
ISCT_B1; FAST МКП
MOVLW D'6 '
CALL LOOP_L; 0.06 ВТОРОЙ
GOTO SCT_11
DSCT_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
GOTO SCT_11; = LLIMIT, ничего не делать
DECF PWM_C, F
MOVLW D'5 '; ПРОДОЛЖИТЬ ШАГ 5,
ускорениеSUBWF PUSH_C, W
SKPNZ
GOTO DSCT_B1;
MOVLW D'20 ';
CALL LOOP_L; CALL 0,1
секунды LOOP
INCF PUSH_C, F
GOTO SCT_11
DSCT_B1; FAST DEC
MOVLW D'6 '
CALL LOOP_L; 0.06 ВТОРОЙ
GOTO SCT_11
DCENT_B
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO СНВ; CHANGE MODE
GOTO SCT_1; GOTO начала 1000uS

;------ END OF СЦТ -----------------
;================================================= ======
RECT_MAIN
БСФ PORTA, 4; OUT 5 V ВЫКЛ
БСФ FLAG_REG, F_TDST
БСФ FLAG_REG, F_REC
CALL CLEAR_DISPLAY; CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS; GET MODE NAME НАЧАЛО
CALL DISP_MESSAGE; DISPLAY MODE NAME

БСФ СТАТУС, RP0;
MOVLW B'10000000 '
MOVWF OPTIONF; INTERNAT часы, TRM0, 1:2
MOVLW B'00001111 '; SET РА, 3 INPUT
MOVWF TRISA;
РМДС СТАТУС, RP0;
CLRF PWM_C
БСФ INTCON, TOIE
БСФ INTCON, GIE; ENABLE INT Для отображения XXX США
NOP
NOP
;--------------------------------
REC_0
РМДС INTCON, TOIF
РМДС INTCON, TOIE
РМДС INTCON, GIE;

;------- СНВ MEASURE -------------
REC_2
CLRF PWM_C
REC_3
BTFSS PORTA, 1
GOTO REC_B
BTFSS PORTA, 3
GOTO REC_3
REC_4
NOP; 10 США LOOP
NOP
NOP
NOP
INCF PWM_C, F
SKPNZ
GOTO REC_ERROR,
если PWM_C> 255, ОШИБКА
BTFSC PORTA, 3
GOTO REC_4
DECF PWM_C, F; ПРАВИЛЬНОСТИ 1-20 США
GOTO REC_5
REC_ERROR,
а если> 255 DISPLAY 255
MOVLW H'FF '
MOVWF PWM_C
REC_5
БСФ INTCON, TOIE
БСФ INTCON, GIE; ENABLE INT Для отображения XXX США
GOTO REC_0
REC_B
MOVLW BDELAY; 0,01 ВТОРОЙ * 40
CALL LOOP_L
BTFSS PORTA, 1
GOTO СНВ; CHANGR режим СЦТ Маун
GOTO RECT_MAIN;-------------------------------------------------

КОНЕЦ

 

Welcome to EDABoard.com

Sponsor

Back
Top