久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9326|回復: 28
打印 上一主題 下一主題
收起左側

分享一個設置STC系列單片機端口模式的頭文件

  [復制鏈接]
跳轉到指定樓層
樓主
此頭文可以比較方便快捷的按位來設定每個端口的模式,可以給初學者帶來不少便利。

IO口模式設置時,從左至右為從高到低 7~0 端口, “O”為大寫字母“O”,不是數字“0”,4位之間用下劃線“_”分割。
D 準雙向
H 高阻狀態
P 強推挽
O 開漏模式

include 此頭文件以后,設置時可以直接用  PxMode 取代原來的  PxM0,以及 PxM1

設置示例:         
P5Mode = DDHO_DDDD;   即,設置P55 為高阻,P54 為開漏,其他IO為準雙向。

P1Mode = DDDD_HHDP;    即,設置 P10 為推挽,P12,P13為高阻,其他IO為準雙向。
以此類推。



下載: PortMode.rar (13.56 KB, 下載次數: 147)
在Keil_C語言中輸入二進制的頭文件:http://www.zg4o1577.cn/bbs/dpj-213110-1.html

評分

參與人數 2黑幣 +62 收起 理由
catlu + 12
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏25 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:262 發表于 2021-9-3 23:11 | 只看該作者
有了這個真方便,這是官方出的嗎?
回復

使用道具 舉報

板凳
ID:624769 發表于 2021-9-3 23:21 | 只看該作者
heicad 發表于 2021-9-3 23:11
有了這個真方便,這是官方出的嗎?

不是,是以前有斷時間經常改板子,換端口,改PxM0, PxM1不勝其煩,想要像用二進制頭文件一樣,直觀改端口,就自己做了一個頭文件。今天逛論壇,正好看到一個分享端口設置XLS文件的帖子。覺得可能有人需要這樣的頭文件,就拿出來分享一下了。

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:277290 發表于 2021-9-4 08:15 | 只看該作者
有了這個方便多了,簡單易記,謝謝分享!
回復

使用道具 舉報

5#
ID:64089 發表于 2021-9-4 08:36 | 只看該作者
這個還真是很實用,謝謝分享。
回復

使用道具 舉報

6#
ID:220936 發表于 2021-9-4 10:51 | 只看該作者
真不錯,實用
回復

使用道具 舉報

7#
ID:88606 發表于 2021-9-4 14:53 | 只看該作者
真的實用啊!
回復

使用道具 舉報

8#
ID:884042 發表于 2022-3-30 19:40 | 只看該作者
好家伙,里面那么多宏定義,編寫者肛了多久啊
回復

使用道具 舉報

9#
ID:333678 發表于 2022-3-31 07:22 來自手機 | 只看該作者
感謝樓主分享,很實用。
回復

使用道具 舉報

10#
ID:468878 發表于 2022-3-31 08:35 | 只看該作者
這很方便的,懶得翻手冊了。
回復

使用道具 舉報

11#
ID:170318 發表于 2022-3-31 09:03 | 只看該作者
有這個,確實是簡單、實用、方便
回復

使用道具 舉報

12#
ID:383215 發表于 2022-3-31 15:36 | 只看該作者
非常佩服樓主的執著,個人認為沒有必要,每次配置端口都要看手冊,的確很麻煩。

好記性不如爛筆頭,我把手冊里的端口配置表用制表符做進程序里,編新程序的時候從老程序里復制一下,看著這個表配置端口也很方便,只要記清楚&=~是置0,|=是置1就可以了。
//        ───────────────────────────────
//        |  PnM1.x  |  PnM0.x  | Pn.x 口工作模式 |
//        ───────────────────────────────
//        |      0       |      0        |       準雙向口      |
//        ───────────────────────────────
//        |      0       |      1        |       推挽輸出      |
//        ───────────────────────────────
//        |      1       |      0        |       高阻輸入      |
//        ───────────────────────────────
//        |      1       |      1        |       開漏輸出      |
//        ───────────────────────────────
//   80   40   20   10  |   08   04   02   01
//  X.7  X.6  X.5  X.4  |  X.3  X.2  X.1  X.0
P1M1 &= ~0x03 ;        P1M0 |= 0x03 ;          //        P1.0 P1.1 為推挽輸出
P1M1 &= ~0xfc ;        P1M0 &= ~0xfc ;       //        P1.2 - P1.7 為準雙向口
P3M1 &= ~0x08 ;        P3M0 |= 0x08 ;         //        P3.3 為推挽輸出
P3M1 &= ~0x30 ;        P3M0 |= 0x30 ;         //        P3.4 P3.5 為推挽輸出
P5M1 &= ~0x10 ;        P5M0 |= 0x10 ;         //        P5.4 為推挽輸出
也把這段表格和程序復制在這里,看看能不能對齊?需要的可以直接復制。

