历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2018年01月09日 | CAN接口汇编程序

2018-01-09 来源:eefocus

CAN接口汇编程序

ORG     0000H 
LJMP     MAIN 
ORG     0003H 
LJMP     CANINT0                    

 

ORG     000BH 
LJMP    T0-INTERRUPT 
ORG     0100H 
MAIN: 
MOV      R0,#07FH 
CLR     A 
MOV     @R0,A 
DJNZ     R0,$_1 
MOV     @R0,A 
MOV      SP,#60H                         
LCALL     SJA1000_INIT0                     
LCALL     DISPLAY_INIT                     
LCALL     T0INIT                         
SETB     PX0                             
SETB     IT0                             
SETB     EX0                             
SETB     ET0  
SETB     TR0                             
SETB     EA                             
LOOPER: 
JNB     RCV_GOOD,LOOPER2                 
CLR     RCV_GOOD                     
LCALL     RCVDATA PRG                     
LOOPER2: 
JNB     SEC_FLAG,LOOPER3 
CLR     SEC_FLAG  
LCALL     SENDDATA_PRG                 
LOOPER3: 
JNB     ERR_FLAG,LOOPER4 
CLR     ERR_FLAG 
LCALL     ERR_PRG                         
LOOPER4: 
JNB         OVER_FLAG,LOOPER5             
CLR     OVER_FLAG 
LCALL     DOVER_PRG                     
LOOPER5:  
JNB         DS_ENDLFLAG,LOOPER6             
CLR     DS_END_FLAG 
LCALL     DSEND_PRG 
LOOPER6: 
JNB         WUL FLAG,LOOPER7             
CLR     WUL FLAG 
LCALL     WOKE_PRG                     
LOOPER7: 
AJMP     LOOPER 
SJA1000_INIT0:                          
LCALL     CAN_CREATE_COMMUNATION 
MOV      R7,#12                         
LCALL     CAN_SET_BANDRATE             
MOV      R7,#0A8H                         
MOV      R6,#0ffH                         
LCALL     CAN_SET_OBJECT 
MOV      R7,#0AAH                         
MOV      R6,#048H  
LCALL     CAN_SET_OUTCLK              
LCALL     CAN_QUIT_RETMODEL             
MOV      DPTR,# REG_CONTROL 
MOV      A,#01EH                         
MOV X     @DPTR,A 
CLR     F0 
RET 

