娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月04日(星期一)

正在發(fā)生

2021年11月04日 | 指針的第五大好處,指針在眾多數(shù)組中的中轉站作用

發(fā)布者:泉趣人 來源: eefocus關鍵字:指針  數(shù)組  中轉站 手機看文章 掃描二維碼
隨時隨地手機看文章

一、使用proteus繪制簡單的電路圖,用于后續(xù)仿真

二、編寫程序


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

---- @Project: Pointer

---- @File: main.c

---- @Edit: ZHQ

---- @Version: V1.0

---- @CreationTime: 20200809

---- @ModifiedTime: 20200809

---- @Description:

---- 波特率是:9600 。

---- 通訊協(xié)議:EB 00 55  XX   

---- 通過上位機來調用下位機對應的數(shù)組數(shù)據(jù) 。

---- 通過電腦串口調試助手,往單片機發(fā)送EB 00 55 XX 指令,其中EB 00 55是數(shù)據(jù)頭,XX的取值范圍是0x01 至 0x05,每個不同的值代表調用下位機不同的數(shù)組數(shù)據(jù)。0x01調用第1組數(shù)據(jù),0x02調用第2組數(shù)據(jù),0x05調用第5組數(shù)據(jù)。

---- 第1組:11 12 13 14 15

---- 第2組:21 22 23 24 25

---- 第3組:31 32 33 34 35

---- 第4組:41 42 43 44 45 

---- 第5組:51 52 53 54 55

----

---- 下位機返回21個數(shù)據(jù),前面5個是第1種不帶指針函數(shù)返回的數(shù)據(jù)。中間5個是第2種不帶指針函數(shù)返回的數(shù)據(jù)。最后5個是第3種帶指針函數(shù)返回的數(shù)據(jù)。期間2組EE EE EE是各函數(shù)返回的數(shù)據(jù)分割線,為了方便觀察,沒實際意義。

---- 比如電腦發(fā)送:EB 00 55 02

---- 單片機就返回:21 22 23 24 25 EE EE EE 21 22 23 24 25 EE EE EE 21 22 23 24 25 

---- 單片機:AT89C52

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

#include "reg52.h"

/*——————宏定義——————*/

#define FOSC 11059200L

#define BAUD 9600

#define T1MS (65536-FOSC/12/500)   /*0.5ms timer calculation method in 12Tmode*/

 

#define const_array_size  5  /* 參與排序的數(shù)組大小 */

 

#define const_voice_short 19 /*蜂鳴器短叫的持續(xù)時間*/

#define const_rc_size 10 /*接收串口中斷數(shù)據(jù)的緩沖區(qū)數(shù)組大小*/

 

#define const_receive_time 5 /*如果超過這個時間沒有串口數(shù)據(jù)過來,就認為一串數(shù)據(jù)已經全部接收完,這個時間根據(jù)實際情況來調整大小*/

 

/*——————變量函數(shù)定義及聲明——————*/

/*蜂鳴器的驅動IO口*/

sbit BEEP = P2^7;

/*LED*/

sbit LED = P3^5;

 

unsigned int uiSendCnt = 0; /*用來識別串口是否接收完一串數(shù)據(jù)的計時器*/

unsigned char ucSendLock = 1; /*串口服務程序的自鎖變量,每次接收完一串數(shù)據(jù)只處理一次*/

unsigned int uiRcregTotal = 0; /*代表當前緩沖區(qū)已經接收了多少個數(shù)據(jù)*/

unsigned char ucRcregBuf[const_rc_size]; /*接收串口中斷數(shù)據(jù)的緩沖區(qū)數(shù)組*/

unsigned int uiRcMoveIndex = 0; /*用來解析數(shù)據(jù)協(xié)議的中間變量*/

 

unsigned int uiVoiceCnt = 0; /*蜂鳴器鳴叫的持續(xù)時間計數(shù)器*/

 

const unsigned char array_0x01[] = {0x11, 0x12, 0x13, 0x14, 0x15};

const unsigned char array_0x02[] = {0x21, 0x22, 0x23, 0x24, 0x25};

const unsigned char array_0x03[] = {0x31, 0x32, 0x33, 0x34, 0x35};

const unsigned char array_0x04[] = {0x41, 0x42, 0x43, 0x44, 0x45};

const unsigned char array_0x05[] = {0x51, 0x52, 0x53, 0x54, 0x55};

 

/**

* @brief  定時器0初始化函數(shù)

* @param  無

* @retval 初始化T0

**/

void Init_T0(void)

{

TMOD = 0x01;                    /*set timer0 as mode1 (16-bit)*/

TL0 = T1MS;                     /*initial timer0 low byte*/

TH0 = T1MS >> 8;                /*initial timer0 high byte*/

}

 