回復

使用道具 舉報

13#
ID:65286 發表于 2022-4-6 14:25 | 只看該作者
這個確實非常方便,我之前用工具高手寫的工具計算,也算是很方便,現分享出來。

STCIOset_v10b9h.rar

1.81 MB, 下載次數: 28, 下載積分: 黑幣 -5

回復

使用道具 舉報

14#
ID:192294 發表于 2022-4-21 16:40 | 只看該作者
kmsj 發表于 2022-3-31 15:36
非常佩服樓主的執著,個人認為沒有必要,每次配置端口都要看手冊,的確很麻煩。

好記性不如爛筆頭,我 ...

網上有一個宏處理的,很方便,代碼也不大,可以百度一下。
另外還可以使用STC的庫函數處理。

1309
回復

使用道具 舉報

15#
ID:624769 發表于 2022-4-29 00:37 | 只看該作者
hp34401a 發表于 2022-4-21 16:40
網上有一個宏處理的,很方便,代碼也不大,可以百度一下。
另外還可以使用STC的庫函數處理。

你也許對 "代碼也不大" 有點誤解.

H 頭文件,無論多大都不會影響 “代碼” 大小,
大多時候,引用 宏處理 最終“代碼”反而會大,引用 宏定義 最終代碼反而小。

同時回復 12 樓: 有沒有必要看實際效果。  假定 P1.0 P1.1 為推挽輸出,  P1.2 - P1.5 為準雙向口, P1.6 高阻, P1.7 開漏, 用你那個方法,或者 用宏處理大多需要 4 次設置,  總共需要 24個字節,而直接設置值需要6個字節,   如果 P0~P7 全盤設定一次, 用你的方式,總共:192個字節  直接設置 之需要48個字節, 還沒有算運行時間。

不想說哪個好,哪個不好, 只是想給,喜歡用 PxM0 = ??   PxM1 = ?? 的朋友,一個可以比較直觀快捷的,并且不增加“代碼尺寸” 的設置方法, 尤其是 STC15 系列 和STC12系列的頭文件里面 PxM0,和 PxM1 還是反的,一不小心還會中招,而這個頭文件的好處,就是能通吃。再也不用查手冊和核對頭文件來防止中招了。
回復

使用道具 舉報

16#
ID:99525 發表于 2022-4-29 19:59 | 只看該作者
這個很實用,方便很多了!
回復

使用道具 舉報

17#
ID:1001475 發表于 2022-4-30 23:59 來自手機 | 只看該作者
這個很實用,方便很多了!
回復

使用道具 舉報