ERR_PRG: 
LCALL     CAN_ENTER_RETMODEL         
LCALL     SJA1000_INIT0                     
MOV     ERROR_STATUS,#0FCH             
LCALL     DISP_ERROR                     
RET 
DSENDLPRG: 
LCALL     DISP_OK                         
RET  
RCVDATA_PRG: 
MOV      R0,#RCV_DATA_BUF1 
LCALL     CAN_DATA_RECEIVE             
MOV      R7,#04H 
LCALL     CAN_CMD_PRG 
RET 
SENDDATA_PRG: 
MOV      R0,#SEND_DATA_BUFl 
MOV     @R0,#0AFH 
INC         R0                             
MOV     @R0,#08H 
MOV      A,TEST_DATA 
INC         R0                              
MOV      @R0,A 
MOV      R0,#SEND_DATA_BUFl 
LCALL     CAN_DATA_WRITE 
MOV      R7,#01 
LCALL     CAN_CMD_PRG 
RET 
TO_INIT: 
MOV      A,TMOD                         
ANL     A,#0F0H 
ORL     A,#’01H 
MOV      TMOD,A                         
MOV      TH0,#0FCH 
MOV      TL0,#066H 
MOV      3AH,# 00H 
RET 
CAN_INT0:                             
PUSH     DPH                             
PUSH     DPL 
PUSH     PSW                             
PUSH     ACC 
MOV      DPTR,#REG INTERRUPT             
MOV X     A,@DPTR 
MOV      SAVE_INT_INFO,A                 
JNB         ACC.0,CAN_INTl                 
SETB    RCV_GOOD                     
CAN_INT1:                              
MOV      A,SAVE_INT_INFO 
JNB         ACC.2,CAN INT2                 
SETB     ERR_FLAG 
CAN_INT2: 
POP         ACC 
POP         PSW 
POP         DPL 
POP         DPH 
RETI 
TO_INTERRUPT: 
PUSH     DPH                             
PUSH    DPL 
PUSH     PSW                             
PUSH     ACC 
MOV      TH0,#80H 
MOV      TL0,#26H 
LCALL     DISPLAY 
INC         3AH                         
MOV      A,3AH 
CJNE     A,#40H,TO_QUIT                 
MOV      3AH,#00H 
SETB     SEC_FLAG 
INC        TEST_DATA                     
TO_QUIT: 
POP         ACC                             
POP         PSW 
POP         DPL 
POP         DPH 
RETI 
DISP_ERROR: 
MOV      R0,#DISPLAYBUFO+1             
MOV     @R0,#0EH 
MOV      R0,#DISPLAYBUFO+2 
MOV     @R0,#l0H 
INC         R0                             
MOV      A,ERROR_STATUS 
ANL     A,#0F0H 
SWAP     A 
MOV     @R0,A 
INC         R0 
MOV      A,ERROR_STATUS 
ANL     A,# 0FH 
MOV     @R0,A 
RET 
DISP_OK:                                  
MOV      R0,#DISPLAYBUFO+1 
MOV     @R0,#11H 
MOV      R0,#DISPLAYBUFO+2 
MOV     R0,#l0H 
MOV      R0,#DISPLAYBUFO+3 
MOV      A,RCV_DATA_BUF3 
ANL     A,#0F0H                             
SWAP     A 
MOV     @R0,A 
INC         R0 
MOV      A,RCV_DATA_BUF3 
ANL     A,#0FH 
MOV     @R0,A 
RET_ 
$INCLUDE(SJA_CANFunc. ASM)              
$include( display_s. inc) 
END 
CAN_CREATE_COMMUNATION: 
MOV      DPTR,#REG_TEST                     
MOV X     A,.DPTR 
MOV      A,#0AAH                             
MOV X    @DPTR,A 
SETB     F0 
MOV X     A,.DPTR 
CJNE     A,#OAAH,CAN_CM_QUIT                 
MOV      A,#055H                         
MOV X     @DPTR,A 
MOV X     A,@DPTR 
CJNE     A,#055H,CAN_CM_QUIT                 
CLR     A 
MOV X    @DPTR,A 
CLR     F0 
CAN_CM_QUIT: 
RET 
CAN_ENTER_RETMODEL:                 
MOV      DPTR,#REG_CONTROL                 
MOV X     A,@DPTR 
ORL     A,#01H                             
MOV X    @DPTR,A  
CLR     DWF0 
MOV X     DWA,@DPTR                         
JB         ACC.0,CAN_ER_QUIT 
SETB     F0 
CAN_ER_QUIT: 
RET 
CAN-QUIT-RETMODEL: 
MOV     DPTR,#REG_CONTROL                 
MOV X     A,@DPTR 
ANL     A,#OFEH                             
MOV X    @DPTR,A  
CLR     F0 
MOV X     A,@DPTR 
JNB         ACC. 0,CAN_QR_QUIT                 
SETB     F0 
CAN_QR_QUIT: 
RET 
CAN_SET_BANDRATE:                          
MOV      A,R7 
CLR     CY 
SUBB     A,#13 
SETB     F0 
JNC         CAN_SETBR_QUIT                     
CLR     F0  
MOV      A,R7 
RL         A 
MOV      DPTR,#CAN SETBR                     
MOV C     A,@A+DPTR  
MOV      R5,A                                 
MOV      A,R7                                 
RL         A 
INC         A 
MOV C     A,@A+DPTR 
MOV      R6,A                                 
MOV      DPTR,# REGLBTR0                     
MOV      A,R5                                 
MOV X .    DPTR,A 
SETB     F0 
MOV X     A,QDPTR 
XRL     A,R5 
JNZ         CAN_SETBR_QUIT                     
INC         DPTR 
MOV      A,R6 
MOV X     @DPTR,A 
MOV X     A,@DPTR 
XRL     A,R6                             
JNZ         CAN_SETBR_QUIT 
CLR     F0 
CAN_SETBR_QUIT: 
RET 
CAN_SETBR: 
DB     0EFH,0FFH                             
DB     0D7H,0FFH                             
DB     0CBH,0FFH                             
DB     0C5H,0FFH                             
DB     0C9H,0A9H                             
DB     0C2H,0FFH                             
DB     84H,0A7H                                 
DB     82H,025H                                 
DB     01H,045H                                 
DB    01H,025H                                 
DB    01H,012H                                 
DB     00H,025H                                 
DB     00H,012H                                 
CAN_SET_OBJECT: 
MOV      DPTR,#REG_ACR                     
MOV      A, R7  
MOV X     @DPTR,A 
MOV X     A,@DPTR 
SETB     F0 
XRL     A,R7                                 
JNZ         CAN_SETO_QUIT 
CLR     F0 
INC         DPTR                             
MOV      A,R6 
MOV X     @DPTR,A 
MOV X     A,DPTR 
SETB     F0 
XRL     A,R6                                 
JNZ         CAN_SETO_QUIT 
CLR     F0 
CAN_SETO_QUIT: 
RET 
CAN_SET_OUTCLK: 
MOV      DPTR,#REG_OCR                     
MOV      A,R7 
MOV X     @DPTR,A 
MOV X     A,@ DPTR                         
SETB     F0 
XRL     A,R7 
JNZ     CAN_SETOQ_QUIT 
CLR        F0 
MOV      DPTR,#REG CDR                 
MOV      A,R6 
MOV X     @DPTR,A 
MOV      B,A 
MOV X     A,@ DPTR 
SETB     F0 
XRL     A,R6                                 
JNZ         CAN_SETOC_QUIT 
CLR     F0 
CAN_SETOC_QUIT 
RET 
CAN     DATA WRITE: 
MOV      DPTR,# REG_STATUS 
MOV X     A,@DPTR 
SETB     F0 
JNB         ACC.3,CAN_DW_QUIT 
CLR     F0 
MOV X     A,@DPTR 
SETB     F0 
JNB         ACC.2,CAN_DW_QUIT 
CLR     F0 
INC         R0 
MOV      A, R0 
DEC     R0 
MOV      DPTR,#REG_TxBufferl 
JB         ACC.4, CAN_WYB 
ANL     A,#0FH                             
ADD     A,#02H                             
MOV      R7,A 
AJMP     CAN_WRTXBUF 
CAN_WYB: 
MOV      R7,#02                             
CAN_WRTXBUF: 
MOV      A,R0                                 
MOV X .    DPTR,A 
SETB     F0 
MOV X     A,@DPTR                             
XRL     A,.R0  
JNZ         CAN_DW_QUIT                     
CLR     F0                                 
INC         R0  
INC         DPTR 
DJNZ     R7,CAN_WRTXBUF                     
CAN_DW_QUIT: 
RET 
CAN_DATA_RECEIVE: 
MOV      DPTR,井REG_STATUS                 
MOV X     A,@DPTR                             
SETB     F0 
JNB         ACC.0,CAN_DR_QUIT 
CLR     F0 
MOV      DPTR,#REG_RxBuffer2 
MOV X     A,@DPTR 
MOV      DPTR,#REG RxBufferl 
JB         ACC. 4,CAN_RCVYB 
ANL     A,#0FH                             
ADD     A,# 02H                             
MOV      R7,A 
AJMP     CAN_RCVDATA 
CAN_RCVYB: 
MOV      R7,#02                             
CAN_RCVDATA:                             
MOV X     A,.DPTR 
MOV     @R0,A 
INC         DPTR 
INC         R0 
DJNZ     R7,CAN RCVDATA 
CAN_DR_QUIT: 
RET 
CAN_CMD_PRG: 
MOV      A,R7 
CJNE     A,#01,CAN_CMDl                     
MOV      DPTR,#REG COMMAND                 
MOV X     @DPTR,A                             
CLR     F0 
RET 
CAN_CMDl: 
CJNE     A,#02,CAN_CMD2 
MOV      DPTR,#REG STATUS                     
MOV X     A,@DPTR                             
SETB     F0 
JB         ACC.5,CAN_CMDLQUIT 
CLR     F0 
CAN_CMD_QUIT: 
RET 
CAN_CMD2: 
CJNE    #04,CAN CMD3                         
MOV      DPTR,# REG_COMMAND                 
MOV X     @DPTR,A                             
NOP 
NOP 
MOV      DPTR,#REG STATUS                     
MOV X     A,.DPTR 
SETB     F0 
JB         ACC.0,CAN_DB_QUIT 
CLR     F0 
CAN_DB_QUIT: 
RET 
CAN_CMD3: 
CJNE     A,#08,CAN_CMD4                     
MOV      DPTR,# REG_COMMAND                 
MOV X     @DPTR,A                             
NOP 
NOP 
MOV      DPTR,#REG_STATUS                 
MOV X     A,@DPTR 
SETB     F0 
JB         ACC.1,CAN_DOVER_QUIT 
CLR     F0 
CAN_DOVER_QUIT: 
RET 
SCAN CMD4: 
CJNE     A,#10H,CAN_CMD5                     
MOV      DPTR,#REG_COMMAND                 
MOV X    @DPTR,A                             
CLR     F0 
CAN     CMD5: 
RET 


