Thank you for your patience..
Code:
INCLUDE "MODEDEFS.BAS"
TRISA=%11110000
TRISB=%00000010
cmcon=7 ' predispone la portaA come I/O digitali
'INTCON ( Interruption Control register )
intcon.7=1 'GIE : Global Interrupt Enable bit
intcon.6=1 'PEIE : Peripheral Interrupt Enable bit ( This bit should be set when using the CCP interruption so on )
intcon.5=0 'T0IE : TMR0 Overflow Interrupt Enable bit
intcon.4=0 'INTE : RB0/INT Interrupt Enable bit
intcon.3=0 'RBIE : RB Port Change Interrupt Enable bit
intcon.2=0 'T0IF : TMR0 Overflow Interrupt Flag bit
intcon.1=0 'INTF : RB0/INT Interrupt Flag bit
intcon.0=0 'RBIF : RB Port Change Interrupt Flag bit
'definisco il registro di ricezione RCSTA
rcsta.7=1 'SPEN serial port enable bit
rcsta.6=1 'RX9 9-bit receive enable bit
rcsta.5=0 'SREN single receive enable bit
rcsta.4=1 'CREN continous receive enable bit
rcsta.3=1 'ADDEN address detect enable bit
rcsta.2=0 'FERR framing error bit(read only)
rcsta.1=0 'OERR overrun error bit(read only)
rcsta.0=0 'RX9D 9th bit of receive data (read only)
'definisco il registro di trasmissione TXSTA
txsta.7=0 'CSRC : Clock Source Select bit
txsta.6=0 'TX9 : 9-bit Transmit Enable bit
txsta.5=1 'TXEN : Transmit Enable bit
txsta.4=0 'SYNC : USART Mode Select bit 0=asincrono
txsta.3=0 ' N/A
txsta.2=1 'BRGH : High Baud Rate Select bit
txsta.1=0 'TRMT : Transmit Shift Register Status bit ( Read only )
txsta.0=0 'TX9D : 9th bit of transmit data. Can be parity bit.
'PIE1 ( Peripheral Interrupt Enable register ) 8Ch
PIE1.7=0 'EEIE : EE Write Complete Interrupt Enable Bit
PIE1.6=0 'CMIE : Comparator Interrupt Enable bit
PIE1.5=1 'RCIE : USART Receive Interrupt Enable bit
PIE1.4=0 'TXIE : USART Transmit Interrupt Enable bit
PIE1.3=0 ' N/A
PIE1.2=0 'CCP1IE : CCP1 Interrupt Enable bit
PIE1.1=0 'TMR2IE : TMR2 to PR2 Match Interrupt Enable bit
PIE1.0=0 'TMR1IE : TMR1 Overflow Interrupt Enable bit
'azzera tutti i flag di interrupt
PIR1.7=0
PIR1.6=0
PIR1.5=0 'azzera l'RCIF
PIR1.4=0
PIR1.3=0
PIR1.2=0
PIR1.1=0
PIR1.0=0
'DEFINE HSER_BAUD 38400 ' Set baud rate
'DEFINE HSER_SPBRG 15 ' Set SPBRG directly (normally set by HSER_BAUD)
'set the speet to 38800 baud (with a 10Mhz osc)
SPBRG.7=0
SPBRG.6=0
SPBRG.5=0
SPBRG.4=0
SPBRG.3=1
SPBRG.2=1
SPBRG.1=1
SPBRG.0=1
DEFINE OSC 10
OERR VAR RCSTA.1 ' Alias USART over-run bit
CREN VAR RCSTA.4 ' Alias USART continuous receive enable bit
RCIF VAR PIR1.5 ' Alias USART received character interrupt flag bit
ADEN VAR RCSTA.3
Enable interrupt
i VAR WORD
led VAR BIT
led2 VAR BIT
ric VAR BYTE
ric2 VAR BYTE
X VAR BYTE
X=0
on interrupt GoTo indirizzo
GoTo ricevi
Disable
indirizzo:
ric = RCREG 'store the byte contained on RCREG in "ric" and clear RCREG
While RCIF 'to be sure that the register'll be empty the next time I'll read it
ric2=RCREG
Wend
' ADEN=0
' RCIF=0
IF OERR = 1 Then ' If over-run, then clear it
CREN = 0 ' Disable receive
CREN = 1 ' Re-enable & clear over-run condition
EndIF
'print the 3 lsb of ric into 3 external leds
PORTA.0=ric.2
PORTB.7=ric.1
PORTB.6=ric.0
'every time that the pic is interrupted, store the received byte in a location into the eeprom
Write 0+X,ric
X=X+1 'next time will write the next location
Resume
Enable
ricevi:
For i=1 to 65000
Next
IF led=1 Then
PORTA.1=0:led=0
Else
PORTA.1=1:led=1
EndIF
GoTo ricevi
Bookmarks