关于STC32G的CAN汇编语言的例程的疑问
本帖最后由 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 ,所以收不到数据,请问问题可能出在哪里?谢谢。
【新提醒】CAN总线标准帧扩展帧收发例子-C语言与汇编 - CAN/Lin/CANOpen - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
产生中断不一定是收到数据,也可能是检测到故障。
例程默认设置CAN波特率500KHz,你可先直接用例程测试一下通信。 神农鼎 发表于 2024-3-5 09:45
【新提醒】CAN总线标准帧扩展帧收发例子-C语言与汇编 - CAN/Lin/CANOpen - 国芯论坛-STC全球32位8051爱好 ...
谢谢您的回复。
我就是用的49中的汇编例程,这个例程中,我修改了主频的速率,我用的是12M,
CAN口的速率是50K,相应设置如下:
TSG1 EQU 5 ;0~15
TSG2 EQU 4 ;1~7 (TSG2 不能设置为0)
BRP EQU 9 ;0~63
SJW EQU 01H ;重新同步跳跃宽度: 00H/040H/080H/0C0H
;总线波特率100KHz以上设置为 0; 100KHz以下设置为 1
担心烧坏IO口,所以IO口我都设为准双向,C语言程序中也是这样设定的。
CAN口我用的是CAN1的P5.0,P5.1 相应程序如下:
ORL AUXR2, #02H ;CAN1模块使能
ANL AUXR2, #NOT 08H ;选择CAN1模块
ANL P_SW1, #0CFH;
ORL P_SW1, #010H;
其他的没有改动,再就是我发现程序中调用子程序用的是 命令是CALL ,编译没有问题,不过汇编中调用子程序不是用ACALL或者LCALL吗?CALL 与ACALL或LCALL有什么不同吗?
本帖最后由 newlined 于 2024-3-5 10:12 编辑
乘风飞扬 发表于 2024-3-5 09:58
产生中断不一定是收到数据,也可能是检测到故障。
例程默认设置CAN波特率500KHz,你可先直接用例程测试一下 ...
好的,谢谢,我试下。 newlined 发表于 2024-3-5 10:09
谢谢您的回复。
我就是用的49中的汇编例程,这个例程中,我修改了主频的速率,我用的是12M,
CAN口的速率 ...
LCALL , ACALL , CALL的区别是什么 ? 新人 问
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=894
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
乘风飞扬 发表于 2024-3-5 09:58
产生中断不一定是收到数据,也可能是检测到故障。
例程默认设置CAN波特率500KHz,你可先直接用例程测试一下 ...
乘风老师,发送站用C的例程原程序,接收站用汇编的原程序,速度是500K,可以收到数据,没有问题。 乘风飞扬 发表于 2024-3-5 09:58
产生中断不一定是收到数据,也可能是检测到故障。
例程默认设置CAN波特率500KHz,你可先直接用例程测试一下 ...
用500K的速度没有问题,我又改成了50K,就不行了,只修改了速度设置部分,别的没有修改。 newlined 发表于 2024-3-5 10:09
谢谢您的回复。
我就是用的49中的汇编例程,这个例程中,我修改了主频的速率,我用的是12M,
CAN口的速率 ...
SJW EQU 01H ;重新同步跳跃宽度: 00H/040H/080H/0C0H
这个参数设置有问题,这么定义会对BRP产生影响,要按照后面注释参数定义。 乘风飞扬 发表于 2024-3-5 11:38
SJW EQU 01H ;重新同步跳跃宽度: 00H/040H/080H/0C0H
这个参数设置有问题,这么定义会对BR ...
这个SJW的参数,如果速率是50K的话,应该设成多少?
注释后边是00H/040H/080H/0C0H,下边还有一句是;总线波特率100KHz以上设置为 0; 100KHz以下设置为 1,这两个注释怎样理解?
页:
[1]
2