推荐阅读

史海拾趣

City_Technology公司的发展小趣事

为了进一步推动公司的发展,City Technology于1993年决定售出部分股份,并在1996年成功在伦敦股票交易所上市。这一举措为公司带来了更多的资金支持,也为其后续的资本运作和战略扩张提供了可能。上市后的City Technology在资金、人才和市场资源等方面得到了极大的提升,为其日后的快速发展奠定了坚实的基础。

Amecon Magnetics公司的发展小趣事

为了进一步扩大市场份额和提升竞争力,Amecon Magnetics公司积极寻求与行业内外的合作伙伴建立战略合作关系。通过与知名电子企业、科研机构以及上下游企业的紧密合作,公司不仅获得了更多的市场资源和技术支持,还成功将产品推广至更广泛的应用领域。这种合作与共赢的战略布局为公司的快速发展奠定了坚实的基础。

FutureWafer公司的发展小趣事

在竞争激烈的电子行业中,品质是企业生存和发展的关键。Amecon Magnetics公司始终将品质管理放在首位,建立了严格的质量管理体系,确保从原材料采购到产品出厂的每一个环节都符合高标准的质量要求。这种对品质的执着追求使得公司的产品赢得了客户的广泛好评和信赖,为公司树立了良好的品牌形象。

AEL [AEL Crystals Ltd]公司的发展小趣事

