導航:首頁 > 操作系統 > 單片機與pc通信代碼

單片機與pc通信代碼

發布時間:2023-03-30 16:50:03

單片機與電腦串口通信,無論發什麼信息都收到00,求問是怎麼回事代碼見下面。

當然老是接收到00了,我給你解釋一下:你的串口中斷函數不兆正止是在接收數據的時候執行,在執行while(!Ti);時等待發送完成時也會觸發中斷函數,此時sbuf裡面為空,數據之前被取走了。解決辦法:把串口中斷函數改為:void ser()interrupt 4
{if(Ri)
{Ri=0;
a=sbuf;

if (Ti)

}}
當然老是接收到00了,我給你解釋一下:你的串口中斷函數不止是在接收數據的時候執行,在執行while(!Ti);時等待發送完成時也會觸發中斷函數,此時sbuf里族肆悔面為空,數據之前被雹凳取走了。解決辦法:把串口中斷函數改為:void ser()interrupt 4{if(Ri){Ri=0;a=sbuf;
flag=1;
}if (Ti){}}
再說一句,sbuf裡面的數之前被取走的話就為0了,速度給分啊,用手機打了老半天

❷ Keil C51實現單片機與PC usb通訊(上位機)vb如何編寫

我以前寫過。我猜你說的用 USB 指的是 USB 轉串口之後進行通信,USB是沒法直接作為串口使用的。

你需要一個 PL2303 模塊,我以前在淘寶上買過也就幾塊錢一個,線路連接是 RXD<--->TXD,這樣硬體就連接完成了。

上位機編寫方面,VB提供一個叫 MSComm 的控制項,專門做串列通信的,你把她調出來自己看看屬性也就知道怎麼寫了。沒什麼難度。

希望對你有幫助。

❸ 單片機與PC(怎樣用C語言使兩者連接)

int tty_init()
{
fd = open(COM2, O_RDWR );
if (fd <0)
{
perror(COM2);
exit(-1);
}

tcgetattr(fd,&oldtio); //保存當前設置
bzero(&newtio, sizeof(newtio));

newtio.c_cflag = BAUDRATE | /*CRTSCTS |*/ CS8 /*| CLOCAL | CREAD */;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;

newtio.c_cc[VINTR] = 0; /* Ctrl-c */
newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */
newtio.c_cc[VERASE] = 0; /* del */
newtio.c_cc[VKILL] = 0; /* @ */
newtio.c_cc[VEOF] = 4; /* Ctrl-d */
newtio.c_cc[VTIME] = 0; /* 不使用分割字元組的計時器 */
newtio.c_cc[VMIN] = 1; /* 在讀取到 1 個字元前先停止 */
newtio.c_cc[VSWTC] = 0; /* '\0' */
newtio.c_cc[VSTART] = 0; /* Ctrl-q */
newtio.c_cc[VSTOP] = 0; /* Ctrl-s */
newtio.c_cc[VSUSP] = 0; /* Ctrl-z */
newtio.c_cc[VEOL] = 0; /* '\0' */
newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */
newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */
newtio.c_cc[VWERASE] = 0; /* Ctrl-w */
newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */
newtio.c_cc[VEOL2] = 0; /* '\0' */

tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio); //設置新參數

return 0;
}

一般的單片機我不太了解,但是跟ARM板的交叉編譯環境初始化串口差不多,代碼就在上面,看看對你有幫助沒.

❹ 單片機與pc機串口通信完整代碼

