大家好,今天我們就開始了單片機C程序的編寫。首先,由于搬家後一直不能辦理上網的事情,所以耽誤了到了今天才把這章發出來,實在抱歉。言歸正傳,我們在前邊學習過單片 機的開發流程并且介紹了C語言的表達式和語句的表達,對函數也進行了介紹,有了這些認識我們就可以真正的根據要求編寫程序進行單片機的開發了。下面我們細 緻的分析一下單片機C程序的編寫以及再熟悉一下開發的流程。
下面我們以STC的51單片機為例,其開發環境是用keil V4,燒寫軟件是STC官網的ISP軟件。首先打開keil新建工程,然後選擇單片機的型号,由于在前面部分都介紹過,因此在這裡就不在重複過程了,新建 工程選好器件後我們就開始編寫單片機程序了。如果我們直接就用手冊裡面的寄存器去操作,發現編譯的時候會報錯誤,如下所示:
voiddelay()
{
unsigned char i,j;
for(i=0;i<=250;i )
for(j=0;j<=200;j );
}
voidmain()
{
while(1)
{
P1^0=0;
delay();
P1^0=1;
delay();
}
}
從圖中可以看到,單片機的特殊功能寄存器也在RAM的地址中,換句話講就是這些特殊功能寄存器也是RAM的一部分,我們如果知道了其所在的地址,然後我們對其進行操作那麼就能夠實現對硬件的控制,下面是從51單片機手冊上得到的特殊功寄存器的地址和功能:
那麼我們實現定義變量的話就應該不會出現問題了,那麼我們可以将上面的程序修改:
sfr P1=0x90;
sbit P10=P1^0;
void delay()
{
unsigned char i,j;
for(i=0;i<=250;i )
for(j=0;j<=200;j );
}
void main()
{
while(1)
{
P10=0;
delay();
P10=1;
delay();
}
}
在修改後的程序中,我們先定義P1,然後在定義P1^0,這樣在編譯過程中就不會再報錯誤了。
實際單片機的廠商已經将這些頭文件編寫成了.h文件,我們隻要将頭文件包含進來就能用了,如下所示:
如上圖所示,我們隻需要在開頭的位置添加#include<stc15.h>這條預編譯指令,即使不在定義P0和P1^0也能夠通過編譯,這是因為在我們包含的頭文件中已經定義了我們需要的變量以及相對應的地址,這是芯片廠商編寫的頭文件。
上面就是包含的頭文件的内容,感興趣的可以去看一下頭文件,裡面定義的寄存器的名稱,可以認為這個文件是軟件和硬件連接的一個接口,實現了硬件和軟件的連接目的,讓用戶可以忽略硬件的地址,直接對變量進行操作就可以。
然後單片機程序采用while(1)死循環的目的是将程序代碼這個空間内循環,并根據設計者的需求跳轉,而不是跳來跳去。
将上面編譯好的程序生成HEX文件後,燒錄到單片機的ROM内,然後看到P1^0的輸出信号是一個産生頻率為12Hz的50%方波如下所示:
添加頭文件以後,在以後的編程中就根據手冊的寄存器的控制就可以了,這樣就可以基本可以對單片機進行開發了,通過單片機産生波形也行也好,實現控制也好,隻要根據手冊上對特殊寄存器的操作來實現對硬件的控制。
最後還希望大家多多閱讀好好的層序源碼來提高程序的編寫能力,謝謝大家。
如果你覺得本文不錯,請點個贊吧,你們的認可是我們奮鬥的動力,謝謝!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!