AEL Crystals一直注重技术创新和产品升级。公司拥有一支专业的研发团队,致力于开发具有竞争力的新产品。通过不断引进新技术和新材料,AEL Crystals成功推出了一系列具有高性能和稳定性的频率控制产品。这些产品不仅满足了客户的多样化需求,也进一步巩固了公司在行业内的领先地位。

Gustav Klauke GmbH公司的发展小趣事

AEL Crystals一直注重技术创新和产品升级。公司拥有一支专业的研发团队,致力于开发具有竞争力的新产品。通过不断引进新技术和新材料,AEL Crystals成功推出了一系列具有高性能和稳定性的频率控制产品。这些产品不仅满足了客户的多样化需求,也进一步巩固了公司在行业内的领先地位。

FASTRAX公司的发展小趣事

在成立初期,FASTRAX就注重技术创新,不断推出新的产品和技术方案。其中,Fastrax iSuite MP SDK软件开发系统是其技术创新的代表,该系统为编程人员提供了丰富的资源,大大简化了GPS接收模块的开发过程。这一创新不仅提升了FASTRAX产品的竞争力,也推动了整个电子行业的发展。

问答坊 | AI 解惑

招聘 BMS软件开发工程师 工作地点北京

浙江南都电源动力股份有限公司(股票代码:300068)面向智慧储能、数据中心、工业后备和绿色出行四大应用领域,提供以锂离子电池和铅电池为核心的产品、系统集成及服务,同时打造了“锂电池循环产业链”和“铅电池循环产业链” ...…

