A. 單片機怎樣通過串口向計算機發送數據
單片機怎樣通過串口向計算機發送數據:
單片機可以實現與計算機的發送和接收。首先,要正確配置單片機的串口,包括波特率、使用時鍾源、COM口、數據位位數、奇偶校驗位、停止位位數等,同時要保證計算機的配置和單片機的一致。然後,把要發送的數據送到發送緩存,只能一個位元組一個位元組的發送。啟動單片機發送,就可以完成發送操作。如果打開接收中斷,計算機發送數據過來的時候,就會進入到接收中斷,單片機進入接收數據狀態。
要注意的是,單片機是TTL電平,而計算機是232電平,所以在硬體電路連接上要有電平轉換晶元,常用的有MAX232等。
B. C51單片機發送串口數據到電腦
#include <reg52.h>
sbit RELAY = P1^2; //定義繼電器:接P1^1
unsigned char command[3],ptr=0,dat;
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
TMOD=0x20; //
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
REN=1; //控制RI
TR1=1;
/*以上為定時器設置和波特率設置,這樣的話,通過串口調試助手發送數據(隨意數據)通過改變RI(串口接收標志來實現繼電器的吸合與打開 */
while(1)
{
if(RI==1)
{
RI=0;
command[ptr]=SBUF;
ptr++;
if(ptr==2)
{
ptr=0;
if((command[0]=='0')&&(command[1]=='0')&&(command[2]=='7'))RELAY=0;
if((command[0]=='0')&&(command[1]=='0')&&(command[2]=='8'))RELAY=1;
}
}
}
}
C. 編程實現stm32單片機串口的數據收發
int main(void)
{
u16 t;
u16 len;
u16 times=0;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先順序,2位響應優先順序
uart_init(115200); //串口初始化為115200
LED_Init(); //LED埠初始化
KEY_Init(); //初始化與按鍵連接的硬體介面
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
printf("\r\n您發送的消息為:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1發送數據
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束
}
printf("\r\n\r\n");//插入換行
USART_RX_STA=0;
}
}
}
D. 單片機串口通信,發送數據感覺不對,請大佬幫看看
你的主循環轉得太快,前一個數據還沒發送完就把SBUF又填充新數值,這樣很容易破壞發送的幀。
既然你不開中斷,就應當採用查詢工作方式,查詢TI標志位確認發送完成之後再進行下一步工作。
E. 單片機串口發送數組,程序如下,請幫忙修改!!!
二進制數組不像字元串一樣有結束標志,不能直接用發送數組的函數發送,
作如下修改就可以了(模擬輸出結果見代碼後面的圖):
#include<reg52.h>//注意:11.0592M晶振波特率9600
sbitkey1=P2^0;
sbitkey2=P2^1;
unsignedcharcodeJ50_2[]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0X4B,0X22,0X01,0X03,0X01,0X0A,0X0A,0X7C,0X00};//如何發送出去
unsignedcharcodeJ50_3[]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0XAC,0X22,0X02,0X03,0X01,0X0A,0X0A,0X1A,0X00};//如何發送出去
unsignedcharcodeString1[]={"Test1Pass! "};
unsignedcharcodeString2[]={"Test2Pass! "};
/**************************************************************
函數功能:延時若干毫秒
**************************************************************/
voiddelayms(unsignedintms)
{
unsignedinti;
while(ms--)
for(i=0;i<600;i++);
}
/*****************************************************
函數功能:向PC發送一個位元組數據
***************************************************/
voidSendByte(unsignedchardat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
/*****************************************************
函數功能:向PC發字元串
***************************************************/
voidSendStr(unsignedchar*str)//第2種發送字元串函數
{
while(*str!=0)
{
SendByte(*str);
str++;
delayms(1);//延時Nms
}
}
/*****************************************************
函數功能:向串口發n個位元組數據
***************************************************/
voidSendnBytes(unsignedchar*str,unsignedintn)//發送n個位元組函數
{
while(n--!=0)
{
SendByte(*str);
str++;
delayms(1);//延時Nms
}
}
/*****************************************************
函數功能:串口初始化
***************************************************/
voidUartInit(void)
{
SCON=0x50;//串口工作方式1,8位UART,波特率可變
TH2=0xFF;
TL2=0xFD;//波特率:115200晶振=11.0592MHz
RCAP2H=0xFF;
RCAP2L=0xFD;//16位自動再裝入值
TCLK=1;
RCLK=1;
C_T2=0;
EXEN2=0;//波特率發生器工作方式
TR2=1;//定時器2開始
}
/*****************************************************
函數功能:主函數
***************************************************/
voidmain(void)
{
UartInit();
SendStr("Howareyou! ");
while(1)
{
//SendStr(J50_2);//發送不成功
SendnBytes(J50_2,sizeof(J50_2));//發送成功
if(key1==0)
{
P1=0xFE;
SendStr(String1);//發送數據
delayms(10);//10ms發送一次數據
P1=0XFF;
delayms(10);
}
//SendStr(J50_3);//發送不成功
SendnBytes(J50_3,sizeof(J50_3));//發送成功
if(key2==0)
{
P1=0xFD;
SendStr(String2);//發送數據
delayms(10);//10ms發送一次數據
P1=0XFF;
delayms(10);
}
}
}
F. 單片機串口怎麼發送數字給電腦
需要一個串口驅動程序啊,就像你寫其他程序一樣,然後使用串口助手這個軟體就能實現單片機發送數據到PC的串口助手軟體里了
G. 單片機串口c程序發送數據
從你出現的問題看,你應該是發的0,1,2,3……255的數,而不是它們對應的ASCII的值。比如你要發送在串口調試工具中顯示0,應該發送0的ASCII值;假設你的串口發送一位元組的函數為:sendbyte(unsigned
char
n);
則發送函數可以這樣寫:
void
send(void)
{
unsigned
char
i;
for
(i=0;i<256;i++)
{
sendbyte(n/100+'0');
sendbyte(n%100/10+'0');
sendbyte(n%100%10+'0');
}
}
去掉16進制顯示,就能看到0-255的顯示了
H. 單片機怎麼通過串口發送一串數據
通過SBUF! 一塊是接受,一塊發送!還要設置工作方式。
單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。
I. 單片機串口發送數據包的問題
我來回答你的問題:
1。串口,即串列通迅(非同步心通迅)本來就是一位一位的將數據串列發出,所以你的數據(10位元組)肯定是一位一位的發,發完第一字--》第二位元組--》。。。第10位元組。注意發送某一位元組時不能停頓,當然串口會自動完成,不需要人工干擾;發完一個位元組後中途肯定是可以停頓的,否則我1ms不發送串口就不工作???肯定不會的了。
2。接收端用狀態機來做最方便,編者順手,讀者稱心。收到一位元組後,自動進入中斷,定義一下step來指示接收到了哪一個「階段」,如:地址檢驗階段,然後step++,退出中的,下次再進中斷時,就進入了下一個「階段」了,就是你的「數據長度」,然後step++,退出中斷(如果數據如:ID,址址不對就直接返回STEP=0)。。。。。直到接收完整個數據幀;接收完一位元組數據肯定是要退出中斷去做其它事情的,要不就成了輪循的接收方式,而不叫中斷方式了;
以下為我用PIC的USART做的一段狀態機接收接收程序:
ISR_USART_RX;串口接收中斷
MOVFW
RX_STEP
;the
counter
of
RX
ADDWF
PCL,F
GOTO
ISR_RX_PREAMBLE
;同步頭檢驗
GOTO
ISR_RX_ID_H
;ID_H檢驗,不對就置RX_STEP=0
GOTO
ISR_RX_ID_L
;ID_L檢驗,不對就置RX_STEP=0
GOTO
ISR_RX_DATA
;數據
GOTO
ISR_RX_CHECK
;檢驗
希望樓主能滿意我的回答。