系統(tǒng)can地址為550,用于can系統(tǒng)測試,應(yīng)用T0定時器每隔1s向can總線發(fā)送一組數(shù)據(jù):數(shù)據(jù)長度為8個字節(jié),
首字節(jié)為05H,第二個字節(jié)為累加變量,每秒鐘數(shù)值增加1,
本文引用地址:http://2s4d.com/article/201612/330387.htmCONTROLLER_BASEEQU7E00H;SJA1000的片選地址
RCV_GOODBIT0FH;成功的接收一幀標(biāo)志
SEC_FLAGBIT010H;一秒到標(biāo)志
ERR_FLAGBIT011H;監(jiān)測到錯誤標(biāo)志
SAVE_INT_INFODATA032H;保存SJA1000中斷寄存器的內(nèi)容
SEND_DATA_BUF1DATA040H;發(fā)送緩沖區(qū)
SEND_DATA_BUF2DATA041H
SEND_DATA_BUF3DATA042H
SEND_DATA_BUF4DATA043H
SEND_DATA_BUF5DATA044H
SEND_DATA_BUF6DATA045H
SEND_DATA_BUF7DATA046H
SEND_DATA_BUF8DATA047H
SEND_DATA_BUF9DATA048H
SEND_DATA_BUF10DATA049H
RCV_DATA_BUF1DATA050H;接收緩沖區(qū)
RCV_DATA_BUF2DATA051H
RCV_DATA_BUF3DATA052H
RCV_DATA_BUF4DATA053H
RCV_DATA_BUF5DATA054H
RCV_DATA_BUF6DATA055H
RCV_DATA_BUF7DATA056H
RCV_DATA_BUF8DATA057H
RCV_DATA_BUF9DATA058H
RCV_DATA_BUF10DATA059H
ERROR_STATUSDATA07CH;錯誤狀態(tài)表示
TEST_DATADATA07FH;測試發(fā)送數(shù)據(jù)
;程序開始
ORG0000H
LJMPMAIN;運行主程序
ORG0003H
LJMPBCAN_INT0;中斷方式訪問SJA1000程序
ORG000BH
LJMPT0_INTERRUPT;定時器0中斷
ORG0100H;程序開始
MAIN:
MOVR0,#07fH
CLRA
MOV@R0,A
DJNZR0,$-1
MOV@R0,A
MOVSP,#60H;設(shè)置SP
CLRP2.0;SJA1000退出硬件復(fù)位模式
LCALLSJA1000_INT0;初始化SJA1000
LCALLT0_INIT
CLRP3.4;點亮指示燈
SETBPX0
SETBIT0
SETBEX0
SETBET0
SETBTR0
SETBEA
LOOPER:
JNBRCV_GOOD,LOOPER2;sja1000成功接收一幀,通知CPU處理
CLRRCV_GOOD
LCALLRCVDATA_PRG
LOOPER2:
JNBSEC_FLAG,LOOPER3;一秒時間到,每秒發(fā)送一次
CLRSEC_FLAG
CLRP3.5;點亮指示燈
LCALLSENDDATA_PRG
LOOPER3:
JNBERR_FLAG,LOOPER4;錯誤標(biāo)志,錯誤處理
CLRERR_FLAG
LCALLERR_PRG
LOOPER4:
AJMPLOOPER
;;;;;;;;;初始化SJA1000;;
SJA1000_INT0:
LCALLBCAN_CREATE_COMMUNATION ;調(diào)用SJA1000接口測試函數(shù)
MOVR7,#04
LCALLBCAN_SET_BANDRATE;設(shè)置波特率為100k
MOVR7,#0A8H;設(shè)置接收報文ID
MOVR6,#0FFH
LCALLBCAN_SET_OBJECT
MOVR7,#0AAH;設(shè)置輸出控制、時鐘分頻;正常輸出模式
MOVR6,#048H;使能內(nèi)部比較器、禁止CLKOUT
LCALLBCAN_SET_OUTCLK;
LCALLBCAN_QUIT_RETMODEL;退出復(fù)位狀態(tài)
MOVDPTR,#REG_CONTROL;開放SJA1000內(nèi)部功能中斷
MOVA,#01EH;中斷開放
MOVX@DPTR,A
CLRF0