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

pc與單片機通信c

發布時間:2022-09-02 19:14:17

單片機與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位則需兩次或多次發送,上位機收到後要將其
組合

❷ 單片機與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板的交叉編譯環境初始化串口差不多,代碼就在上面,看看對你有幫助沒.

❸ c編程:PC發送單個字元給單片機,當單片機接收到PC機發送過來的單個數據後,轉發給PC

這是最簡單的單片機與PC機串口通信的程序。單片機收到單個字元無需判斷,原字元發送出去即可。可以用proteus 模擬測試,用虛擬終端代替PC機,用電腦鍵盤輸入字元,由虛擬終端發送給單片機,單片機收到按原字元返回,虛擬終端就會顯示出接收的字元。模擬圖如下

❹ 用89C52單片機與PC串口通信,誰能幫忙寫代碼要用C語言編寫的

單片機定時發送字串給PC機

#include < reg52.h >
#include < intrins.h >
#include < stdio.h >

#define uchar unsigned char
#define uint unsigned int

/**********************************************************
* *
* 延時函數 *
* *
**********************************************************/
void delay(int ms)
{
uchar i;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

/**********************************************************
* *
* 主程序 *
* *
**********************************************************/
main()
{
SCON=0x50; //串口模式1,允許接收
TMOD=0x20; //定時器1為模式2,8-bit 自動裝載方式
PCON=0x00; //波特率不倍增

TL1=0xfd;
TH1=0xfd; //波特率9600
TI=1; //TI 置1,以發送第一個位元組
TR1=1; //啟動定時器 T1

while(1)
{
printf (" 真誠與各位單片機高手切磋學習\n"); //向PC機發送數據
delay(500);
printf (" welcome to www.hebeihjl.com\n"); //向PC機發送數據
delay(500);
printf (" qq892793019\n"); //向PC機發送數據
delay(500);
printf (" \n"); //向PC端發送數據
delay(500);
}
}

/*********************************************************/

❺ 基於RS485匯流排的PC與多個單片機通信的C語言程序

這個問題很簡單,用485通訊的話,思路如下
思路:
PC方面:可以用MSCOMM控制項先發一個字元表示接收地址,後延遲1ms,(注意PC端在485通訊在字元發送過程中一定要加延遲,這是我多次測試的總結,如果是用調試助手的話,他內部代碼已經加過延遲了,就不必考慮這個問題)再發控制指令,初學者建議直接用調試助手
單片機方面:首先對接收數據進行核對,如果不是本地地址,放棄,如果是本地地址,在檢測命令是否正確,如果正確,做出處理後返回PC本地地址並發送命令
我舉個例子教你怎麼玩多站通訊,下面是我已經通過測試的一個程序
#include <reg51.h> //選用晶振11.0592MHz
#include <absacc.h>
#define DATA51 DBYTE[0x80] //80H存數據
#define AddressID 0x31 //本機地址1
sbit RS485E=P3^7; //定義485的使能腳// RS5485E=0為接收狀態 RS5485E=1為發送狀態
sbit MAX485_DIR=P3^7;
main()
{

//****************通訊設置
SCON = 0xF0; //REN=1允許串列接受狀態,串口工作模式3,SM2=1
TMOD|= 0x20; //定時器工作方式2
PCON|= 0x80; //波特率提高一倍
IP=0x10; //串口優先順序高
// TH1 = 0xFD; //baud*2 /* reload value 19200、數據位8、停止位1。效驗位無(11.0592)
TH1 = 0xf4; //fa // //baud*2 /* 波特率4800、數據位8、停止位1。效驗位無 (11.0592M)
TL1 = 0xf4;
TR1 = 1; //開啟定時器1
EA = 1; // 開總中斷
ES = 1; //開串口中斷
RS485E=0; // RS5485E=0為接收狀態 RS5485E=1為發送狀態
while(1);
}

void counter4(void) interrupt 4 using 2 //串口中斷
{
while(RI==0);
RI=0;
if(SBUF==AddressID)
{
while(RI==0);
RI=0;
if(SBUF==0x01) //發送指令
{
MAX485_DIR=1; //開發送
SBUF=AddressID;
while(TI==0);
TI=0;
SBUF=0x6f; //發送o
while(TI==0);
TI=0;
SBUF=0x6b; //發送k
MAX485_DIR=0; //開接收
}

if(SBUF==0x00) //接收
{
//這里怎麼處理就看你自己要怎麼做了,你沒要求,我也不好怎麼寫,就自己寫吧
}
}

}
程序調試通過,可以直接套用

❻ C語言---51單片機與PC串口通信程序

可以用個一維陣列來儲存,然後判斷是否為3.06

❼ 怎麼利用單片機與pc進行實時通信

如果硬體沒有問題的話,你的軟體程序可以拆分為以下考慮 1、串口通信有問題嗎?你先保證PC串口調試軟體發一個數據,單片機能准確收到。 調試辦法,單片機接收到後,體現在io管腳上或指示燈指示。如pc發送0x55,看看單片機是不是收到了; 2、單片機的lcd液晶顯示 你用的是12864不知道控制器是什麼信號的,KS0107,T6963C還是ST7920,對照液晶說明書,關鍵字設置,點亮液晶,比如在固定位置顯示一個字元 如果上面兩條都實現了, 把兩段程序柔和到一起就ok了

❽ PC通過485與51單片機通訊去控制繼電器,如何編單片機C語言程序

51對於繼電器的控制,只用高低電平就可以了。關鍵是,你在你的程序里要有一個判斷子程序,判斷單片機從PC機(通過RS485)穿過來的是什麼數據,從而對單片機的某位置位或者復位。比如:你可以用一個if語句,如果收到的數據時11111,在置位,如果收到的數據時00000,則復位,相應的繼電器就會動作了。

❾ 求51單片機串口程序,單片機與PC互通訊,C語言

#include<AT89X51.H>
#include<string.h>
#include"com_0.h"

sbitled1=P1^0;
sbitled2=P1^6;
sbitled3=P2^5;
sbitled4=P2^0;
sbitsw1=P3^6;
sbitsw2=P3^7; //接到XTAL1不對

voidSetupTimer0()
{
TMOD&= 0XF0;//僅保留T1信息
TMOD|= 0X02;//設置T0: 定時功能,方式2,自動重載8位定時器/計數器
TH0 =256-250;//定時每0.25ms中斷一次
TL0 =256-250;
TR0 =1; //開啟定時器
ET0 =1; //定時器0中斷打開
}

dataunsignedcharus250;
dataunsignedintms;
voidTimer0_ISR()interrupt 1//定時中斷服務程序,為按鍵消抖服務
{
if(++us250<4)return;
us250=0;++ms;
}

dataunsignedintk1t,k2t;
bit k1s,k2s;
//按鍵掃描(含消抖),無鍵盤事件返回0
//按下sw1,返回1抬起, 返回2
//按下sw2,返回3抬起, 返回4
unsignedcharkey()
{
dataunsignedintt;
t = ms-k1t;
if(t>1000) k1t=ms-1000;
if(sw1==1&&k1s==0&& t>10)
{k1s=1; k1t=ms;return2;}
if(sw1==0&&k1s==1&& t>10)
{k1s=0; k1t=ms;return1;}
if(sw1==k1s)k1t=ms;

t = ms-k2t;
if(t>1000) k2t=ms-1000;
if(sw2==1&&k2s==0&& t>10)
{k2s=1; k2t=ms;return4;}
if(sw2==0&&k2s==1&& t>10)
{k2s=0; k2t=ms;return3;}
if(sw2==k2s)k2t=ms;

return0;
}

voidmain()
{
dataunsignedcharch;
datacharbuf[16];
dataunsignedcharbufp;
bit LED2; //用以記住當前led2的狀態
us250=ms=bufp=0;
k1t=k2t=0;
sw1=sw2=1=k1s=k2s=1;
SetupTimer0();
Com0Init();
EA=1; //全局中斷打開
Com0PutStr("Start... ");
while(1)
{
ch=key();
switch(ch)
{
case1:
led2=LED2;LED2^=1;
Com0PutStr(LED2?"LED2ON ":"LED2OFF ");
break;
case3:
led4=0; Com0PutStr("LED4ON ");
break;
case4:
led4=1; Com0PutStr("LED4OFF ");
break;
}

if(Com0Ready()==0) continue;

ch=Com0Getch();
if(ch==' '||ch==' ') ch=0;
//下面一行防止非法按鍵造成緩沖溢出
if(bufp>=15){memmove(buf, buf+1,15); bufp=14;}
buf[bufp++]=ch;
if(ch) continue;
if (strcmp("L10",buf)==0) {led1=0;Com0PutStr("LED1ON ");}
elseif (strcmp("L11",buf)==0) {led1=1;Com0PutStr("LED1OFF ");}
elseif (strcmp("L30",buf)==0) {led3=0;Com0PutStr("LED3ON ");}
elseif (strcmp("L31",buf)==0) {led3=1;Com0PutStr("LED3OFF ");}
else { Com0PutStr("Bad command. ");}
bufp=0;//命令處理完畢,則清除緩沖
}
}


❿ 單片機與PC怎麼 通信

我就我所知道的給你說說。
單片機的邏輯0是0V,邏輯1是+5V;而PC用的是負邏輯,邏輯0在+9v~+15v之間,邏輯1在-9v~-15v之間。若用九針串口連接的話,先得電平轉換,(轉換晶元就是大家熟知的RS232,轉3.3v
的話用RS3232).之後最重要做麻煩的就是要把時序和波特率設置好(說白了就是遵循相同的協議),這樣單片機和PC之間就可以互聯互通了,單片機中的串口通信講的就是這方面的內容,這些資料網上很豐富,或者買個單片機開發板研究研究。

閱讀全文

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

熱點內容
華為的伺服器現在被什麼公司收購 瀏覽:285
伺服器粘包怎麼處理 瀏覽:726
怎麼進創意工坊的伺服器 瀏覽:786
空調壓縮機加變頻器 瀏覽:968
加密貨幣有哪些可以玩 瀏覽:993
騰訊雲伺服器如何生成備案授權碼 瀏覽:950
計算機學演算法好還是人工智慧 瀏覽:500
java命令運行eclipse 瀏覽:979
u盤加密其他辦法 瀏覽:808
zm螺紋演算法 瀏覽:778
excel與數據分析pdf 瀏覽:153
特斯拉的智能演算法 瀏覽:204
單片機開發費用 瀏覽:937
軸流壓縮機原理 瀏覽:290
右鍵只顯示文件夾 瀏覽:548
壓縮皮膚哪個好用嗎 瀏覽:504
為什麼右鍵中新建文件夾沒有了 瀏覽:177
算術平均演算法教程 瀏覽:558
電視上App怎麼調亮度 瀏覽:946
優酷app怎麼點擊彈窗 瀏覽:703