|
本帖最后由 newlined 于 2024-3-5 09:38 编辑
大家好,我用两个STC32G单片机的CAN口通信,这两个单片机都是用的STC官方提供的C语言的例程,是标准帧格式,可以传输数据,但我将一个单片机的程序换成了STC官方提供的汇编语言例程时,发现不能通信,CAN口的地址,速率也都设置了。我在汇编语言的程序中跟踪了一下,发现CAN口收到数据可以触发中断,检测CAN寄存器中ISR的RI位为零,表示CAN 模块接收 BUFFER 中不存在数据帧,就是这几句:
MOV WR6, #WORD0 CANAR ;CANAR现场保存,避免主循环里写完 CANAR 后产生中断,在中断里修改了 CANAR 内容
MOV WR4, #WORD2 CANAR
MOV R10,@DR4 ;存入 B 寄存器
MOV A, #ISR
; MOV WR6, #WORD0 CANAR
; MOV WR4, #WORD2 CANAR
MOV @DR4, R11
MOV WR6, #WORD0 CANDR
MOV WR4, #WORD2 CANDR
MOV R11,@DR4
MOV @DR4, R11 ;清标志位,写 1 清除
ISRTEST3: JB ACC.3,CAN_RIIF
CAN_RIIF:
; ORL A,#08H ;清标志位,写 1 清除
; MOV @DR4, R11
SETB B_CanRead
JMP ISRTEST4
B_CanRead 不能被置位为1 ,所以收不到数据,请问问题可能出在哪里?谢谢。
|
|