free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問答首頁 最新問題 熱門問題 等待回答標(biāo)簽廣場
我要提問

485

485通訊接收函數(shù)能寫到串口中斷函數(shù)中么

要把422換成485,422的接收是寫到串口中斷中,請問大神門,485的接收怎么用,直接寫函數(shù)么,還是寫到中斷當(dāng)中去,兩線485,半雙工,謝謝指教!

提問者:nigesb 地點:- 瀏覽次數(shù):3846 提問時間:10-15 14:36
我有更好的答案
提 交
3條回答
sadjwq 09-13 17:23
/* 接收數(shù)據(jù)幀函數(shù),實際上接收的是主機(jī)的指令 */
bit Recv_Data(uchar *type)
{
? ? ? ? uchar tmp,rCount,i;
? ? ? ? uchar r_buf[RECFRMMAXLEN];? ? ? ? ? ? ? ? ? ? ? ? // 保存接收到的幀
? ? ? ? uchar Flag_RecvOver;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 一幀接收結(jié)束標(biāo)志? ? ? ?
? ? ? ? uchar Flag_StartRec;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 一幀開始接收標(biāo)志
? ? ? ? uchar CheckSum;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 校驗和
? ? ? ? uchar DataLen;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 數(shù)據(jù)字節(jié)長度變量
? ? ? ? ? ? ? ?
? ? ? ? /* 禁止發(fā)送,允許接收 */
? ? ? ? DE = 0;
? ? ? ? RE = 0;

? ? ? ? /* 接收一幀數(shù)據(jù) */
? ? ? ? rCount = 0;
? ? ? ? Flag_StartRec = 0;
? ? Flag_RecvOver = 0;
? ? ? ? while (!Flag_RecvOver)
? ? ? ? {
? ? ? ? ? ? ? ? RI = 0;
? ? ? ? ? ? ? ? while (!RI);
? ? ? ? ? ? ? ? tmp = SBUF;
? ? ? ? ? ? ? ? RI=0;

? ? ? ? ? ? ? ? /* 判斷是否收到字符'$',其數(shù)值為0x24 */? ?? ?? ?
? ? ? ? ? ? ? ? if ((!Flag_StartRec) && (tmp == 0x24))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? Flag_StartRec = 1;? ? ? ?
? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (Flag_StartRec)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? r_buf[rCount] = tmp;
? ? ? ? ? ? ? ? ? ? ? ? rCount ++;? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? /* 判斷是否收到字符'*',其數(shù)值為0x2A,根據(jù)接收的指令設(shè)置相應(yīng)標(biāo)志位 */
? ? ? ? ? ? ? ? ? ? ? ? if (tmp == 0x2A)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Flag_RecvOver = 1;
? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (rCount == RECFRMMAXLEN)? ? ? ? ? ? ? ? // 幀超長錯誤,返回0
? ? ? ? ? ? ? ? ? ? ? ? return 0;
? ? ? ? }
? ? ? ?
? ? ? ? /* 計算校驗和字節(jié) */
? ? ? ? CheckSum = 0;
? ? ? ? DataLen = r_buf[3];
? ? ? ? for (i=0;i++;i<3+DataLen)
? ? ? ? {
? ? ? ? ? ? ? ? CheckSum = CheckSum + r_buf[i+1];
? ? ? ? }
? ? ? ?
? ? ? ? /* 判斷幀是否錯誤 */
? ? ? ? if (rCount<6)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 幀過短錯誤,返回0,最短的指令幀為6個字節(jié)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? return 0;
? ? ? ? if (r_buf[1]!=DevNo)??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 地址不符合,錯誤,返回0
? ? ? ? ? ? ? ? return 0;
? ? ? ? if (r_buf[rCount-2]!=CheckSum)? ? ? ? ? ? ? ? // 校驗錯誤,返回0
? ? ? ? ? ? return 0;

? ? ? ? *type = r_buf[2];? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 獲取指令類型

? ? ? ? return 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 成功,返回1
}
宇球黎海華 09-14 11:11
這是書上的寫法
ruobi168 09-13 07:47
//串口中斷處理(接收)
serial () interrupt 4
{? ?if (RI)??
? ? {??RI = 0;? ? ? ?
? ? ? ? ? ? if(!inbufful)
? ? ? ? ? ? {
? ? ? ? ? ? *inlast= SBUF;? ?? ?? ?? ?//放入數(shù)據(jù)? ?? ?? ?? ?
? ? ? ? ? ? inlast++;? ?? ?? ?? ?? ?? ???//最后放入的位置加一
? ?? ???inbufsign=1;
? ? ? ? ? ? if (inlast==inbuf+ILEN) inlast=inbuf;//地址到頂部回到底部
? ? ? ? ? ? if (inlast==getlast)? ? ? ? inbufful=1;??//接收緩沖區(qū)滿置滿標(biāo)志
? ? ? ? ? ?? ?
? ? ? ? ? ? }
? ? }
}
這是程序里422接收中斷函數(shù)
撰寫答案
提 交
1 / 3
1 / 3
相關(guān)485
最近被485電了很多次了,求大神分析下為什么
隔離485通信接口芯片ADM2483供電問題
關(guān)于SP485芯片經(jīng)常損壞的問題
求助 關(guān)于單片機(jī)與485總線 命令幀的發(fā)送和響應(yīng)幀的接收
485通訊如何尋址