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

標題: 初學51單片機之點燈程序詳解 [打印本頁]

作者: 明日之星8    時間: 2024-2-15 21:52
標題: 初學51單片機之點燈程序詳解
  對于單片機的學習,很多人都是從點燈程序開始的,這里我找到
了一個之前做實驗的小板子,MCU是STC8H1K08,P54引腳接了一個
發光管經過電阻到地。由于P54引腳要拉高才能點亮發光管,所以端
口模式要設置成推挽模式,因此最最最簡單的C語言點燈程序是下面的
樣子:


  看起來是不是很簡單?全部加起來包括花括號只有7行代碼,其中第一
行是文件包含偽指令,它把STC公司提供的對應“頭文件”包含到此程序
中來,下面六行是一個C語言函數的標準寫法,只是名為“main”的函
數很特殊,它是必須的,不能被別的函數調用,所以沒有返回值,也不
需要參數。“void”是C語言中“無類型”關鍵字,“main”左邊的
“void”代表“main”函數的返回值是“無類型”。“main”右邊的
小括號中的“void”是它的參數的類型。緊跟著的一對“花括號”中間
裝的是“main”函數的具體內容,它里面有三個分號,C語言語句以分
號結尾,前兩句用于設置P54端口為推挽模式,第三句才是拉高P54引腳
真正實現點亮發光管的語句,當然也可以在前兩句中把端口設置為準雙
向口模式也是可以點亮的,但是沒有前兩句的話則是不能點亮的。經過編
譯,上圖中可以看到生成了24字節的代碼,沒有錯誤和警告,下載到實驗
板上實測能點亮發光管。
  再來看這三句C語言語句,中間都有“等號”,它可不是我們生活中
的“等于”的意思。“等號”右邊就是數字,只是它的寫法不常見,“等號”
左邊是STC8H1K08這個芯片中寄存器的名字,它們都是在“頭文件”中定
義的,大家可以用記事本或其它程序打開“頭文件”仔細研究研究。什么是
寄存器?我們可以很形象的打個比方,說墻上有很多燈開關,其中一個叫
“P54”,我們在程序中把數字“1”寫進“P54”這個開關中,然后燈這亮了,
也可以把數字“0”寫進“P54”中,然后燈就滅了,所以這三個語句都是
把“等號”右邊的數字寫進左邊的寄存器中,從而實現我們想要的結果。
  除了頭文件外,單片機的制造商還會提供對應單片機的參考手冊和數據
手冊,STC則很獨特的把這兩個文件外加例程都寫進了一個PDF文件中,目前
這個“STC8H技術參考手冊”達到了1640頁。想要學好用好這個單片機就要
認真閱讀此手冊。
  再來看一看“0x10”這個數字,其前綴“0x”代表它是16進制的數字,
翻譯成常見的十進制的寫法是“16”這個數字,同樣的“0x00”就是十進制
的“0”,寫成那樣有強調它是一個8位數的意思,因為“等號”左邊的
“P5M1”寄存器有8個位,語句的結果是要把8個位都寫成“0”,而實際上
只需要把它的“4位”寫成“0”就行了,其它的7個位最好是“保持原樣”,
但是很遺憾,“等號”這種直接賦值的方式不能使其左邊寄存器內的其它位
“保持原樣”,必須得換一種寫法才行,雖然“P54”可以直接賦值而不影響
其它“位”,但為了適應其它不支持“位操作”的單片機,我盡量少用這種
“位操作”的寫法。同樣的程序我改成了如下的樣子:

#include  "STC8Hxx.h"
#define    BIT4    (0x10)//定義“4位”,注意這句沒有分號!!
void  main(void)
{
P5M1  &=~(BIT4);//拉低復位
P5M0    |=  BIT4;//拉高置位
P5         |=  BIT4;//P54拉高置位
}
 
  其中“BIT4”對于單片機來說就是數字“0x10”,但是我們在讀這個程
序的時候一眼就能看出是要對寄存器的哪一位做怎樣的處理而不需要特別注明
語句的具體含義。我們要特別的記住“|=”是拉高某位(或某幾位)而其它位保
持原樣,“&=~”則是拉低某位(或某幾位同時拉低的話要加圓括號括起來)而
其它位保持原樣。
  當然,實際的程序不可能只是這么簡單,比如“#define”這樣的位定義就
有8行(或更多),
#define    BIT0    (0x01)
#define    BIT1    (0x02)
#define    BIT2    (0x04)
#define    BIT3    (0x08)
#define    BIT4    (0x10)
#define    BIT5    (0x20)
#define    BIT6    (0x40)
#define    BIT7    (0x80)
  我們可把這些(或更多的內容)寫進我們自己的“Ext.h”這樣一個頭文件中,
然后包含進程序中,當然還要加上傳說中的“大循環”:

#include  "STC8Hxx.h"
#include  "Ext.h"
void  main(void)//程序從主函數開始執行
{
P5M1  &=~(BIT4);//只運行一次的程序
P5M0    |=  BIT4;  //寫這這里,
P5         |=  BIT4;  //比如初始化程序
while(1)//大循環
    {
    ;//要循環運行的語句寫這里
    }
}//主程序結束
//中斷函數可以寫在下面

  今天就聊到這里,不足之處,歡迎指正。




