Гость
|
Это для PIC16F84, может сгодиться.
Кварц скорее всего 20-ка.
Это для COM порта, туда можно в реал тайме строку менять.
300 бит в сек. типа скорость порта.
Вывод банальный, на пачку восьмёрок (порт B), и через микру дешифратора 3х8 с порта А.
Компилить в падлу, кидаю исходники - разбирайся сам.
;
;
;processor 16F84;
;
;
;==================================MAIN VARIABLES
F=1;
W=0;
REG=1;
IN=1;
OUT=0;
ALL_IN=225;
ALL_OUT=0;
RESET_V=00H;
ISR_V=04H;
;bank 0
INDF=00H;
TMR0=01H;
PCL=02H;
STATUS=03H;
#define IRP 03H,7;
#define RP1 03H,6;
#define RP0 03H,5;
#define TO 03H,4;
#define PD 03H,3;
#define Z 03H,2;
#define DC 03H,1;
#define C 03H,0;
FSR=04H;
PORTA=05H;
#define T0CKI 05H,4;
#define RA4 05H,4;
#define RA3 05H,3;
#define RA2 05H,2;
#define RA1 05H,1;
#define RA0 05H,0;
PORTB=06;
#define RB7 06H,7;
#define RB6 06H,6;
#define RB5 06H,5;
#define RB4 06H,4;
#define RB3 06H,3;
#define RB2 06H,2;
#define RB1 06H,1;
#define RB0 06H,0;
EEDATA=08H;
EEADR=09H;
PCLATH=0AH;
INTCON=0BH;
#define GIE 0BH,7;
#define EEIE 0BH,6;
#define T0IE 0BH,5;
#define INTE 0BH,4;
#define RBIE 0BH,3;
#define T0IF 0BH,2;
#define INTF 0BH,1;
#define RBIF 0BH,0;
;bank 1
INDF=80H;
OPTION_REG=81H;
;OPTION=81H;
#define RBPU 81H,7;
#define INTEDG 81H,6;
#define T0CS 81H,5;
#define T0SE 81H,4;
#define PSA 81H,3;
#define PS2 81H,2;
#define PS1 81H,1;
#define PS0 81H,0;
PCL=82H;
TRISA=85H;
TRISB=86H;
EECON1=88H;
#define EEIF 88H,4;
#define WRERR 88H,3;
#define WREN 88H,2;
#define WR 88H,1;
#define RD 88H,0;
EECON2=89H;
;PIN1=RA2;
;PIN2=RA3;
;PIN3=RA4;
;PIN6=RB0;
;PIN7=RB1;
;PIN8=RB2;
;PIN9=RB3;
;PIN10=RB4;
;PIN11=RB5;
;PIN12=RB6;
;PIN13=RB7;
;PIN17=RA0;
;PIN18=RA1;
cblock 0x0C
endc
;==================================MY COMMANDS
#define set MOVLW; установить константу в аккомулятор
variable bank_ = -1;
; noexpand
bank0 macro
if (bank_!=0)
BCF RP0
variable bank_=0
endif
endm;
bank1 macro
if (bank_!=1)
BSF RP0
variable bank_=1
endif
endm;
enter macro
variable bank_=-1
endm;
sel_bank macro adr
if (adr&b'111111000000')
bank1
else
bank0
endif
endm;
to macro adr; переслать аккомулятор в регистр
sel_bank adr
MOVWF adr
endm;
read macro adr ; читаь регистр в аккомулятор
sel_bank adr
MOVF adr,W;
endm;
biton macro adr,val
sel_bank adr
BSF adr,val;
endm;
bitoff macro adr,val
sel_bank adr
BCF adr,val;
endm;
ifon macro adr,val
sel_bank adr
btfsc adr,val
endm;
ifoff macro adr,val
sel_bank adr
btfss adr,val
endm;
;--------------------------------------------------------------
ORG RESET_V
GOTO START
ORG ISR_V
GOTO INTERRUPT
cblock
VIZC
endc
display macro adr
set adr
CALL DISPLAY
endm;
DISPLAY
enter
to FSR
set 8
to VIZC
DISPLAY_P
CLRF PORTB
DECF VIZC,W
to PORTA
read INDF
ANDLW b'00011111'
CALL DISPLAY_L
to PORTB
INCF FSR,F
DECFSZ VIZC,F
GOTO DISPLAY_P
RETURN
DISPLAY_L
ADDWF PCL,F
RETLW b'11011101';0
RETLW b'01000001';1
RETLW b'01111100';2
RETLW b'01110101';3
RETLW b'11100001';4
RETLW b'10110101';5
RETLW b'10111101';6
RETLW b'01000101';7
RETLW b'11111101';8
RETLW b'11110101';9
RETLW b'11101101';A
RETLW b'10111001';b
RETLW b'10011100';C
RETLW b'01111001';d
RETLW b'10111100';E
RETLW b'10101100';F
RETLW b'00000000';10_
RETLW b'00000010';11_,
RETLW b'00100000';12_-
RETLW b'11101100';13_P
RETLW b'10011000';14_L
RETLW b'01000101';15_^|
RETLW b'11001100';16_Г'
RETLW b'00010000';17__
RETLW b'11001101';18_П
RETLW b'00000100';19_^
RETLW b'11011001';1A_U
RETLW b'10111000';1b_t
RETLW b'00101000';1C_r
RETLW b'00111001';1d_o
RETLW b'11101001';1E_H
RETLW b'10101001';1F_h
plus macro adr,num
INCF adr,F
read adr
SUBLW num
ifon C
RETURN
CLRF adr
endm;
every macro adr,num
INCF adr,F
read adr
SUBLW num
ifoff C
CLRF adr
ifoff C
endm;
cblock
COUNT_0
COUNT_1
COUNT_2
COUNT_3
COUNT_4
COUNT_5
FSR_C
DATA_BUFF
R_STATE
REGW
P_READ
P_WRITE
L0,L1,L2,L3,L4,L5,L6,L7
endc
#define R_START R_STATE,1
#define R_STOP R_STATE,3
#define RxD PORTA,3
INTERRUPT
enter
MOVWF REGW
bitoff T0IF
every COUNT_0,.17
CALL TEAK_900
every COUNT_4,.240
CALL DISP
EXIT SWAPF REGW,F
SWAPF REGW,W
RETFIE
;--------------------------инициализация
START enter
set 0x0C
to FSR
START_1 CLRF INDF
INCF FSR,F
read FSR
SUBLW 0x4F
ifon C
GOTO START_1
set b'11001000'
to OPTION_REG
set 0
to TRISB
to TRISA
biton TRISA,3
biton T0IE
biton GIE
LOOP enter
display L0
GOTO LOOP
;----------------------------------------------------
TEAK_900
enter
ifon R_START
GOTO READ_BYTE
ifoff RxD
INCF R_STATE
RETURN
READ_BYTE
enter
plus COUNT_1,.2
ifon R_STOP
GOTO NEW
RRF DATA_BUFF,F
bitoff DATA_BUFF,7
ifon RxD
biton DATA_BUFF,7
plus COUNT_2,.7
biton R_STOP
;запись DATA_BUFF
; в EPROM
;----------------------------------------------
INCF DATA_BUFF,W
ifon Z
CLRF P_WRITE
read P_WRITE
to EEADR
read DATA_BUFF
to EEDATA
bank1
BSF WREN
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF WR
BCF WREN
WAIT ifon WR
GOTO WAIT
;----------------------------------
plus P_WRITE,.63
RETURN
NEW enter
CLRF R_STATE
RETURN
;----------------------------------------------------
DISP enter
plus COUNT_5,.12
INCF P_READ,F
read P_READ
SUBLW .63
ifoff C
CLRF P_READ
read P_READ
to EEADR
biton RD
read L1
to L0
read L2
to L1
read L3
to L2
read L4
to L3
read L5
to L4
read L6
to L5
read L7
to L6
read EEDATA
to L7
RETURN
ORG 0x2100
DATA 0x10
DATA 0x11
DATA 0x10
DATA 0x11
DATA 0x10
DATA 0x11
DATA 0x10
DATA 0x10
DATA 0x13
DATA 0x01
DATA 0x0C
DATA 0x10
DATA 0x01
DATA 0x06
DATA 0x0F
DATA 0x08
DATA 0x04
DATA 0x0A
DATA 0x10
DATA 0x02
DATA 0x00
DATA 0x01
DATA 0x13
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x0F
DATA 0x0A
DATA 0x1B
DATA 0x0A
DATA 0x14
DATA 0x10
DATA 0x0E
DATA 0x1C
DATA 0x1C
DATA 0x1D
DATA 0x1C
DATA 0x10
DATA 0x0A
DATA 0x1B
DATA 0x10
DATA 0x05
DATA 0x03
DATA 0x1F
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
DATA 0x10
END;
Если что пиши helo_@мыло.ру
|