18#
ID:383215 發表于 2022-5-1 15:29 | 只看該作者
樓主所言:“同時回復 12 樓: 有沒有必要看實際效果”我認為樓主并沒有把“實際效果” 看清楚,任何單片機程序就是一個大循環,端口配置的代碼在主函數到大循環之間,并沒有在大循環內部,所以,端口配置的代碼再復雜,影響單片機的實際運行時間很小很小,我寧愿一個端口一個端口的配置,哪怕默認的設置我也設置一遍,就算明知是無用的代碼也無所謂,是為了讓我的程序更容易理解,時間長了我自己還能看懂。就算我浪費1000個字節的代碼用來設置端口,最多就是單片機通電之后到主程序的大循環延長了0.001秒,也就是開機時間延長了0.001秒,這0.001秒能影響什么?我用的單片機是8K的ROM,我的程序5K左右就能編完,我節約幾百個字節的ROM有何意義?除非我的單片機只有4K的ROM,我會節約每一個語句,甚至用匯編來編,那是另當別論。
樓主所言:“用你的方式,總共:192個字節  直接設置 之需要48個字節, 還沒有算運行時間”,每個人的編程重點是不一樣的,我的編程重點放在CPU應用率,我的每一段程序都是用CPU應用率約束出來的,最重要的就是,不是代碼越短占用CPU運行時間越短,我主程序大循環里軟件延時的時間最多只有幾十微秒,包括按鍵去抖動,18B20之類的程序,沒有用長延時的辦法都解決了,比如我用10步讀出2個18B20的溫度值,一共花了0.1秒讀出溫度值,溫度是漸變,不是突變,我花一秒鐘讀出溫度值都不會影響我的程序,看下來我的18B20的程序非常復雜,然而實際運行效果是十幾個循環周期我才運行一步18B20的程序,和那些在一個循環周期完成18B20的程序,我的18B20程序CPU運行效率要高出10倍都不止。
樓主所言:“一不小心還會中招,而這個頭文件的好處,就是能通吃。再也不用查手冊和核對頭文件來防止中招了”,我編單片機還有一個重點是仿真,編程中招,那是家常便飯,靠查手冊和核對頭文件來防止中招,我認為不是主要的,仿真才是解決中招的最好辦法,我中過的招,任何手冊和書本以及各種資料上都沒有,只有靠仿真解決。由于AVR單片機漲價,被迫使用STC單片機,主要用STC1K08H替代AVR的ATMEGA8,由于STC的仿真并不好用,我就用89C51的老式仿真器仿真,所以我的程序就在89C51、STC、AVR之間移植過來移植過去。
綜上所述,每個人編單片機的重點不是一模一樣的,AVR單片機的端口操作比STC單片機還要復雜,STM32的端口操作更是復雜,STC單片機的端口操作對我而言算是比較簡單的了。樓主把自己辛辛苦苦編寫的關于STC單片機端口操作的頭文件奉獻出來,需要的網友一定是非常感激,但不是所有人都需要,所以樓主沒有必要讓所有人接受你的觀點,就像我也不可能讓所有人接受我注重CPU應用率和注重仿真的觀點。
回復

使用道具 舉報

19#
ID:624769 發表于 2022-7-28 23:11 | 只看該作者
kmsj 發表于 2022-5-1 15:29
樓主所言:“同時回復 12 樓: 有沒有必要看實際效果”我認為樓主并沒有把“實際效果” 看清楚,任何單片機 ...

你說了一大堆, 實在是…… 除了把問題描述的 模糊不清,完全不明白你要表達什么意思。

我說了,我分享出來,是讓有需要的人可以下載使用,不需要任何感激。沒有需要的也可以 直接繞道。
你覺得你有更完美的方案,你也可以另發一貼給 有需要的人,我也不會去你的帖子說好還是不好。

但是,你在我的帖子里說,這個方法,不如怎么怎么樣,那么,我自然要告訴你,你所說的“不如怎么怎么樣” 缺點在哪里。
然后,你再回復,就直接扯到18B20去了。我也不知道你扯這么遠是為了什么,你說不在乎開機初始化那點時間,為了讓程序更容易解讀,那么,事實上,針對端口設置,你所謂的 還不如怎么怎么樣 的方案,更容易解讀了么?
然后,你又說你不是代碼越短 占用CPU運行之間越短,那么,你提出的方案,代碼長度拉長,然后占用CPU運行時間更短了么?
你在18提出的各種論調,都不足以支撐你之前12樓的提出的主張, 真的不知道你這洋洋灑灑寫這么一大篇,想說明什么?想要體現 你會STM32 ?  我只是提供給大家一個 STC的端口模式設置方案,你要在這帖子里 討論 STM端口的設置方案?還是說你要我再出一個 STM的端口設置方案? 好歹你也是搞技術的,討論問題直來直去不行?? 非要那么多彎彎繞繞?
回復

使用道具 舉報

20#
ID:383215 發表于 2022-7-29 13:51 | 只看該作者
188610329 發表于 2022-7-28 23:11
你說了一大堆, 實在是…… 除了把問題描述的 模糊不清,完全不明白你要表達什么意思。

我說了,我分 ...