作者: Graves    時間: 2024-2-23 18:26
這種沒有while循環的結束main后不知MCU處在什么狀態?運行的什么語句呢?
作者: 明日之星8    時間: 2024-2-24 21:50
qq475878026 發表于 2024-2-23 18:26
這種沒有while循環的結束main后不知MCU處在什么狀態?運行的什么語句呢?

為幫助初學習者理解而省略了大循環的一個鮒程而已,
實際情況是它能編譯通過并下載到單片機運行,也能成
功點亮發光管。我所知道的沒有例外的都有大循環在主
函數中使程序“永遠”運行下去。
也許,單片機的生產廠家能回答這樣的問題,但這個問
題的答案對于我這樣一般的單片機使用者來說好象沒有
什么用處。
作者: STC莊偉    時間: 2024-3-28 09:47
初學應該學STC8H8K64U啊   有硬件USB,直接仿真啊
作者: kkkkah    時間: 2024-4-8 19:03
請問一下初學單片機應該如何入手?

作者: ltqinghua    時間: 2024-4-14 16:28
不錯降低了很多
作者: mkbk110    時間: 2024-4-19 16:10
對新人非常友好
作者: fan523709338    時間: 2024-4-26 17:17
如果學單片機直接,案列對著程序學習這樣會不會學的快點
作者: dcxx    時間: 2024-4-27 15:33
學習了,感謝分享。
作者: 白水大蝦2016    時間: 2024-5-7 13:38
fan523709338 發表于 2024-4-26 17:17
如果學單片機直接,案列對著程序學習這樣會不會學的快點

同感,同樣的任務語句卻也不同,有些迷糊。
作者: liaoxliang    時間: 2024-5-14 22:51
我能點亮的是單片機本體,算不算單片機點燈大師,
作者: kinglucifun    時間: 2024-5-19 21:54
這是STC最基礎的單片機么
作者: 2042582764    時間: 2024-5-31 15:09
之前做的led循環,用的是while(1)循環,led流水燈的實驗,你的這篇文章確實給我很大啟發
作者: blindman    時間: 2024-6-4 00:42
對新人非常友好
作者: hrzwan    時間: 2024-6-24 11:51
學習了,摸索中,
作者: 浪人情歌    時間: 2024-7-2 10:27
學習了,感謝
作者: easymfk    時間: 2024-9-4 19:41
你們有沒有買開發板呢?

作者: zyscxr    時間: 2024-9-22 17:56
萬千的程序,目的只有一個,點燈,第一步,哪種最簡潔,最容易掌握和理解就是最好的
作者: zyscxr    時間: 2024-9-22 17:57
發表于 2024-9-4 19:41
你們有沒有買開發板呢?

我買了,能直觀一些吧
作者: dyc2024    時間: 2024-9-28 10:57
相當的不錯!
作者: w110223    時間: 2024-10-24 13:43

初學應該學STC8H8K64U
作者: JoyHuan    時間: 2024-10-31 12:32
非常棒的文章,解決了我的問題
作者: qaz256    時間: 2024-11-1 23:10
對初學者有一點幫助
作者: Mango22    時間: 2024-11-23 03:31
Graves 發表于 2024-2-23 18:26
這種沒有while循環的結束main后不知MCU處在什么狀態?運行的什么語句呢?

同問~~~~~~~~~~~
作者: 人人學會單片機    時間: 2024-12-4 13:59
發表于 2024-4-8 19:03
請問一下初學單片機應該如何入手?

去B站 直接搜索《人人學會單片機》,直接看這套課程學習就行了,PCB已經開源,你可以自己做WQX開發板。千萬不要花冤枉錢去買那些老掉牙的開發板。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产成人午夜高潮毛片 | 亚洲一区中文 | 亚洲综人网 | 久久久久久综合 | 九九视频免费观看 | 中文字幕在线观看一区 | 天天射天天射 | 天天躁日日躁狠狠躁 | 欧美一级黄| 日韩一级淫片 | 欧美日韩一区二区在线观看 | 久操精品视频 | 99视频网站| 蜜桃91丨九色丨蝌蚪91桃色 | 欧美成人精品激情在线观看 | 色综合天天综合网天天狠天天 | 最新av在线 | 影音先锋中文字幕在线 | 91综合在线 | 夜夜操天天操 | 亚洲h网站| 毛片一级片 | 久久一区 | 夜夜肉她怀孕h周君彦 | 免费观看一区二区 | 精品一区二区三区四区五区 | 在线不欧美 | 精品国产欧美 | 黑人操亚洲女人 | 天天久久综合 | 中文字幕日韩视频 | 一级黄色网 | 亚洲乱码在线观看 | 国产二区视频在线观看 | 综合99| 亚洲成人一区二区三区 | 又黄又爽网站 | 久久久久久99精品久久久 | 午夜精品久久久久久久 | 亚洲综合伊人 | 四虎影院网站 |