/**

* @brief  串口初始化函數(shù)

* @param  無

* @retval 初始化T0

**/

void Init_USART(void)

{

SCON = 0x50;

TMOD = 0x21;                    

TH1=TL1=-(FOSC/12/32/BAUD);

}

 

/**

* @brief  外圍初始化函數(shù)

* @param  無

* @retval 初始化外圍

* 讓數(shù)碼管顯示的內容轉移到以下幾個變量接口上,方便以后編寫更上一層的窗口程序。

* 只要更改以下對應變量的內容,就可以顯示你想顯示的數(shù)字。

**/

void Init_Peripheral(void)

{

ET0 = 1;/*允許定時中斷*/

TR0 = 1;/*啟動定時中斷*/

TR1 = 1;

ES = 1; /*允許串口中斷*/

EA = 1;/*開總中斷*/  

}

 

/**

* @brief  初始化函數(shù)

* @param  無

* @retval 初始化單片機

**/

void Init(void)

{

LED  = 0;

Init_T0();

Init_USART();

}

/**

* @brief  延時函數(shù)

* @param  無

* @retval 無

**/

void Delay_Long(unsigned int uiDelayLong)

{

   unsigned int i;

   unsigned int j;

   for(i=0;i   {

      for(j=0;j<500;j++)  /*內嵌循環(huán)的空指令數(shù)量*/

          {

             ; /*一個分號相當于執(zhí)行一條空語句*/

          }

   }

}

/**

* @brief  延時函數(shù)

* @param  無

* @retval 無

**/

void Delay_Short(unsigned int uiDelayShort)

{

  unsigned int i;

  for(i=0;i  {

; /*一個分號相當于執(zhí)行一條空語句*/

  }

}

 

/**

* @brief  串口發(fā)送函數(shù)

* @param  unsigned char ucSendData

* @retval 往上位機發(fā)送一個字節(jié)的函數(shù)

**/

void eusart_send(unsigned char ucSendData)

{

ES = 0; /* 關串口中斷 */

TI = 0; /* 清零串口發(fā)送完成中斷請求標志 */

SBUF = ucSendData; /* 發(fā)送一個字節(jié) */

 

Delay_Short(400); /* 每個字節(jié)之間的延時,這里非常關鍵,也是最容易出錯的地方。延時的大小請根據(jù)實際項目來調整 */

TI = 0; /* 清零串口發(fā)送完成中斷請求標志 */

ES = 1; /* 允許串口中斷 */

}

 

/**

* @brief  第1種函數(shù)

* @param  ucArraySec 

* @retval 

* 第1種函數(shù),內部不帶指針,根據(jù)上位機相關的指令,

* 直接返回對應的數(shù)組。由于不帶指針,因此多用了5個for循環(huán)來搬運數(shù)組。

* 比較耗程序ROM容量,也不夠簡潔清晰。

**/

void send_array_1(unsigned char ucArraySec)

{

unsigned char i;

    switch (ucArraySec)

    {

        case 1: /* 直接返回第1個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                eusart_send(array_0x01[i]);

            }

            break;

        case 2: /* 直接返回第2個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                eusart_send(array_0x02[i]);

            }

            break;

        case 3: /* 直接返回第3個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                eusart_send(array_0x03[i]);

            }

            break;

        case 4: /* 直接返回第4個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                eusart_send(array_0x04[i]);

            }

            break;

        case 5: /* 直接返回第5個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                eusart_send(array_0x05[i]);

            }

            break;

    }

}

 

/**

* @brief  第2種函數(shù)

* @param  ucArraySec 

* @retval 

* 第2種函數(shù),內部不帶指針,根據(jù)上位機相關的指令,

* 先轉移對應的數(shù)組放到一個中間變量數(shù)組,然后發(fā)送數(shù)組。

* 由于不帶指針,因此多用了6個for循環(huán)來搬運數(shù)組。

* 跟第1種函數(shù)一樣,比較耗程序ROM容量,也不夠簡潔清晰。

**/

void send_array_2(unsigned char ucArraySec)

{

unsigned char i;

    unsigned char array_temp[5];    /* 臨時中間數(shù)組 */

    switch (ucArraySec)

    {

        case 1: /* 直接返回第1個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                array_temp[i] = array_0x01[i];  /* 先挨個把對應的數(shù)組數(shù)據(jù)轉移到中間數(shù)組里 */

            }

            break;

        case 2: /* 直接返回第2個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                array_temp[i] = array_0x02[i];  /* 先挨個把對應的數(shù)組數(shù)據(jù)轉移到中間數(shù)組里 */

            }

            break;

        case 3: /* 直接返回第3個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                array_temp[i] = array_0x03[i];  /* 先挨個把對應的數(shù)組數(shù)據(jù)轉移到中間數(shù)組里 */

            }

            break;

        case 4: /* 直接返回第4個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                array_temp[i] = array_0x04[i];  /* 先挨個把對應的數(shù)組數(shù)據(jù)轉移到中間數(shù)組里 */

            }

            break;

        case 5: /* 直接返回第5個常量數(shù)組 */

            for(i = 0; i < 5; i ++)

            {

                array_temp[i] = array_0x05[i];  /* 先挨個把對應的數(shù)組數(shù)據(jù)轉移到中間數(shù)組里 */

            }

            break;

    }

    for(i = 0; i < 5; i ++)

    {

        eusart_send(array_temp[i]); /* 把臨時存放在中間數(shù)組的數(shù)據(jù)全部發(fā)送出去 */

    }

}

 

