先給大家附上一套完整的模板源代碼,后面章節練習C語言的模板程序就直接復制此完整的源代碼,此源代碼適合的單片機型號是STC89C52RC,晶振是11.0592MHz,串口波特率是9600,初學者只需修改代碼里從“C語言學習區域的開始”到“C語言學習區域的結束”的區域,其它部分不要更改。可復制的源代碼請到網上論壇原貼處復制或者下載,搜索本教程名字就可以找到原貼出處。一套完整的模板源代碼如下:
#include "REG52.H" void View(unsigned long u32ViewData); void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type); void SendString(unsigned char *pu8String); /*---C語言學習區域的開始。-----------------------------------------------*/ void main() //主函數 { unsigned char a; //定義一個變量a。 unsigned int b; //定義一個變量b。 unsigned long c; //定義一個變量c。 a=100; //給變量a賦值。 b=10000; //給變量b賦值。 c=1000000000; //給變量c賦值。 View(a); //在電腦串口端查看第1個數a。 View(b); //在電腦串口端查看第2個數b。 View(c); //在電腦串口端查看第3個數c。 while(1) { } } /*---C語言學習區域的結束。-----------------------------------------------*/ void View(unsigned long u32ViewData) { static unsigned char Su8ViewBuffer[43]; code unsigned char Cu8_0D_0A[]={0x0d,0x0a,0x00}; code unsigned char Cu8Start[]={"開始..."}; static unsigned char Su8FirstFlag=0; static unsigned int Su16FirstDelay; if(0==Su8FirstFlag) { Su8FirstFlag=1; for(Su16FirstDelay=0;Su16FirstDelay<10000;Su16FirstDelay++); SendString(Cu8Start); SendString(Cu8_0D_0A); SendString(Cu8_0D_0A); } to_BufferData(u32ViewData,Su8ViewBuffer,1); SendString(Su8ViewBuffer); to_BufferData(u32ViewData,Su8ViewBuffer,2); SendString(Su8ViewBuffer); to_BufferData(u32ViewData,Su8ViewBuffer,3); SendString(Su8ViewBuffer); to_BufferData(u32ViewData,Su8ViewBuffer,4); SendString(Su8ViewBuffer); SendString(Cu8_0D_0A); } void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type) { code unsigned char Cu8Array1[]={0xB5,0xDA,0x4E,0xB8,0xF6,0xCA,0xFD,0x00}; code unsigned char Cu8Array2[]="十進制:"; code unsigned char Cu8Array3[]="十六進制:"; code unsigned char Cu8Array4[]="二進制:"; static unsigned char Su8SerialNumber=1; static unsigned int Su16BufferCnt; static unsigned int Su16TempCnt; static unsigned int Su16TempSet; static unsigned long Su32Temp1; static unsigned long Su32Temp2; static unsigned long Su32Temp3; static unsigned char Su8ViewFlag; if(1==u8Type) { for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array1[Su16BufferCnt]; } pu8Buffer[2]=Su8SerialNumber+'0'; pu8Buffer[Su16BufferCnt]=0x0d; pu8Buffer[Su16BufferCnt+1]=0x0a; pu8Buffer[Su16BufferCnt+2]=0; Su8SerialNumber++; return; } else if(2==u8Type) { for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array2[Su16BufferCnt]; } Su32Temp1=1000000000; Su32Temp2=10; Su16TempSet=10; } else if(3==u8Type) { for(Su16BufferCnt=0;Su16BufferCnt<9;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array3[Su16BufferCnt]; } Su32Temp1=0x10000000; Su32Temp2=0x00000010; Su16TempSet=8; } else { for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array4[Su16BufferCnt]; } Su32Temp1=0x80000000; Su32Temp2=0x00000002; Su16TempSet=32; } Su8ViewFlag=0; for(Su16TempCnt=0;Su16TempCnt 【11.2? ?模板程序的使用說明。】
圖11.2.1
大多數初學者在學習C語言的時候,往往是在電腦端安裝上VC平臺軟件來練習C語言,這種方法只要在代碼里調用printf語句,編譯后就可以看到被printf語句調用的變量,挺方便的。本教程沒有用這種方法,既然本教程的C語言主要針對單片機,所以我想出了另外一種方法,這種方法就是直接在單片機上練習C語言,這樣會讓初學者體驗更深刻。這種方法對硬件平臺要求不高,只要51學習板上有一個9針的串口就可以,這個串口既可以用來燒錄程序,也可以用來觀察代碼里的某個變量,只要在代碼里調用View函數就可以達到類似VC平臺軟件下printf語句的效果,View函數可以向串口輸出某個變量的十進制,十六進制和二進制,大家只要在電腦端的串口助手軟件就可以看到某個變量的這些信息,View函數能查看的變量最大數值范圍是4個字節的unsigned long變量,十進制的范圍是從0到4294967295,也可以查看unsigned int 和unsigned char的類型變量(數據的進制以及long,int,char等知識點大家目前還沒接觸到,因此不懂也沒關系,當前只要有個大概的認識就可以,暫時不用深入理解,后面章節還會詳細介紹)。View函數是我整個模板程序的其中一部分,所以要用這種方法就必須先復制我整個模板程序,初學者練習代碼的活動范圍僅僅局限于模板程序里的“C語言學習區域”,在此區域里有一個main主函數,main主函數內有一個初始化區域,初學者往往在這個初始化區域里練習C語言就夠了,初學者最大的活動范圍不能超過從“C語言學習區域的開始”到“C語言學習區域的結束”這個范圍,這個范圍之外其它部分的代碼主要用來實現數據處理和串口發送的功能,大家暫時不用讀懂它,直接復制過來就可以了。比如:
/*---C語言學習區域的開始。-----------------------------------------------*/
void main() //主函數
{
//...初始化區域,也就是主要用來給初學者學習C語言的區域。
while(1)
{
}
}
/*---C語言學習區域的結束。-----------------------------------------------*/
上述例子中,初學者練習代碼只能在從“C語言學習區域的開始”到“C語言學習區域的結束”這個范圍,此范圍外的代碼直接復制過來不要更改。我們再來分析分析下面節選的main函數源代碼:
/*---C語言學習區域的開始。-----------------------------------------------*/
void main() //主函數
{
unsigned char a; //定義一個變量a。
unsigned intb; //定義一個變量b。
unsigned long c; //定義一個變量c。
a=100; //給變量a賦值。
b=10000; //給變量b賦值。
c=1000000000; //給變量c賦值。
View(a); //在電腦串口端查看第1個數a。
View(b); //在電腦串口端查看第2個數b。
View(c); //在電腦串口端查看第3個數c。
while(1)
{
}
}
/*---C語言學習區域的結束。-----------------------------------------------*/
上述節選的main函數代碼里,比如“a=100; //給變量a賦值。”這行代碼,所謂的“賦值”就是“=”這個語句,它表面上像我們平時用的等于號,實際上不是等于號,而是代表“給”的意思,把“=”符號右邊的數復制一份給左邊的變量,比如“a=100;”就是代表把100這個數值復制一份給變量a,執行這條指令后,a就等于100了。這里的分號“;”代表一條程序指令的結束。 而雙斜線“//”是注釋語句,雙斜線“//”這行后面的文字或字符都是用來注釋用的,編譯器會忽略雙斜線“//”這一行后面的文字或字符,編譯器不把注釋文字或字符列入源代碼,也就是“//”這一行中后面的文字或字符是不占單片機內存的。當然“//”僅僅局限于當前一行代碼。上面除了“//”是注釋語句外,上面的“/*”和“*/”之間也是注釋語句,跟”//”的作用一樣,只不過“/*”是注釋開始,“*/”是注釋結束,它們的范圍不局限于一行,而是從“/*”到“*/”的范圍,因此可以用于注釋連著的多行文字或者字符。
接著在分析上述代碼中最重要的函數,也是本節最核心最重要的函數View(某個變量)。比如“ View(a); ”這行代碼,View(a)就是要把變量a的十進制,十六進制和二進制的數值都發送到串口,我們通過USB轉串口線讓學習板連接上電腦,在電腦串口助手軟件上就能看到被View函數調用的變量a的信息。
【11.3 如何在電腦上使用串口助手軟件查看被View函數調用的變量?】
前面章節在講燒錄程序時提到一個叫“stc-isp-15xx-v6.85I”的上位機軟件,這個軟件除了用來燒錄程序,還集成了串口助手軟件的功能。所以本節直接共用燒錄程序時的USB轉串口線和“stc-isp-15xx-v6.85I”軟件就可以了,無需額外再購買新的USB轉串口線和下載其它串口助手軟件,但是如何設置這個“stc-isp-15xx-v6.85I”上位機軟件,還是有一些需要特別注意的地方的,現在把這個詳細的步驟介紹給大家。
第一步:設置燒錄軟件的選項。
按前面章節介紹燒錄程序時所需的步驟,用USB轉串口線連接51學習板和電腦,記錄COM號,打開“stc-isp-15xx-v6.85I”軟件,選擇單片機型號,選擇對應的串口號(COM號),設置最低波特率和最高波特率,這部分的內容跟燒錄程序時的配置步驟是一樣的,唯一必須要特別注意的是最高波特率必須選擇9600!最低波特率建議選擇2400。否則在燒錄完程序后,當上位機集成軟件自動切換到串口助手軟件窗口時,接收區域顯示的一些漢字信息可能會出現亂碼。
----------------------------------步驟之間的分割線----------------------------------------
圖11.3.2
第二步:設置串口助手軟件的選項。
先點擊右上方選中“串口助手”選項切換到串口助手的窗口,接收緩沖區選擇“文本模式”,串口選擇匹配的COM號(跟燒錄軟件一致的COM號),波特率必須選擇9600,勾選上“編程完成后自動打開串口”選項,最后點擊“打開串口”按鈕使之切換到顯示“關閉串口”的文字狀態,至此串口助手軟件的設置完畢。接下來就是按燒錄程序的流程,打開新的HEX程序文件,程序燒錄完成后上位機軟件會自動切換到串口助手的串口,就可以觀察到View函數從單片機上發送過來的某個變量的十進制,十六進制,二進制的信息了。接收緩沖區的窗口比較小,如果收到的信息比較多,只要在上下方向拖動窗口右邊的滑塊就可以依次看到全部的信息。如果想讓單片機重新發送數據,只要讓51學習板斷電重啟就可以重發一次數據,當串口助手的接收區接收的信息太多影響觀察時,大家可以點擊“清空接收區”的按鈕來清屏,然后斷電重啟讓它再重發一次數據。在電腦的串口助手軟件里觀察到的數據格式大概是什么樣子的呢?比如編譯完本章節上述完整的模板源代碼程序后,會在串口助手軟件里看到a,b,c三個變量的信息如下:
開始...
第1個數
十進制:100
十六進制:64
二進制:1100100
第2個數
十進制:10000
十六進制:2710
二進制:10011100010000
第3個數
十進制:1000000000
十六進制:3B9ACA00
二進制:111011100110101100101000000000
多說一句,燒錄程序后,當軟件自動切換到串口助手軟件選項的窗口時,串口助手窗口顯示單片機返回的信息,這時有可能第一行的文字“開始...”會丟失或者顯示不出來,但是后面其它的關鍵信息不受影響,我猜測可能是串口助手軟件本身的某個環節存在的小bug,跟我們沒關系,我們不用深究原因,因為不會影響我們的使用。此時如果讓單片機斷電重啟就可以看到第一行的文字“開始...”。
【11.4 如何利用現有的工程編輯編譯新的源代碼?】
本教程后面有很多章節的源代碼,是不是每個章節都要重新建一個工程?其實不用。我們只要用一個工程就可以編譯編輯本教程所有章節的源代碼。方法很簡單,就是打開一個現有的工程,用快捷組合鍵“Ctrl+A”把原工程里面的C源代碼全部選中,再按“Backspace”清空原來的代碼,然后再復制本教程相關章節的代碼粘貼到工程的C文檔里,重新編譯一次就可以得到對應的Hex格式的燒錄文件。用這種方法的時候,建議大家做好每個程序代碼的備份。每完成一個項目的小進度,都要及時把源代碼存儲到電腦硬盤里,電腦硬盤里每個項目對應一個項目文件夾,每個項目文件夾里包含很多不同版本編號的源代碼文件,每個源代碼文件名都有流水編號,方便識別最新版本的程序,每天下班前都要把最新版本的源代碼文件上傳到自己的網盤里備份,在互聯網時代,把源代碼存到自己的網盤,可以隨時異地存取,即使遇到電腦故障損壞也不擔心數據永久丟失。
【11.5 編輯源代碼的5個常用快捷鍵。】
介紹一下常用的快捷鍵,好好利用這5個快捷鍵,會讓你在編輯源代碼時效率明顯提高。
(1)選中整篇所有的內容:組合鍵Ctrl+A。
(2)把選中的內容復制到臨時剪貼板:組合鍵Ctrl+C。
(3)把臨時剪貼板的內容粘貼到光標開始處:組合鍵Ctrl+V。
(4)把選中的一行或者幾行內容整體往右邊移動:單鍵Tab。每按一次就移動幾個空格,很實用。
(5)把選中的一行或者幾行內容整體往左邊移動:組合鍵Shift+Tab。每按一次就移動幾個空格,很實用。
-
單片機
+關注
關注
6043文章
44619瀏覽量
638481
發布評論請先 登錄
相關推薦
評論