查看全部问答>

最小的CP/M微型计算机

  爱好者Kian Ryan组装了一台很可能是最小的CP/M微型计算机--建立在Pimoroni Tiny 2040和Adafruit microSD读卡器之上。   “我一直在使用RC 2014作为CP/M开发机器,特别是在开发跨平台的Rogue类游戏时。我喜欢它,” ...…

查看全部问答>

逻辑功能求助

inout reg [15:0] Fsmc_data; reg id_temp; always @(negedge Fsmc_NOE or negedge rst_n) begin                   case ({Fsmc_addr, Fsmc_NBL0, Fsmc_NBL1, Fsmc_NE ...…

查看全部问答>

ESP8266的GPIO16的用法问题

本帖最后由 chenbingjy 于 2022-11-18 08:34 编辑 我想使用GPIO16控制LED灯的亮灭,不知可行否? 我用第一个图的函数操作,编译通不过,说是没定义。 高手指教,谢谢! …

查看全部问答>

电源电路中,整流二极管的作用的疑问

现象:         手里的一块板子,D1焊接漏了,没有焊接,测试的时候,迅速插拔电源,偶尔出现单片机无法启动的问题,经简单查看分析,3.3V放电慢了,未放电完全立马上电了,导致的无法启动,但是把D1补上 ...…

查看全部问答>

用放大器搭个双向带自锁efuse

    功能是,u1-vout(输出过高)过流后 q2d 立马就关掉了 lock被拉高 当reset将lock拉低后,又可以恢复保护 芯片大致手册如下:        主要是支持单电源比较方便   ...…

查看全部问答>

学Verilog时候的错题合辑

Verilog错题合辑(1) 1.Always语句错误 always@( posedge sclk or nss) ❌ always@( posedge sclk or posedge nss) ✔     在always 语句里不能既 用posedge 这种 ...…

查看全部问答>

请问2个二极管中间1个电容,这样的电路会烧电容吗?

左边+7V是常用电源,电流比较小,但是始终在,右边+5V正常悬空,有时候会插入,电流较大, 右边的+5V会另外通过个MOS管控制断开左边的+7V,也就说正常C1上面是7V的,当5V插入的时候,7V会断开, 如果+5V的通断频率太高,会不会烧C1这个电容? ...…

查看全部问答>

EEWorld邀你来拆解(第7期)——拆拆减肥利器----开箱

本帖最后由 吾妻思萌 于 2022-11-16 22:10 编辑 很快就收到了减肥利器,前几天因为电脑坏了一直没来的及更新开箱,今天趁着电脑修好的功夫更新开箱。 收到了北京EEW的发来的邮包,迫不及待打开拿出了今天的主角跳绳 不得不说 ...…

查看全部问答>

本站的电子资源很丰富

本站的电子资源很丰富,可以找到很多自己喜欢的电子书之类的。值得点赞。 …

查看全部问答>