要直來直去,簡單的很啊,直截了當說,單片機編程是有級別劃分的,一是流水燈、二是多任務、三是CPU應用率、四是任意移植程序,你也已經說的清清楚楚“此頭文可以比較方便快捷的按位來設定每個端口的模式,可以給初學者帶來不少便利。”既然你這個頭文件是為了方便初學者,有人提出不同看法也很正常,我也說的清清楚楚,樓主把自己辛辛苦苦編寫的關于STC單片機端口操作的頭文件奉獻出來,需要的網友一定是非常感激,每個人對單片機編程的側重點是不一樣的,我也不可能要求所有人接受我注重CPU應用率和注重仿真的觀點,我的這種編程方法太累人了,我說STM32端口設置更復雜,并不是證明我懂STM32,這個論壇懂STM32的多了是了,我僅僅學會STM32的端口操作和流水燈,STM32就漲價了,我是個窮光蛋,用不起STM32,單片機編程只是我的一個業余愛好,我的水平太一般了。
回復

使用道具 舉報

21#
ID:624769 發表于 2022-7-29 23:44 | 只看該作者
你說直接了當說,然后說了:“單片機編程是有級別劃分的,一是流水燈、二是多任務、三是CPU應用率、四是任意移植程序”  下文呢?后續你把這4點,和你主張的端口模式 對應起來呀!!,我讀了通篇都沒有看你對應。好吧,略過這一句,我們再往下面看。

我說給提供給有需要的人,顯然,你屬于不需要的人,那你不要下載就可以了,我也沒求你用對不對? 這個頭文件,我做做也就是2分鐘的事情,并不辛苦,所以不需要用的的人感激,要說辛苦,為了讓有需要,想用的人明白怎么用,寫注釋用了5分鐘,這勉強算辛苦吧,然后,回復你的錯誤論調,告訴你,你以為的“更優” 其中的缺陷,花了半小時,這才算真正的辛苦。當然,也不需要你理解,不需要你感激。

然后,你有不同的觀點,可以啊,但是,至少要是:正確的,并且是你的觀點。 對不對?結果呢? 你給的例子,是STC官方就有的,壓根不是你自己的,然后,你覺得更好~~,實際呢?你測試過么?我告訴你效率低,占空間大,你扯去應用率。這罷了,我們再往下看。

你說: 每個人對單片機編程的側重點是不一樣的,我也不可能要求所有人接受我注重CPU應用率和注重仿真的觀點,
所以請問:針對這點來說,你主張的端口的設置的方式,相較于我提供端口設置方式,在CPU應用率 上有什么提高呢?


所以,你說了簡單來說,又說直來直去的說,說到最后,你還是兜了個圈子之后,說了一堆 “地球是圓的”,關于你覺得我提供的方案不如你推薦的方案的理由,事實根據,一樣都沒有說……




回復

使用道具 舉報

22#
ID:130230 發表于 2022-8-1 14:55 | 只看該作者
開源精神值得肯定,但確實沒啥必要。
回復

使用道具 舉報

23#
ID:69115 發表于 2022-8-1 18:02 | 只看該作者
都是高手,都把觀點擺出來討論是好事,感謝樓主供獻那么實用的 IO模式設置 頭文件.
對于初學者可以帶來很大的幫助.
到了高手階段,可有自己更好的辦法,或者是直接就可以二進 十六進制 心算了.
回復

使用道具 舉報

24#
ID:160197 發表于 2022-8-3 16:34 | 只看該作者
我用函數 也寫了一個 。 作者的 想法是好的 。