/**

* @brief  第3種函數(shù)

* @param  ucArraySec 

* @retval 

* 第3種函數(shù),內部帶指針,根據(jù)上位機相關的指令,

* 先把對應的數(shù)組首地址傳遞給一個中間指針,然后再通過

* 指針把整個數(shù)組的數(shù)據(jù)發(fā)送出去,由于帶指針,切換轉移數(shù)組的數(shù)據(jù)非常快,

* 只需傳遞一下首地址給指針就可以,非常高效,整個函數(shù)只用了1個for循環(huán)。

* 跟前面第1,2種函數(shù)相比,更加節(jié)省程序容量,處理速度更加快,更加簡潔。

**/

void send_array_3(unsigned char ucArraySec)

{

unsigned char i;

    unsigned char *p_array;    /* 臨時中間指針,作為數(shù)組的中轉站,非常高效 */

    switch (ucArraySec)

    {

        case 1: /* 直接返回第1個常量數(shù)組 */

            p_array = array_0x01;   /* 把數(shù)組的首地址傳遞給指針,一個指令就可以,不用for來挨個搬移數(shù)據(jù),高效 */

            break;

        case 2: /* 直接返回第2個常量數(shù)組 */

            p_array = array_0x02;   /* 把數(shù)組的首地址傳遞給指針,一個指令就可以,不用for來挨個搬移數(shù)據(jù),高效 */

            break;

        case 3: /* 直接返回第3個常量數(shù)組 */

            p_array = array_0x03;   /* 把數(shù)組的首地址傳遞給指針,一個指令就可以,不用for來挨個搬移數(shù)據(jù),高效 */

            break;

        case 4: /* 直接返回第4個常量數(shù)組 */

            p_array = array_0x04;   /* 把數(shù)組的首地址傳遞給指針,一個指令就可以,不用for來挨個搬移數(shù)據(jù),高效 */

            break;

        case 5: /* 直接返回第5個常量數(shù)組 */

            p_array = array_0x05;   /* 把數(shù)組的首地址傳遞給指針,一個指令就可以,不用for來挨個搬移數(shù)據(jù),高效 */

            break;

[1] [2]
關鍵字:指針  數(shù)組  中轉站 引用地址:指針的第五大好處,指針在眾多數(shù)組中的中轉站作用

上一篇:用關中斷和互斥量來保護多線程共享的全局變量
下一篇:為指針加上緊箍咒const,避免意外修改了只做輸入接口的數(shù)據(jù)

推薦閱讀

火熱的智能手表市場絲毫沒有任何放緩的跡象,而且它可能剛剛創(chuàng)下了一個新的重要里程碑。Strategy Analytics 估計,智能手表出貨量在 2018 年第 3 季度年增率增加了 67%,達到 1000 萬支大關。蘋果 (AAPL-US) 仍執(zhí)業(yè)界牛耳,根據(jù)估算,第 3 季智能手表市場蘋果約占 45%,估計年增成長 25%,推估銷售 360 萬支。但值得注意的是,蘋果公司從...
在大力倡導數(shù)字化、柔性化的時代背景下,一方面要實現(xiàn)智能裝配,另一方面也要重視過程中的科學控制與管理必。這樣一來,不僅可以精簡工作步驟,還可以顯著提高產品的裝配質量與生產效率。 作為自動化生產裝配行業(yè)盛會,上海國際工業(yè)裝配與傳輸技術展覽會十多年來就致力于推動汽車零部件、電子、家電、新能源汽車、醫(yī)療、電梯、食品、飲料、包裝、煙草及日...
摘要:5G最突出的優(yōu)點在于低時延和高速通信,它會給嵌入式產業(yè)帶來哪些機會呢?在各領域5G升級構建過程中,基礎硬件設備作為硬件層建設的中流砥柱, 硬件廠商又需要做哪些方面的準備和改變呢?本文將為您詳細解讀。 一、認識5G 1. 背景介紹 第五代移動通信技術(5th generation wireess systems)簡稱5G或5G技術)是最新一代蜂窩移動通信技術。回顧移動...
西門子與臺積電深化合作,不斷攀登設計工具認證高峰近日在臺積電 2021開放創(chuàng)新平臺?(OIP)生態(tài)系統(tǒng)論壇上,西門子數(shù)字化工業(yè)軟件公布了一系列與臺積電攜手交付的新產品認證,雙方已在云上 IC 設計以及臺積電3D 硅堆疊和先進封裝技術系列——3DFabric?方面達到了關鍵里程碑。近期獲得臺積電 N3 和 N4 工藝認證的西門子 EDA 產品包括Calibre?n...

史海拾趣

問答坊 | AI 解惑

淺談監(jiān)控“電子眼”在春運中的應用

“春運”這個中國特有的名詞,1989年,伴隨著農民工潮,中國媒體第一次大量使用“春運”字眼。以春節(jié)為界,節(jié)前15天,節(jié)后25天,共40天,為此由國家經貿委統(tǒng)一發(fā)布,鐵道部、交通部、民航總局按此進行專門運輸安排的全國性交通運輸高峰叫做春運。 ...…

查看全部問答∨

我的FLUKE196壞了,請大家給個建議。

fluke196示波表能做表,二個通道不示波,不知道是設置問題還是壞了,那位大蝦指點一下 。…

查看全部問答∨

有人詢問NANDFLASH的尋址方式,簡單說下

Nand Flash結構與讀寫分析 NAND Flash 的數(shù)據(jù)是以bit 的方式保存在memory cell,一般來說,一個cell 中只能存儲一個bit。這些cell 以8 個或者16 個為單位,連成bit line,形成所謂的byte(x8)/word(x16),這就是NAND Device 的位寬。這些Line 會再 ...…

查看全部問答∨

M22 如何發(fā)彩信

Atmega64 加明基M22gsm模塊,如何實現(xiàn)彩信收發(fā)。也就是說與gprs連接需要發(fā)送那些數(shù)據(jù)?!!!。。。…

查看全部問答∨

VxWorks中的守護任務(daemon task)

Vxworks中的守護任務(daemon task)與一般的任務有什么區(qū)別?編寫守護任務需要注意什么?最好能夠舉個實例。小女子初學vxworks,還請各位大俠不嗇賜教,在此感激不盡。…

查看全部問答∨

PB Runtime Error,奇怪啊。

我剛開始打開 PB工程,彈出如下對話框。 注銷電腦還是這樣   但是打開別的工程不會請問是咋回事?大家有遇到過嗎? 我暈,我把以前的同名工程拷貝進來還是一樣,難道是對這個名字起了封殺令! 呵呵,先回家,明年看看還會不會, ...…

查看全部問答∨

SIGNAL (SIG_OVERFLOW0)的幾個問題?

volatile MyLong32T  counter = 0;          SIGNAL (SIG_OVERFLOW0) {     counter =  counter + 1;     PollApplication(counter);//輸出counter的數(shù)值   ...…

查看全部問答∨

用vs2005進行wince開發(fā)的問題

我明明在MSDN查到在wince中存在Application.StartupPath,MessageBoxIcon.Information,MessageBoxIcon.Error等的用法。但在實際編wince的程序的時候,卻出現(xiàn)如下錯誤: ------ 已啟動生成: 項目: 相片管理器CE, 配置: Debug Any CPU ------ C:\\WI ...…

查看全部問答∨

用匯編編寫“寫FLASH程序”

我的應用程序用HEX30轉換INTEL格式后,再把它轉成2進制文件 FOR.BIN,請問在我的匯編編寫的“寫FLASH程序”--writhflash.asm中怎樣把這個文件作為數(shù)據(jù)連接到我的COFF文件中? …

查看全部問答∨

ucos2任務建立詳解與分析--中文的哦

對于新手理解任務的建立,等待,以及相關的設定有很大的幫助 [ 本帖最后由 xinjitmzy 于 2012-7-11 13:26 編輯 ]…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 天长市| 宁安市| 武夷山市| 连南| 台北县| 犍为县| 永寿县| 泰州市| 广水市| 沙雅县| 临安市| 三门县| 原阳县| 东兴市| 通城县| 于都县| 西华县| 仙居县| 子洲县| 荥经县| 增城市| 德保县| 基隆市| 会理县| 宁乡县| 陵川县| 大厂| 红桥区| 额敏县| 阳西县| 惠安县| 尼勒克县| 巴青县| 固镇县| 襄樊市| 凌源市| 富顺县| 嘉荫县| 静安区| 金堂县| 大英县|