c語言串口發送
① 如何用c語言實現PC間串口通信逐bit傳輸.
想實現1bit,1bit傳輸,開始一個起始位,最後一個結束位,是否可以實現.
答:能!但是這是一種非標準的協議類型,就不能用一般的UART控制器實現。對於單片機來說可以用普通IO口模擬,就像18B20的單線通信一樣,一個bit一個bit的發。在計算機上你可以通過驅動軟體控制串口或者並口中的一條引腳,再加上一條地線就可以與另外一台計算機的對應埠的引腳進行bit方式的數據收發了。
② 求助:Linux下C語言如何向串口發送16進制數據
Linux特點是所有都是文件
包括串口設備
首先 找到你串口對應的設備 一般是 /dev/ttyS1
當然 也可能是別的 需要你自己確認硬體。
然後比如你要發送0x01,0x02,0x03,0x04,
intfd;fd=open("/dev/ttyS1",O_RDWD);
charbuf[256]={0x01,0x02,0x03,0x04};
write(fd,buf,4);
close(fd);
這樣就可以了。
③ C語言,float變數串口發送
首先要看你的編譯器中浮點用幾個位元組表示,
這里假定4個位元組
union d{
困春磨unsigned char bytet[4];
float num;
}floatnum;
對數據操作時用floatnum.num發汪斗送數森頃據時,用floatnum.bytet數組。
④ 如何用c語言編寫向串口發送指令的程序 如0x01
#include<windows.h>
#include<stdio.h>
intmain()
{
HANDLEhComm;
hComm=CreateFile(「COM1」,//forCOM1—COM9only
GENERIC_READ|GENERIC_WRITE,//Read/Write
0,//NoSharing
NULL,//NoSecurity
OPEN_EXISTING,//Openexistingportonly
0,//NonOverlappedI/O
NULL);
if(hComm==INVALID_HANDLE_VALUE)
printf(「Errorinopeningserialport」);
else
printf(「openingserialportsuccessful」);
charlpBuffer[]=0x01;
DWORDdNoOFBytestoWrite;//Noofbytestowriteintotheport
DWORDdNoOfBytesWritten=0;//Noofbyteswrittentotheport
dNoOFBytestoWrite=sizeof(lpBuffer);
Status=WriteFile(hComm,//HandletotheSerialport
lpBuffer,//Datatobewrittentotheport
dNoOFBytestoWrite,//Noofbytestowrite
&dNoOfBytesWritten,//Byteswritten
NULL);
CloseHandle(hComm);//ClosingtheSerialPort
return0;
}
⑤ 如何利用C語言,C++語言打開USB串口,然後對其發送信號 跪求回答! 可行比加分!!
openfile和createfile,就可以,可以打開串口號的,創建接收信息,發送。。。
⑥ 51單片機串口通信c語言編程
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit ring=P3^7;
sbit CASE1=P2^0;
sbit CASE2=P2^1;
sbit CASE3=P2^2;
sbit CASE4=P2^3;
uchar se=0,re=0;
uchar temp=0;
void wait(uint cnt)
{
while(--cnt);
}
//串口發送程序
void send(uchar se)
{
SBUF=se; //發送數據
while(TI == 0);
TI = 0;
}
//串口接收程序
uchar receive(void)
{
re=SBUF; //接收數據
while(RI==0);
RI=0;
return re;
}
//串口初始化
void sinti(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
ES = 1;
}
void delay(int cnt)
{
while(--cnt);
}
//主程序
int main (void)
{
int i;
sinti(); //串口初始化程序
ring=1;
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a');
ring=0;
break;
}
if(CASE2==0)
{
send('b');
ring=0;
break;
}
if(CASE3==0)
{
send('c');
ring=0;
break;
}
if(CASE4==0)
{
send('d');
ring=0;
break;
}
}
if(ring==0)
{
wait(60000);
ring=1;
}
for(i=0;i<10000;i++);
}
}
//串口中斷程序
void UART_SER (void) interrupt 4 //串列中斷服務程序
{
if(RI) //判斷是接收中斷產生
{
RI=0; //標志位清零
temp=SBUF;
}
if(TI) //如果是發送標志位,清零
TI=0;
}
⑦ 單片機向串口調試助手發送數據 c語言
ucharidataSystemBuf[10];//用於接收
ucharRx=0;//接收數據條數
ucharcodeAT[]="YES,ITIS";
voidUART_init(void)
{
TMOD=0x20;//用定時器1
PCON=0x00;//波特率不加倍
SCON=0x50;//串列方式1
TH1=0xFD;//9600
TL1=0xFD;//
EA=1;//
ES=1;//
TR1=1;
}
voidsendchar(ucharch)//串口送一個位元組
{
返渣SBUF=ch;
while(TI==0);
TI=0;
}
voidsendstring(uchar*p)//送字元串
{
while(*p)
{
sendchar(*p);
p++;
}
}
///////
voidreceive(void)interrupt4using1//中斷
{
if(RI)
{
if(Rx<10)漏租悄//這兒最多收10個位元組
{
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;
}
}
///
voidmain()
{
uchari;
UART_init();
while(1)
{
if(SystemBuf=='S')
{
sendstring(AT);
for(i=0;i<10;i++)型宏//接收清0
{
SystemBuf[i]=0;
}
Rx=0;
}
}
}