semonoff 0 March 1, 2011 Posted March 1, 2011 · Report post Помогите проверить контроллер, плз. Нужен рабочий код инициализации + пример передачи в канал. Share this post Link to post Share on other sites More sharing options...
juray 0 March 3, 2011 Posted March 3, 2011 (edited) · Report post Ну, если устроит пример на ассемблере 8051 (а точнее, AT89S8252) ;) Старый и корявый, но рабочий. CANINTF equ 2Ch EFLG equ 2Dh TXB0CTRL equ 30h TXB1CTRL equ 40h TXB2CTRL equ 50h CAN_BUF_B3 EQU 69H TXB0D3 EQU 39H TXB0D4 EQU 3AH Can_Init: CLR EA MOV SPCR,#01010001B ;MASTER CPOL=0,CPHA=1 mov R0,#9 mov R3,#0 mov R2,#255 clr McpCS ; select mov A,#11000000b call SendToSpi setb McpCS Next_SPI_Command: clr McpCS mov A,#00000010b call SendToSpi mov dptr,#McpDataPlace inc R2 mov A,R2 movc A,@A+dptr mov R3,A Next_To_Spi: inc R2 mov A,R2 mov dptr,#McpDataPlace movc A,@A+dptr call SendToSpi djnz R3,Next_To_Spi setb McpCS djnz R0,Next_SPI_Command MOV SPCR,#01110101B ;MASTER CPOL=0,CPHA=1 SETB EA ret McpDataPlace: db 5,0,60h,08h,00h,0Bh db 5,32,0FFH,0FFH,0FFH,0FFH db 14,49,67H,88H,04H,00H,8,0F0H,0FEH,7DH,0,0,0FFH,0FFH,0FFH db 14,65,67H,88H,03H,00H,8,0F1H,0,0,0FFH,0FFH,0FFH,0FFH,0FFH db 14,81,0C7H,88H,00H,29H,8,40H,7DH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH db 4,40,3,161,1 db 2,96,64 db 2,43,1 db 2,15,0 ;db 14,65,0C7H,0EAH,0DFH,00H,8,80H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;db 14,81,0C7H,0EAH,0F6H,00H,8,0FFH,50,92,0FFH,0FFH,0FFH,0FFH,0FFH ;db 14,49,67H,88H,03H,00H,8,0F1H,0,0,0FFH,0FFH,0FFH,0FFH,0FFH ReadFromMcp: SETB FL_SPI_BUSY MOV SPCR,#01010001B ;MASTER CPOL=0,CPHA=1 clr McpCS mov A,#00000011b call SendToSpi mov A,R2 call SendToSpi mov A,#255 call SendToSpi setb McpCS MOV SPCR,#01110101B ;MASTER CPOL=0,CPHA=1 JMP CLR_FL_SPI Clear_Can_F: mov R2,#CANINTF mov B,#0 call WriteToMcp ret WriteToMcp: SETB FL_SPI_BUSY MOV SPCR,#01010001B ;MASTER CPOL=0,CPHA=1 clr McpCS mov A,#00000010b call SendToSpi mov A,R2 call SendToSpi mov A,B call SendToSpi setb McpCS MOV SPCR,#01110101B ;MASTER CPOL=0,CPHA=1 JMP CLR_FL_SPI ; SendToSpi: mov spsr,#0; mov spdr,A WaitForSpi: mov A,spsr jnb Acc.7,WaitForSpi mov A,spdr ret ;---------------- ;собственно работа с данными ASR_CAN: mov R2,#CANINTF CALL ReadFromMcp JNB ACC.0,ASR_CAN_1 ;пришел кадр MOV R2,#CAN_BUF_B3 CALL ReadFromMcp CALL Clear_Can_F ASR_CAN_1: MOV A,CEWA12 ANL A,#00000011B CJNE A,#0,ASR_CAN_3 MOV R2,#TXB0D4 MOV R1,#BASE_TAXO+3 MOV B,@R1 ;TAXO CALL WriteToMcp MOV R2,#TXB0D3 MOV B,#0 CALL WriteToMcp MOV R2,#TXB0CTRL MOV B,#00001011B ;запрос на передачу CALL WriteToMcp RET ASR_CAN_3: CJNE A,#1,ASR_CAN_4 MOV R2,#TXB1CTRL MOV B,#00001011B ;запрос на передачу CALL WriteToMcp RET ASR_CAN_4: CJNE A,#2,ASR_CAN_2 MOV R2,#TXB2CTRL MOV B,#00001011B ;запрос на передачу CALL WriteToMcp ASR_CAN_2: RET CLR_FL_SPI: ; дальнейшая обработка SPI, не касающаяся MCP MCP_INIT_DATA.doc Edited March 3, 2011 by Juray Share this post Link to post Share on other sites More sharing options...
semonoff 0 March 4, 2011 Posted March 4, 2011 · Report post СПС, дружище. :rolleyes: Share this post Link to post Share on other sites More sharing options...