<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC單片機的RS-232串口轉工業(yè)現場(chǎng)總線(xiàn)通信適配卡設計

PIC單片機的RS-232串口轉工業(yè)現場(chǎng)總線(xiàn)通信適配卡設計

作者: 時(shí)間:2011-11-30 來(lái)源:網(wǎng)絡(luò ) 收藏
1.3 A/D轉換模塊

16F877A自帶有8路模擬通道,轉換精度為10位。本卡選擇RA0為模擬通道。板卡將A/D轉換后的數據通過(guò)CAN上傳給上位機。

1.4 數據流

CAN-的數據流圖見(jiàn)圖4。

2、系統軟件

軟件分為兩大塊:板卡底層軟件和PC機上操作軟件設計。板卡底層軟件設計主要是對16F877A編程,用于把從PC機通過(guò)輸人給的數據按照CAN協(xié)議幀結構進(jìn)行打包處理,并操作CAN控制器把數據發(fā)送到CAN;把從CAN上輸入的數據轉換成串行數據輸出給PC機:PC機上操作軟件設計主要是對串口的操作和通過(guò)串口收發(fā)數據。

2.1編程

開(kāi)發(fā)工具使用的是MPLAB集成開(kāi)發(fā)環(huán)境(IDE),它是綜合的編輯器、項目管理器和設計平臺,適用于使用Microchip的micro系列單片機進(jìn)行嵌入式設計的應用開(kāi)發(fā);編程語(yǔ)言用的是C語(yǔ)言,將HITECH 公司的PICC編譯器直接掛接在MPLAB-IDE集成開(kāi)發(fā)平臺下,實(shí)現一體化的編譯連接和原代碼調試。

CAN控制器SJA1000T片內有模式寄存器MOD、命令寄存器CMR、狀態(tài)寄存器SR、中斷寄存器IR、中斷使能寄存器IER、接收緩沖器RXB、發(fā)送緩沖器TXB、仲裁丟失捕捉寄存器ALC、錯誤代碼捕捉寄存器ECC、錯誤報警限額寄存器EWLR、錯誤計數寄存器ERR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、總線(xiàn)時(shí)序寄存器BTR、輸出控制寄存器OCR和時(shí)鐘分頻寄存器CDR等,單片機就是通過(guò)讀寫(xiě)這些寄存器來(lái)實(shí)現對SJA1000T的控制,從而實(shí)現CAN報文的接收和發(fā)送。文后給出CAN控制器SJA1000T初始化和接收子程序的流程圖。下面給出CAN初始化程序,其中WRCAN是自定義的一段對SJAIO00T寫(xiě)數據的子程序。

C程序

void CANINI()

{

WRCAN(MODE,0x09); //進(jìn)入復位模式,選擇單向濾波方式,對SJA1000T進(jìn)行初始化

WRCAN(CDR,0x88); //選擇PeliCAN模式,關(guān)閉CLKOUT

WRCAN(IER,0x0D); //中斷允許寄存器

//以下根據需要對屏蔽寄存器賦初值,將位設為1表示DON'T CARE,設為0表示CARE

WRCAN(AMR0,0x00);

WRCAN(AMR1,0x00);

WRCAN(AMR2,0xFF);

WRCAN(AMR3.0xFF); //因為AMR3的最低兩位是不用的,必須置“1”

//以下根據情況為驗收代碼寄存器賦初值

WRCAN(ACR0,0x00);

WRCAN(ACR1,0x00);

WRCAN(ACR2,0xFF);

WRCAN(ACR3,0xFF); //ACR,AMR各位設為1,是為了允許任何數據通過(guò)濾波器的驗收

WRCAN(BTR0,0x03); //總線(xiàn)定時(shí)寄存器

WRCAN(BTR1,0xFF); //設置波特率為50kbps

B=fXT/[2*BRP*(1+Tseg1+Tseg2)]

WRCAN(OCR,0xAA); //輸出控制寄存器

WRCAN(RBSA,0x00); //接收緩存寄存器FIFO的起始地址為0

WRCAN(TXERR,0x00); //清除發(fā)送錯誤寄存器

RDCAN(ECC); //清除ECC,因為ECC是只讀不能寫(xiě)的,當被讀出時(shí),其相應位即被清除

WRCAN(MODE,0x08); //設為單濾波方式,并返回工作狀態(tài)

return;

}

void WRCAN(address,data) //向SJA1000T的寄存器寫(xiě)入數據

unsigned char address;

unsigned char data;

{

PORTC=0x0D; //RC3=1;RC2=1;Rc1=0;RC0=1;即ALE置1,則鎖存地址,其余端口參考時(shí)序圖

PORTD=address;

PORTC=0x04; //RC0=0;RC1=0;RC2=1;RC3=0;即ALE置0,則傳輸據.進(jìn)入寫(xiě)方式,其余端口參考時(shí)序圖

PORTD=data; //將數據寫(xiě)入端口D

PORTC=0x0E; //RC3=1;RC2=1;RC1=1;RC0=0;各端口還原

}


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>