欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
PIC16串口接收數據長度判斷和發送
[打印本頁]
作者:
sageliu
時間:
2018-8-7 09:04
標題:
PIC16串口接收數據長度判斷和發送
大家好,我想做個串口接收數據并截取指定長度發送的程序,為什么調試出現錯誤,請大家幫忙一下,謝謝!!
我的想法是:設置接收長度i=3,只接收3個字節,如果發送再多也不接收,再做判斷發送內容,再發送給上位機。
Untitled.jpg
(421.36 KB, 下載次數: 57)
下載附件
2018-8-7 09:00 上傳
單片機源程序如下:
#include <htc.h>
#include<stdio.h>
#include <stdlib.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 4000000UL
INT8U R1[5];
bit flag;
//-----------------------------------------------------------------
// 串口初始化
//-----------------------------------------------------------------
void Serial_port_init()
{
//Configuration TX and RX pins
TRISC6 = 0; //TX output
TRISC7 = 1; //RX input
SYNC=0; //選擇異步通信模式
BRGH=1; //選擇高速波特率發生模式
TXEN=1; //允許發送數據
SPBRG=_XTAL_FREQ/16/9600-1; //設置波特率為9600
SPEN=1; //串行通信端口打開
CREN=1;
}
//------------------------------------------------------------------
// PC機發送字符串
//------------------------------------------------------------------
void Send_byte(INT8U singlebyte)
{
TXREG=singlebyte; //發送一個字符
while(TRMT); //等待發送結束
__delay_ms(1);
}
//------------------------------------------------------------------
// PC機發送字符串
//------------------------------------------------------------------
void Send_String(INT8U *stringbyte)
{
INT8U i = 0;
while (stringbyte[i])
{
TXREG=stringbyte[i++]; //發送一個字符
while(TRMT); //等待發送結束
__delay_ms(1);
}
}
void interrupt USART_INT(void)
{
static int i=0;
if(RCIE && RCIF)
{
if(i==3)
{
flag=1;
i=0;
}
R1[i]=RCREG;
i++;
}
}
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
void main()
{
Serial_port_init();
RCIE=1; //使能接收中斷
GIE=1; //開放全局中斷
PEIE=1; //使能外設中斷
while(1)
{
if(1==flag)
{
flag=0;
Send_String(R1);
}
}
}
復制代碼
所有資料51hei提供下載:
PIC16F877A USART.rar
(76.09 KB, 下載次數: 10)
2018-8-7 09:03 上傳
點擊文件名下載附件
作者:
sageliu
時間:
2018-8-7 21:04
誰能幫忙頂下,謝謝!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1