Witam
mam watpliwosci co do ustawienia fazy(nadawanie na zobczu opadajacym czy narastajacym sclk) i polaryzacji(sclk jesli bezczynny to 1 czy 0) przy komunikacji z cc1000, wyprobowywalem rozne kombinacje(4) , programn dziala w ten sposob ze zapisuje do cc1000 rejest MAIN 2 razy a potem odczytuje go(wartosc odczytana jest w sfr-SPIDAT)
i efekty sa takie :
jesli przesylanie na / i sclk w bezczynnosci na 1 to po wykonaniu programu w spidat mam 00H
tak samo sie dzieje jesli przesylanie na \ i bezczynnosc na 0
w innych ch przypadkach w spidat mam FFH
jesli zmienie SCON(tam sa powyzsze ustawienia) w przed rozkazem ustawienia PALE NA 1 podczas podprogramu READ_REGISTER to w SPIDAT nic sie nie zmienia i wszystko jest tak jakbym tego nie zmienil....
nie wiem co jest grane:/ a oto program:
POMOCY!!!!
#include <aduc841.h>
;***************************************************************************************
; KONFIGURACJA CC1000 NADAJNIK
;***************************************************************************************
;20 KOMORKA PAMIECI REJESTR FLAGOWY
;20.0-CZY SPI WYSYLALO DANE(USTAWIANY PODCZAS PRZERWANIA OD SPI
;P0.0-PALE
;*****************************PRZERWANIE OD SPI
ORG 03BH
SETB 20H.0
RETI
;***********************************************
ORG 00H
LJMP MAIN
ORG 100H
MAIN:
ORL CFG841,#00100010B ;PRZENIESIENIE MOSI,MISO, SCLK NA P3.3, P3.4 P3.5 ODPOWIEDNIO
MOV SPICON,#00111100B ;KONFIGURACJA SPI JAKO MASTER PREDKOSC 2.5MHz ZBOCZE OPADAJACE
;*****ZEBY NA SLAVE: "CLR SPIM"****..........sprawdzic zbocza
SETB EA ;WLACZENIE PRZERWAN
ORL IEIP2,#00000001B ;WLACZENIE PRZERWAN OD SPI I I2C
MOV 20H,#00
LCALL CONFIGURE_CC1000
MOV A,00H
LCALL READ_REGISTER
KONIEC:
LJMP $
CONFIGURE_CC1000:
;PUSH PSW
;PUSH ACC
;PUSH 01H
;PUSH 07H
;KONFIGURACJA REJESTRU MAIN*****************************************
MOV A,#00H ;ADRES REJESTRU ( TU MAIN)
LCALL WRITE_WADRESS
MOV A,#11000000B ;DANA DO REJESTRU
LCALL WRITE_DATA
MOV A,#00H ;POWTORNA KONFIGURACJA (USTAWIENIE RESETA NA 1)
LCALL WRITE_WADRESS
MOV A,#11000001B
LCALL WRITE_DATA
RET
;*****************
;ODBIERANIE DANYCH REJESTROW Z CC1000****************************************************
READ_REGISTER:
LCALL WRITE_RADRESS
NOP
SETB P0.0
NOP
MOV SPIDAT,#00H ;ZAPISUJE DO SPI UDAWANY BAJT ZEBY ODEBRAC(POTRZEBNE TO?, CZY SPI SAMO WIDZI ZE DANE NA LINI SIE ZNIENIAJA I ZAPISAUJE DO SPIDAT?? A POTEM ROBI PRZERWANIE?
LCALL CZEKASPI
MOV A,SPIDAT
RET
;*********************
;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
WRITE_WADRESS:
CLR P0.0 ;PALE NA 0 -WPISYWANIE ADRESU
SETB C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
MOV SPIDAT,A ;WYSYLA NA SPI TO CO W A
LCALL CZEKASPI
SETB P0.0
RET
;**************
;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
WRITE_RADRESS:
CLR P0.0 ;PALE NA 0 -WPISYWANIE ADRESU
CLR C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
MOV SPIDAT,A ;WYSYLA NA SPI TO CO W A
LCALL CZEKASPI
SETB P0.0
RET
;**************
;***********************************PODPROGRAM WYSYLA DANE NA WYSLANY ADRSES(ADRES MUSI BYC WYSLANY W POPRZEDNIM POLECENIU******
WRITE_DATA:
SETB P0.0 ;PALE NA 1= WYSYLANIE DANYCH DO WPISANEGO WCXZESNIEJ ADRESU
MOV SPIDAT,A ; WYSYLA TO CO W A NA SPI
LCALL CZEKASPI ;CZEKA AZ SPI WYSLE
RET
;**************
;***********************CZEKA AZ SPI WYSLE BAJT************
CZEKASPI:
JNB 20H.0,CZEKASPI ;CZEKA AZ SPI WYSLE
CLR 20H.0
RET
;**************
mam watpliwosci co do ustawienia fazy(nadawanie na zobczu opadajacym czy narastajacym sclk) i polaryzacji(sclk jesli bezczynny to 1 czy 0) przy komunikacji z cc1000, wyprobowywalem rozne kombinacje(4) , programn dziala w ten sposob ze zapisuje do cc1000 rejest MAIN 2 razy a potem odczytuje go(wartosc odczytana jest w sfr-SPIDAT)
i efekty sa takie :
jesli przesylanie na / i sclk w bezczynnosci na 1 to po wykonaniu programu w spidat mam 00H
tak samo sie dzieje jesli przesylanie na \ i bezczynnosc na 0
w innych ch przypadkach w spidat mam FFH
jesli zmienie SCON(tam sa powyzsze ustawienia) w przed rozkazem ustawienia PALE NA 1 podczas podprogramu READ_REGISTER to w SPIDAT nic sie nie zmienia i wszystko jest tak jakbym tego nie zmienil....
nie wiem co jest grane:/ a oto program:
POMOCY!!!!
#include <aduc841.h>
;***************************************************************************************
; KONFIGURACJA CC1000 NADAJNIK
;***************************************************************************************
;20 KOMORKA PAMIECI REJESTR FLAGOWY
;20.0-CZY SPI WYSYLALO DANE(USTAWIANY PODCZAS PRZERWANIA OD SPI
;P0.0-PALE
;*****************************PRZERWANIE OD SPI
ORG 03BH
SETB 20H.0
RETI
;***********************************************
ORG 00H
LJMP MAIN
ORG 100H
MAIN:
ORL CFG841,#00100010B ;PRZENIESIENIE MOSI,MISO, SCLK NA P3.3, P3.4 P3.5 ODPOWIEDNIO
MOV SPICON,#00111100B ;KONFIGURACJA SPI JAKO MASTER PREDKOSC 2.5MHz ZBOCZE OPADAJACE
;*****ZEBY NA SLAVE: "CLR SPIM"****..........sprawdzic zbocza
SETB EA ;WLACZENIE PRZERWAN
ORL IEIP2,#00000001B ;WLACZENIE PRZERWAN OD SPI I I2C
MOV 20H,#00
LCALL CONFIGURE_CC1000
MOV A,00H
LCALL READ_REGISTER
KONIEC:
LJMP $
CONFIGURE_CC1000:
;PUSH PSW
;PUSH ACC
;PUSH 01H
;PUSH 07H
;KONFIGURACJA REJESTRU MAIN*****************************************
MOV A,#00H ;ADRES REJESTRU ( TU MAIN)
LCALL WRITE_WADRESS
MOV A,#11000000B ;DANA DO REJESTRU
LCALL WRITE_DATA
MOV A,#00H ;POWTORNA KONFIGURACJA (USTAWIENIE RESETA NA 1)
LCALL WRITE_WADRESS
MOV A,#11000001B
LCALL WRITE_DATA
RET
;*****************
;ODBIERANIE DANYCH REJESTROW Z CC1000****************************************************
READ_REGISTER:
LCALL WRITE_RADRESS
NOP
SETB P0.0
NOP
MOV SPIDAT,#00H ;ZAPISUJE DO SPI UDAWANY BAJT ZEBY ODEBRAC(POTRZEBNE TO?, CZY SPI SAMO WIDZI ZE DANE NA LINI SIE ZNIENIAJA I ZAPISAUJE DO SPIDAT?? A POTEM ROBI PRZERWANIE?
LCALL CZEKASPI
MOV A,SPIDAT
RET
;*********************
;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
WRITE_WADRESS:
CLR P0.0 ;PALE NA 0 -WPISYWANIE ADRESU
SETB C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
MOV SPIDAT,A ;WYSYLA NA SPI TO CO W A
LCALL CZEKASPI
SETB P0.0
RET
;**************
;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
WRITE_RADRESS:
CLR P0.0 ;PALE NA 0 -WPISYWANIE ADRESU
CLR C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
MOV SPIDAT,A ;WYSYLA NA SPI TO CO W A
LCALL CZEKASPI
SETB P0.0
RET
;**************
;***********************************PODPROGRAM WYSYLA DANE NA WYSLANY ADRSES(ADRES MUSI BYC WYSLANY W POPRZEDNIM POLECENIU******
WRITE_DATA:
SETB P0.0 ;PALE NA 1= WYSYLANIE DANYCH DO WPISANEGO WCXZESNIEJ ADRESU
MOV SPIDAT,A ; WYSYLA TO CO W A NA SPI
LCALL CZEKASPI ;CZEKA AZ SPI WYSLE
RET
;**************
;***********************CZEKA AZ SPI WYSLE BAJT************
CZEKASPI:
JNB 20H.0,CZEKASPI ;CZEKA AZ SPI WYSLE
CLR 20H.0
RET
;**************