久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
PIC單片機(jī):為什么寫的程序光跑飛啊,新手一枚
[打印本頁]
作者:
SDDQ
時(shí)間:
2022-4-15 12:01
標(biāo)題:
PIC單片機(jī):為什么寫的程序光跑飛啊,新手一枚
程序通電我設(shè)置一個(gè)燈亮A,進(jìn)入主函數(shù)后,CAN發(fā)送成功或者失敗對(duì)應(yīng)的燈會(huì)亮,但是我只通電不進(jìn)行任何操作,A燈一直在那里閃,那不就是跑飛了嗎?我禁止看門狗了呀!好困惑
#include "p18f458.h"
unsigned int i;
unsigned char j;
int CAN_FLAG; //定義標(biāo)志寄存器、
//************初始化子程序***********//
void initcan()
{
TRISA=0x20;/*RA5設(shè)置為輸入,RA0-RA3端口設(shè)置為輸出(1入,0出)*/
TRISC=0xFF;/*RC0-RC3端口設(shè)置為輸入,全為輸入*/
TRISB=0x08;//把CANRX/RB3設(shè)置為輸入,CANTX/RB2設(shè)置為輸出
CANCON=0x80; //請(qǐng)求進(jìn)入CAN配置模式REQOP=100
while(CANSTAT&0x80==0){;}//等待進(jìn)入CAN配置模式OPMODE=100,CANSTA&1000 0000,只有第八位為1才不為0,該寄存器只有100配置方式為1,
//所以程序進(jìn)入其他值時(shí)一直在循環(huán)空語句等待配置方式進(jìn)入
//以下為波特率的設(shè)定
BRGCON1=0x01;
BRGCON2=0x90;
BRGCON3=0x42;
//設(shè)置發(fā)送郵箱0標(biāo)識(shí)符號(hào)和發(fā)送數(shù)據(jù)
CIOCON=0x00; //CAN輸入輸出控制寄存器
TXERRCNT=0x00;//初始化發(fā)送錯(cuò)誤計(jì)數(shù)寄存器
TXB0CON=0x03;//發(fā)送優(yōu)先級(jí)為最高優(yōu)先級(jí),TXPRI=11
TXB0SIDH=0xFF;//設(shè)置“發(fā)送"緩沖器0的標(biāo)準(zhǔn)標(biāo)識(shí)符,設(shè)置標(biāo)準(zhǔn)標(biāo)識(shí)符高字節(jié)寄存器 ,擴(kuò)展標(biāo)識(shí)符位EID28:EID21
TXB0SIDL=0xE0;//設(shè)置標(biāo)準(zhǔn)標(biāo)識(shí)符低字節(jié)寄存器,擴(kuò)展標(biāo)識(shí)符位EID20:EID18
TXB0DLC=0x08;//設(shè)置數(shù)據(jù)長度為8個(gè)字節(jié)
TXB0D0=0x00;
TXB0D1=0x01;
TXB0D2=0x02;
TXB0D3=0x03;
TXB0D4=0x04;
TXB0D5=0x05;
TXB0D6=0x06;
TXB0D7=0x07;
//設(shè)置接收郵箱0的標(biāo)識(shí)符和初始化數(shù)據(jù)
RXB0SIDH=0xFF;//設(shè)置"接收"緩沖器0的標(biāo)準(zhǔn)標(biāo)識(shí)符,擴(kuò)展標(biāo)識(shí)符位EID28:EID21
RXB0SIDL=0xE0;//擴(kuò)展標(biāo)識(shí)符位EID20:EID18
RXB0CON=0x20;//僅接收標(biāo)準(zhǔn)標(biāo)識(shí)符有效的信息,bit=0表示RXBO采用過濾器0
RXB0DLC=0x08;//設(shè)置數(shù)據(jù)長度為8個(gè)字節(jié)
RXB0D0=0x00;
RXB0D1=0x00;
RXB0D2=0x00;
RXB0D3=0x00;
RXB0D4=0x00;
RXB0D5=0x00;
RXB0D6=0x00;
RXB0D7=0x00;
//初始化接收過濾器0和接收屏蔽
RXF0SIDH=0xFF;//設(shè)置"接收"過濾器0的標(biāo)準(zhǔn)標(biāo)識(shí)符,擴(kuò)展標(biāo)識(shí)符"過濾位"EID28:EID21
RXF0SIDL=0xE0;//擴(kuò)展標(biāo)識(shí)符“過濾位”EID20:EID18
RXM0SIDH=0x00;//設(shè)置"接收"屏蔽器0的標(biāo)準(zhǔn)標(biāo)識(shí)符
RXM0SIDL=0x00;
//CAN進(jìn)入相應(yīng)的工作模式
CANCON=0x00;//=0x40為進(jìn)入自測試模式;0x00為進(jìn)入正常操作模式。
while(CANSTAT&0xE0){;}//等待進(jìn)入CAN正常模式OPMODE=000,CANSTA&1110 0000,
//只有第6.7.8位為0(000為CAN正常模式)才能不滿足括號(hào)內(nèi)條件,
//從而跳出循環(huán),反之則等待。
//初始化CAN中斷
PIR3=0x00;//清除所有中斷
PIE3=0x01;//使能接收緩沖器0的接收中斷
IPR3=0x01;//接收緩沖器0的接收中斷為最高優(yōu)先級(jí)。
}
//************接收緩沖器0接收中斷服務(wù)程序**************
#pragma interrupt can_isr
#pragma code low_ISR=0x18
void low_ISR()
{
_asm
goto can_isr
_endasm
}
#pragma code
void can_isr()
{
if(PIR3bits.RXB0IF==1) CAN_FLAG=1;
PIR3bits.RXB0IF=0;//清除接收中斷標(biāo)志
RXB0CONbits.RXFUL=0;//打開接收緩沖器來接收信息
}
//********延時(shí)程序********
void DELAY()
{
for(i=65000;i>1;i--);
{
for(j=650;j>1;j--);
}
}
//********主程序********
void main (void)
{
INTCON=0x00;//禁止所有中斷
initcan();//初始化
WDTCON=0;//=1看門狗使能,=0禁止看門狗
INTCON=0xc0;//使能中斷
PORTA=0xF4;//點(diǎn)亮第一個(gè)LED//
DELAY();
PORTA=0xFF;//關(guān)閉LED //
while(1)
{
//*********CAN發(fā)送********//
TXB0CONbits.TXREQ=1; //請(qǐng)求發(fā)送,TXREQ=1,發(fā)送終止位/發(fā)送丟失仲裁狀態(tài)位/發(fā)送錯(cuò)誤檢測狀態(tài)位都清除
while(PIR3bits.TXB0IF!=1)//等待發(fā)送完成,TXB0IF緩沖器0完成中斷標(biāo)志位,只有當(dāng)該位為1時(shí)才完成了信息的發(fā)送,可重新裝載
{
if(COMSTATbits.TXBO)//發(fā)送錯(cuò)誤計(jì)數(shù)大于255則該位為1
{
PORTA=0xF0;/*向PORTA發(fā)送數(shù)據(jù),點(diǎn)亮兩個(gè)LED,說明發(fā)送失敗*/
TXB0CONbits.TXABT=1;//中止發(fā)送
TXB0CONbits.TXREQ=0;//TXREQ發(fā)送請(qǐng)求位置0,因?yàn)榘l(fā)送成功后它自動(dòng)清零,他沒有發(fā)送成功,所以要手動(dòng)清零
TXERRCNT= 0x00;//清除發(fā)送錯(cuò)誤計(jì)數(shù)器
break;
}
}
if(PIR3bits.TXB0IF=1)//說明緩沖器0完成了信息的發(fā)送//
{
PORTA=0xF4;/*向PORTA發(fā)送數(shù)據(jù),點(diǎn)亮RA3控制的第一個(gè)LED,說明CAN發(fā)送成功*/
}
//********CAN接收********//
while(CAN_FLAG==0)//等待接收數(shù)據(jù)
{
if(COMSTATbits.RXBP)//接收器總線錯(cuò)誤過半位=1則為(接收錯(cuò)誤計(jì)數(shù)>127)
{
PORTA=0xF4;//點(diǎn)亮第一個(gè)LED//
DELAY();
PORTA=0xFF;//關(guān)閉LED //
PORTA=0xF8;//點(diǎn)亮第二個(gè)LED //
DELAY();
PORTA=0xFF;//關(guān)閉LED //
PORTA=0xF0;//點(diǎn)亮兩個(gè)LED,說明接收失敗 //
TXERRCNT= 0x00;//清除發(fā)送錯(cuò)誤計(jì)數(shù)器
break;
}
}
if(PIR3bits.TXB0IF=1)//說明緩沖器0完成了信息的發(fā)送//
{
PORTA=0xF8;/*點(diǎn)亮RA3控制的第2個(gè)LED,說明CAN接收成功*/
}
CAN_FLAG=0; //清除接收到的標(biāo)志
TXB0CONbits.TXREQ=0; //禁止發(fā)送
TXB0D0=RXB0D0+1;
TXB0D1=RXB0D1+1;
TXB0D2=RXB0D2+1;
TXB0D3=RXB0D3+1;
TXB0D4=RXB0D4+1;
TXB0D5=RXB0D5+1;
TXB0D6=RXB0D6+1;
TXB0D7=RXB0D7+1;
}
}
復(fù)制代碼
作者:
人工置頂員
時(shí)間:
2022-4-16 04:50
頂一下
作者:
Y_G_G
時(shí)間:
2022-4-16 15:23
1,在這用PIC單片機(jī)的人少
2,會(huì)PIC又會(huì)CAN的就更少了
作者:
SDDQ
時(shí)間:
2022-4-18 16:36
Y_G_G 發(fā)表于 2022-4-16 15:23
1,在這用PIC單片機(jī)的人少
2,會(huì)PIC又會(huì)CAN的就更少了
哎呀呀,困擾好久了
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲三区在线
|
日韩av中文字幕在线播放
|
黄色av一区
|
欧美日韩精品一区二区
|
国产亚洲视频在线观看
|
欧美日韩一区二
|
麻豆av片
|
国产成人久久精品麻豆二区
|
午夜久久精品
|
国产一区免费在线观看
|
91亚洲国产成人久久精品麻豆
|
久久国产一区
|
在线观看免费毛片
|
毛片视频免费观看
|
久久精品国产一区二区
|
国产日韩中文字幕
|
国产午夜精品久久
|
日韩高清精品免费观看
|
美日韩一区二区三区
|
黄色片观看
|
毛片在线免费播放
|
亚洲一区二区三区在线
|
日韩在线不卡视频
|
成人午夜激情视频
|
国产又粗又黄又爽又硬的视频
|
欧美日韩国产三级
|
亚洲天天操
|
亚洲综合久久久
|
欧美精品第一页
|
久草综合网
|
一级看片免费视频
|
福利一区福利二区
|
免费a网站
|
国产伦理一区
|
色综合一区二区
|
欧美日韩亚洲视频
|
国产精品日韩在线
|
张津瑜国内精品www在线
|
国产精品99久久久久久久久久久久
|
人人超碰人人
|
亚洲无av在线中文字幕
|