PC端微控制器監視系統

2021-07-25 21:03:45 字數 1486 閱讀 3031

我用的是串列埠傳輸,其實如果做成usb應該會更方便一點。我監視的點並不多,輸入16個,輸出16個,這樣我用了兩個16位變數就行了。

uint16_t xstatus;

uint16_t ystatus;

針對輸入的話我們可以直接讀,輸出呢?如果需要輸出的話就對ystatus進行位賦值,然後在乙個定時器1ms中斷中根據yststus的值對y進行輸出。

(輸入也可以在1ms變數中進行判斷賦值,方然10ms,20ms都可以,取決於你的要求)

變數的話有點麻煩了,如果不需要上位機顯示變數名,只需要定義乙個陣列就行了,但那樣不直觀,我是不接受。還有就是這個東西也要方便別人使用,那麼別人不能新增乙個變數後還要在傳送函式中新增相應的傳送**,這樣也很麻煩,那麼,結構體就派上用場了!

typedef

struct

allvariable_des;

struct variable

;

這兩個宣告放在標頭檔案中,然後在c檔案中進行定義,那麼如何使用呢?

1在標頭檔案variable中新增自己需要用的變數名字(由於我的協議是自己定義的,所以我要求自己定義的變數是四個字元)

2在c檔案中對值進行初始化,改賦值的賦值,記著把.name賦值為你的變數名

3然後你該怎麼寫程式怎麼寫程式就行了,只是對y賦值變為了對ystatus進行bit賦值(寫個函式其實是很容易變成自己習慣的賦值方式了)

void sendmonitor(void)

ystatus=0;

for(i=1;i<17;i++)

data[0]=0x21;

data[1]=0x02;

data[2]=bcd_ascll[ystatus>>12];

data[3]=bcd_ascll[(ystatus>>8) & 0x0f];

data[4]=bcd_ascll[(ystatus & 0x00f0) >>4];

data[5]=bcd_ascll[ystatus & 0x000f];

data[6]=bcd_ascll[xstatus>>12];

data[7]=bcd_ascll[(xstatus>>8) & 0x0f];

data[8]=bcd_ascll[(xstatus & 0x00f0) >>4];

data[9]=bcd_ascll[xstatus & 0x000f];

data[10]=0xff;

printf("%s",data);

memset(data,0,sizeof(data));

}

**就是上面的了,協議很簡單,就乙個0x21做幀頭,固定11個位元組,沒有加什麼校驗。對變數值進行採集的時候是直接對位址操作的,我們首先判斷出總的占用記憶體然後根據成員求出總共定義了多少個變數,接著利用位址累加的方式進行採集然後傳送。

微控制器及微控制器系統

微控制器及微控制器系統 1 什麼是微控制器?微控制器是將 處理器 cpu 隨機儲存器 ram 唯讀儲存器 rom或eprom 定時器晶元和一些輸入 輸出介面電路整合在乙個晶元上的微控制器 microcontroller 處理器包括運算器 控制器和暫存器3個主要部分,是微控制器的核心。儲存器按工作方式...

微控制器 串列埠與PC通訊

先通過串列埠除錯工具即pc傳送字元給微控制器,微控制器接收資料後再發給pc,再次通過串列埠除錯工具觀察傳送結果,即實現了pc到微控制器的收發 由於本地 需要安裝虛擬串列埠,pc用com1口,mcu的compim設為com2,波特率均為9600 org 0000h ajmp main org 0023...

微控制器與PC機電話遠端通訊系統

s3c2410 arm9開發板 豪華的微控制器開發系統 無憂無線soc開發平台 無憂 開發板 s3c44b0 arm7 開發板 1.引言 隨著通訊技術的不斷發展,計算機網路系統通訊是當今技術發展的乙個重要的方向,然而在網路系統中利用現有 網作為通訊通道則是最經濟 最方便和最可靠的方法。當前現代 通訊...