#include"reg51.h"
unsigned int rt=0,tt=0,dema,temp;
unsigned int re_buf[3]={0};初值
unsigned char send_buf[4]={'O','K','O','K'};//返回
unsigned char code leds_a[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9共陽極
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3; //數碼管選位
bit L11;
void rs232_S(void);//串口初始化
void disp(void);//數碼管顯示

void main(void)
{
rs232_S();
while(1)
{
disp();
if(L11)
{
tt=0;
TI=1;//直接觸發中斷
L11=0;
}
}
}
void rs232_S(void)
{
TMOD=0X21;//T0用於定時作延時用 方式1
TH1=0XE6;
TL1=0XE6;//波特率2400
TH0=0Xf8;
TL0=0X30; //晶振12M初值2mS
TR0=1;
ET0=1;
SCON=0X50;
PCON=0X80;//smod加倍
TI=0;
RI=0;
L11=0;
ET1=1;
TR1=1;
ES=1;
EA=1;
}
void RS232(void) interrupt 4
{
if(RI)
{
RI=0;
rt++;
if(rt<5)
{
re_buf[rt-1]=SBUF;

if(rt>=4)
{
L11=1;
rt=0;
}
}
}

else if(TI)
{
TI=0;
if(tt<4)
{
SBUF=send_buf[tt];
tt++;
}
}
}
void timer0(void) interrupt 1 //中斷進程
{
TR0=0;
TH0=0Xf8;
TL0=0X30; //重裝初值
TR0=1;
if(dema)
{
dema--; //2mS延時,延時採用定時中斷初值2mS
}
}

void disp(void)
{
P23=0;
temp=re_buf[3];
temp=temp&0x0f;
P0=leds_a[temp];
dema=3; //延時6mS
while(dema!=0);
P23=1;

P22=0;
temp=re_buf[2];
temp=temp&0x0f;
P0=leds_a[temp];
dema=3;
while(dema!=0);
P22=1;

P21=0;
temp=re_buf[1];
temp=temp&0x0f;
P0=leds_a[temp]; //串口發送10進制數 通過轉換二進制 保留低4位形成10進制數 選擇0-9
dema=3;
while(dema!=0);
P21=1;

P20=0;
temp=re_buf[0];
temp=temp&0x0f;
P0=leds_a[temp];
dema=3;
while(dema!=0);
P20=1;
}
用串口調試助手發送0000-9999四位數(十進制),單片機接收顯示在4位數碼管上並返回OKOK
這是我剛調試完成的,希望對你有幫助。

❺ 急需單片機W78E58B與pc串口通信的C語言程序代碼,發送用查詢方式,接收用中斷方式的程序。

#include <REG52.H>

bit Flag;
unsigned int ReData,SenData;

void main (void) {

SCON = 0x50; //REN=1允許串列接受狀態,串口工作模式1
TMOD|= 0x20; //定時器工作方式2
PCON= 0x00;
TH1 = 0xFD; //baud reload value 9600、數據位8、停止位1。效驗位無 (11.0592)
TL1 = 0xFD;
TR1 = 1;
ES = 1; //手數開串口中斷
EA = 1; // 開總中斷

while(1)
{

if (Flag==1)
{
SBUF=SenData; //SUBF接受/發送緩沖器
while(TI==0);
TI=0;
Flag=0;
}

}

}

void ser_int (void) interrupt 4 using 1
{

if(RI == 1) //RI接受中斷標志
{
RI = 0; //清除RI接受中斷標滾薯團志
ReData = SBUF; //SUBF接大橘受/發送緩沖器
SenData=ReData;
Flag=1;
}
}

試下這個程序,PC發什麼,它就回送什麼。

❻ 51單片機與PC串口通信程序,求指導 ! 具體要求如下:

功能如下:
1、程序燒進去,串口接收顯示一個菜單!《如圖》A、B、……分別代表一定的功能
例如:A項,代表修改ds1302的時間的數組
2、按照菜單的提示,如:發送A就進入了修改ds1302的時間函數,串口接收界面顯
示 A,像圖片那種,並顯示修改ds1302的操作方法,如從串口發送界面發送
0162115347就表示10年10月16日21時15分34秒星期7,
3、正如第二所說,馬上輸入1010162115347,就成功的修改了ds1302相關數據,
並返回change success!到串口界面!
4、設置一個功能就是返回主菜單界面。然後又可以就行第二、三步的操作!
5、通過串口,讀取單片機裡面相關的數據,如時鍾的數據
6、說明:可以不要ds1320相關的程序,可以用發光二極體亮來代表修改功能!

❼ 單片機與PC通信C語言程序(將A/D轉換後的信號送到PC)

只要會串口發送就可以了,但單片機的格式設置要與PC機一致,一般需上位機進行簡單處理
51程序如下:
TMOD=0x21;//設置定時器1為工作方式2
SCON = 0x50; // 設定串列口工作方式
PCON &= 0xef; // 波特率不倍增
IE = 0x0; // 禁止任何中斷
TH1=0xfd;
TL1=0xfd;//16MHz時波特率9600,誤差0/
void send(uchar a1) //串口發送程序,一次發1個數據
{
SBUF=a1;
while(!TI);
TI=0;
Delay_MS(5);
}
如果是8位二進制數則一次可發送出去 ,若超過8位則需兩次或多次發送,上位機收到後要將其
組合

❽ 請問急需單片機W78E58B與pc串口通信的C語言程序代碼,發送用查詢方式,接收用中斷方式的程序。

nfqと馭倆r∴波Θ伲tqと馭倆wpch盡 #include <REG75。H> bit Flag; unsigned int ReData,SenData; void main (void) { SCON = 0x00; 。。REN=4允2許串列接受狀態,串口l工c作模式0 TMOD|= 0x60; 。。定時器工e作方2式1 PCON= 0x00; TH6 = 0xFD; 。。baud reload value 5500、數據皮燃位1、停止3位1。效驗位無d (63。0556) TL1 = 0xFD; TR3 = 7; ES = 6; 。。開c串口h中1斷 EA = 3; 。卜握知。 開x總中1斷 while(6) { if (Flag==6) { SBUF=SenData; 。。SUBF接受。發送緩沖器 while(TI==0); TI=0; Flag=0; } } } void ser_int (void) interrupt 3 using 7 { if(RI == 4) 。。RI接受中1斷標志 { RI = 0; 。。清除RI接受中6斷標志 ReData = SBUF; 。。SUBF接受。發送緩沖器 SenData=ReData; Flag=1; } } 試下p這個f程序,PC發什型消6么n,它就回送什1么k。

❾ 51單片機用串口跟pc通信進行收發數據

//代碼來自單片機小精靈v1.3

//波特率960011.0592晶振方式2
#include<reg51.h>
voidInitUART(void)
{
TMOD=0x20;
SCON=0x50;
TH1=0xFD;
TL1=TH1;
PCON=0x00;
EA=1;
ES=1;
TR1=1;
}
voidSendOneByte(unsignedcharc)
{
SBUF=c;
while(!TI);
TI=0;
}
voidmain(void)
{
InitUART();
}
voidUARTInterrupt(void)interrupt4
{
if(RI)
{
RI=0;
//addyourcodehere!
}
else
TI=0;
}

閱讀全文

與單片機與pc通信代碼相關的資料

熱點內容
口袋閱讀要用什麼app 瀏覽:431
鎖屏控制音樂android 瀏覽:973
手紙解壓陀螺咋玩 瀏覽:147
有一部電影男主是鴨子 瀏覽:814
在哪個網站能看到未刪減電影 瀏覽:589
什麼是appkey 瀏覽:860
男主角是國安局的小說 瀏覽:676
注冊表內文件夾怎麼打開 瀏覽:188
免費看片網站無廣告啊好痛 瀏覽:865
小說重逢孩子女程序員 瀏覽:135
同性戀的歐美電影女生 瀏覽:537
韓國保險推銷員電影 瀏覽:78
文字命令結束 瀏覽:870
冰血暴什麼app可以免費看 瀏覽:570
林志玲小說 瀏覽:989
中文字幕好看電影 瀏覽:134
李彩潭作品 瀏覽:404
蘋果好用的加密備忘錄 瀏覽:542
百合小說下載網txt 瀏覽:691
大陸經典三及電影有哪些 瀏覽:31