Вт май 28, 2019 02:41:15
Чт янв 07, 2021 17:15:28
Сб фев 27, 2021 19:30:19
#include "p18f452.inc"
;----------
; CONFIG1H
CONFIG OSC = HSPLL ; Oscillator Selection bits (HS oscillator with PLL enabled/Clock frequency = (4 x FOSC))
CONFIG OSCS = OFF ; Oscillator System Clock Switch Enable bit (Oscillator system clock switch option is disabled (main oscillator is source))
; CONFIG2L
CONFIG PWRT = ON ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOR = OFF ; Brown-out Reset Enable bit (Brown-out Reset enabled)
CONFIG BORV = 20 ; Brown-out Reset Voltage bits (VBOR set to 2.0V)
; CONFIG2H
CONFIG WDT = OFF ; Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
CONFIG WDTPS = 128 ; Watchdog Timer Postscale Select bits (1:128)
; CONFIG3H
CONFIG CCP2MUX = OFF ; CCP2 Mux bit (CCP2 input/output is multiplexed with RB3)
; CONFIG4L
CONFIG STVR = OFF ; Stack Full/Underflow Reset Enable bit (Stack Full/Underflow will not cause RESET)
CONFIG LVP = ON ; Low Voltage ICSP Enable bit (Low Voltage ICSP enabled)
; CONFIG5L
CONFIG CP0 = OFF ; Code Protection bit (Block 0 (000200-001FFFh) not code protected)
CONFIG CP1 = OFF ; Code Protection bit (Block 1 (002000-003FFFh) not code protected)
CONFIG CP2 = OFF ; Code Protection bit (Block 2 (004000-005FFFh) not code protected)
CONFIG CP3 = OFF ; Code Protection bit (Block 3 (006000-007FFFh) not code protected)
; CONFIG5H
CONFIG CPB = OFF ; Boot Block Code Protection bit (Boot Block (000000-0001FFh) not code protected)
CONFIG CPD = OFF ; Data EEPROM Code Protection bit (Data EEPROM not code protected)
; CONFIG6L
CONFIG WRT0 = OFF ; Write Protection bit (Block 0 (000200-001FFFh) not write protected)
CONFIG WRT1 = OFF ; Write Protection bit (Block 1 (002000-003FFFh) not write protected)
CONFIG WRT2 = OFF ; Write Protection bit (Block 2 (004000-005FFFh) not write protected)
CONFIG WRT3 = OFF ; Write Protection bit (Block 3 (006000-007FFFh) not write protected)
; CONFIG6H
CONFIG WRTC = OFF ; Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write protected)
CONFIG WRTB = OFF ; Boot Block Write Protection bit (Boot Block (000000-0001FFh) not write protected)
CONFIG WRTD = OFF ; Data EEPROM Write Protection bit (Data EEPROM not write protected)
; CONFIG7L
CONFIG EBTR0 = OFF ; Table Read Protection bit (Block 0 (000200-001FFFh) not protected from Table Reads executed in other blocks)
CONFIG EBTR1 = OFF ; Table Read Protection bit (Block 1 (002000-003FFFh) not protected from Table Reads executed in other blocks)
CONFIG EBTR2 = OFF ; Table Read Protection bit (Block 2 (004000-005FFFh) not protected from Table Reads executed in other blocks)
CONFIG EBTR3 = OFF ; Table Read Protection bit (Block 3 (006000-007FFFh) not protected from Table Reads executed in other blocks)
; CONFIG7H
CONFIG EBTRB = OFF ; Boot Block Table Read Protection bit (Boot Block (000000-0001FFh) not protected from Table Reads executed in other blocks)
;=========================
; ПЕРЕМЕННЫЕ
;=========================
CBLOCK H'10'
n ;ДЛЯ ВСЯКОЙ ЕРУНДЫ
Reg_1
Reg_2
Reg_3 ;РЕГИСТРЫ ДЛЯ РАЗНЫХ ЦЕЛЕЙ
data_USART
ENDC
CBLOCK H'80'
W_TEMP ;variable used for context saving
STATUS_TEMP ;variable used for context saving
BSR_TEMP ;variable used for context saving
ENDC
; CBLOCK H'100'
; pix_RGB : 162 ;ПЕРЕМЕННЫЕ ПИКСЕЛЕЙ (ПО ТРИ БАЙТА RBG) ОЧЕРЕДНОСТЬ G-R-B
; ENDC ;54*3=162
;=========================
; КОНСТАНТЫ
;=========================
; ВЫХОДЫ
;----------
#DEFINE LED_RED LATD,6 ;КРАСНЫЙ СВЕТОДИОД НА ПЛАТЕ
#DEFINE LED_GREEN LATD,7 ;ЗЕЛЁНЫЙ СВЕТОДИОД НА ПЛАТЕ
#DEFINE LED_BLUE LATB,4 ;СИНИЙ СВЕТОДИОД НА ПЛАТЕ
;----------
; ВХОДЫ
;----------
#DEFINE ENCODER1 PORTC,1 ;ЭНКОДЕР
#DEFINE ENCODER2 PORTC,2 ;ЭНКОДЕР
;----------
BSR_SFR EQU .1 ;ВЫБОР БАНКА SFR
;=========================
; ДАННЫЕ EEPROM
;=========================
DATAEE ORG 0XF00000
DE "CubikRubik"
DE "titr" ; Place 't' 'i' 't' 'r'
DE H'2B',H'BB',H'BB',H'00',H'55',H'88',H'00',H'11'
DE .255,.255,.128,.0,.49,.99,.52,.126
;=========================
ORG H'0' ; processor reset vector
NOP
GOTO START ; go to beginning of program
;----------
; ПРЕРЫВАНИЕ
ORG H'8'
MOVFF STATUS,STATUS_TEMP ;SAVE STATUS REGISTER
MOVFF WREG,W_TEMP ;SAVE WORKING REGISTER
MOVFF BSR,BSR_TEMP ;SAVE BSR REGISTER
MOVF RCREG,W
MOVWF data_USART
MOVFF BSR_TEMP,BSR ;RESTORE BSR REGISTER
MOVFF W_TEMP,WREG ;RESTORE WORKING REGISTER
MOVFF STATUS_TEMP,STATUS ;RESTORE STATUS REGISTER
RETFIE
;=======
; ИНИЦИАЛИЗАЦИЯ
;=========================
ORG H'26'
START
CLRF PORTA ;7 БИТ
CLRF LATA
MOVLW B'00000000'
MOVWF ADCON1 ;ЦИФРОВЫЕ I/O
MOVLW B'00000000' ;1,2,3,4,6,7-ВХОДЫ, 0,5-ВЫХОДЫ
MOVWF TRISA ;
CLRF PORTB ; 8 БИТ
CLRF MOVLW B'00000000' ;ПРОВЕРИТЬ SS=1
MOVWF TRISB ;ВЫХОДЫ 0,5,6,7; ВХОДЫ 1,2,3,4 КНОПКИ УПРАВЛЕНИЯ
CLRF PORTC ; 8 БИТ
CLRF LATC
MOVLW B'10000110' ;
MOVWF TRISC ;1,2 - ЭНКОДЕР-ВХОДЫ,6-TX-ВЫХОД, 7-RX-ВХОД, ОСТАЛЬНЫЕ ВЫХОДЫ
CLRF PORTD ; 8 БИТ
CLRF LATD
MOVLW B'00000000' ;
MOVWF TRISD ;ПОКА ВСЕ ВЫХОДЫ
CLRF PORTE ;3 БИТA
CLRF LATE
MOVLW B'00000111'
MOVWF ADCON1 ;ЦИФРОВЫЕ I/O
MOVLW B'00000000' ;1,2,3,4,6,7-ВХОДЫ, 0,5-ВЫХОДЫ
MOVWF TRISE ;
MOVLW B'00000000' ;12 mhz
MOVWF OSCCON ;ВНЕШНИЙ КВАРЦ, 12 МГЦ (PLL*4=48 МГЦ)
CLRF LATA
CLRF LATB
CLRF LATC
CLRF LATD
CLRF LATE
BCF INTCON,GIE_GIEH,ACCESS ;ПРЕРЫВ. ЗАПРЕЩЕНЫ
;----------
; ПОМОРГАЕМ
;----------
BSF LED_RED
CALL DELAY_300ms; ТУТ СПОТЫКАЕТСЯ ПРОГРАММА И ВЫСКАКИВАЕТ ЛИСТ ДИЗАССЕМБЛЕРА!
BCF LED_RED
BCF LED_GREEN
BCF LED_BLUE
MOVLW .80
MOVWF n
NNN
BSF LED_GREEN
CALL DELAY_300ms
BCF LED_GREEN
MOVLW .55
MOVWF data_USART
BSF LED_BLUE
CALL DELAY_300ms
BCF LED_BLUE
INCF n,F
RLNCF data_USART,F
BRA NNN
DELAY_300ms
movlw .68
movwf Reg_1
movlw .68
movwf Reg_2
movlw .19
movwf Reg_3
decfsz Reg_1
bra $-2
decfsz Reg_2
bra $-6
decfsz Reg_3
bra $-.10
RETURN
;========
END