/***************************************************************************
函數名稱:
功能描述:stc8a8k64d4 GPIO 配置   D 為雙向口  ,P為 推挽 ,H為高阻 ,O 為開漏
參    數: 無
返    回:無
備    注:舉例 set_gpio_mode(0 , "DDDD HOPD")
****************************************************************************/
void set_gpio_mode( unsigned char gpio , char n[] )
{
        unsigned char M1 , M0 , i ;
       
        for( i= 0 ; i < 9 ; i ++ )
        {
                        if( i == 4 )
                                continue ;
                       
                        M1 <<= 1 ;
                        M0 <<= 1 ;
                       
                        switch( n[i] )
                        {
                                case 'D' :     // 00
                                {
                                        M1 &= ~0x01 ;
                                        M0 &= ~0x01 ;
                                }
                                break ;
                               
                                case 'P' :   // 01
                                {
                                        M1 &= ~0x01 ;
                                        M0 |= 0x01 ;
                                }
                                break ;               

                                case 'H' :   // 10
                                {
                                        M1 |= 0x01 ;
                                        M0 &= ~0x01 ;
                                }
                                break ;               

                                case 'O' :  // 11
                                {
                                        M1 |= 0x01 ;
                                        M0 |= 0x01 ;
                                }
                                break ;                       
                        }
  }
       
        switch( gpio )
        {
                        case 0 :        //P0
                        {
                                P0M1 = M1 , P0M0 = M0 ;
                        }
                        break ;
                       
                        case 1 :        //P1
                        {
                                P1M1 = M1 , P1M0 = M0 ;
                        }
                        break ;
                       
                        case 2 :        //P2
                        {
                                P2M1 = M1 , P2M0 = M0 ;
                        }
                        break ;

                        case 3 :        //P3
                        {
                                P3M1 = M1 , P3M0 = M0 ;
                        }
                        break ;

                        case 4 :        //P4
                        {
                                P4M1 = M1 , P4M0 = M0 ;
                        }
                        break ;

                        case 5 :        //P5
                        {
                                P5M1 = M1 , P5M0 = M0 ;
                        }
                        break ;

                        case 6 :        //P6
                        {
                                P6M1 = M1 , P6M0 = M0 ;
                        }
                        break ;               
       
                        case 7 :        //P7
                        {
                                P7M1 = M1 , P7M0 = M0 ;
                        }
                        break ;                                       
        }
}
回復

使用道具 舉報

25#
ID:1056645 發表于 2022-12-9 12:41 | 只看該作者
謝謝樓主分享,對我很有用
回復

使用道具 舉報

26#
ID:1042619 發表于 2022-12-10 10:38 | 只看該作者
     感謝樓主分享!51因您而精彩! 可以試試STC官方最新的 STC-ISP V6.91及以上版本的 ISP燒錄/輔助開發工具包一體化軟件的  工具 有 I/O配置工具


回復

使用道具 舉報

27#
ID:1108581 發表于 2024-1-8 23:32 | 只看該作者
這個厲害啊,使用的話太方便了
回復

使用道具 舉報

28#
ID:1064915 發表于 2024-1-10 16:32 | 只看該作者
都是大師級
回復

使用道具 舉報

29#
ID:1110477 發表于 2025-3-1 07:01 | 只看該作者
heicad 發表于 2021-9-3 23:11
有了這個真方便,這是官方出的嗎?

C的魅力在于比較基礎,程序員可以自由使用資源,比較靈活
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久免费 | 午夜激情免费视频 | 国产黑丝av| 午夜精品久久久久久久久久久久 | 欧美一级一 | 精品欧美一区二区三区久久久小说 | 欧美国产精品一区二区 | 国产精品一区二区三 | 亚洲精品丝袜日韩 | 国产一区二区在线视频 | 午夜精品在线观看 | 日韩午夜网站 | 99在线播放 | 国产ts人妖系列高潮 | 亚洲精品亚洲人成人网 | 91精品国产91久久综合桃花 | 国产黄色麻豆视频 | 欧美黄视频| 99久久精品免费看国产小宝寻花 | 精品一区二区三区四区五区 | 久久精品毛片 | 亚洲精品一区二区三区蜜桃久 | 国产精品久久久久久一区二区三区 | 欧美日韩精品一区二区三区视频 | 一级片免费在线观看 | 在线中文字幕视频 | 我要看黄色录像一级片 | 国产精品视频不卡 | 国产电影一区二区 | 日本中文在线视频 | 国产97视频在线观看 | 亚洲一区成人 | 国产精品日韩高清伦字幕搜索 | 亚洲欧美综合精品久久成人 | 最新国产精品 | 亚洲一级在线 | 亚洲欧美日韩系列 | 日韩欧美在线不卡 | 精品一区二区电影 | 国产成人精品综合 | 性在线 |