欢迎来到天天文库
浏览记录
ID:37225184
大小:772.47 KB
页数:36页
时间:2019-05-19
《第1章 SPCE061A 單晶片簡介》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C語言的基本知識與軟體模擬這裏不是教你如何使用C語言。而是怎樣利用C語言來編寫淩陽μ’nSP™的單晶片的程式。以下我們將複習關於C語言的一些概念,如結構迴圈和類型定義等。3.1資料與運算3.1.1資料與資料類型在表3.1中列出了μ’nSP™GCC認可的基本資料類型及其值域。讀者應該特別注意:表中所列的資料類型及其表示範圍與一般機器使用的GCC資料類型之間有一些差別,例如char為16位元等等。此外,μ’nSP™GCC的float與double均為32位元浮點數,而μ’nSP™組譯器(Assembly)的float與double
2、分別是32位與64位浮點數。表3.1、μ’nSP™GCC的基本資料類型資料類型資料長度(位元數)表示範圍char16-32768~32767short16-32768~32767int16-32768~32767longint32-2147483648~2147483647unsignedchar160~65535unsignedshort160~65535unsignedint160~65535unsignedlongint320~4294967295float32以IEEE格式表示的32位浮點數double32以IEEE格
3、式表示的32位浮點數3.1.2常數、變數、運算符號與運算式在程式執行過程中,其值不會改變的數稱為常數。程式中可以用一個常數名稱來代表一個看不出有什麼意義的數字,比如:#defineC_Fosc_49M0x0080這裏定義了一個常數名稱C_Fosc_49M,它的值為0x0080。在寫程式時,我們就可以用C_Fosc_49M來代替0x0080。這樣的好處是顯而易見的,大家一眼就可以看出Fosc選擇了49MHz。在程式執行過程中,其值可以改變的數稱為變數。下面就有符號/無符號(signed/unsigned)問題作一些說明。在寫程式
4、時,如果使用signed和unsigned兩種資料類型,就得分別使用這兩種格式類型的函數庫,這將使佔用的儲存空間成倍增長。因此在寫程式時,如果只強調程式的運算速度而又不進行負數運算時,最好採用unsigned格式。μ’nSP™GCC基本的算術運算符和ANSI-C是一樣的,見表3.2。表3.2、μ’nSP™GCC基本的算術運算符號運算子作用+、-、*、/、%加、減、乘、除、餘數運算&&、
5、
6、邏輯AND、OR&、
7、、^、<<、>>位元運算AND、OR、XOR、左移、右移>,>=,<,<=,==,!=大於、不小於、小於、不大於、等於
8、、不等於=指定運算?:條件運算,逗號運算*、&指標運算.分量運算sizeof資料位元組數運算[]陣列指標運算下面舉一個用使用位元運算掃瞄鍵盤的例子。如圖3.1所示為SPCE061A與一個4×4鍵盤介面的電路圖。圖3.1電路直接掃描一個矩陣鍵盤。在這些按順序進行掃描的鍵盤矩陣上,每次只有一行電位被拉低準位。在每次掃描拉低這些行的同時,去讀那些列的資訊,在被拉低的行上被按下的按鍵所對應的列的電位值為0,其他列的電位值為1。如圖3.1所示,用SPCE061A的Aport低8位作為4×4鍵盤的介面,其中IOA4~IOA7作為行驅動線,
9、IOA0~IOA3作為列讀入線。每隔約20ms行驅動線被逐次拉至低電位,以避免鍵盤的抖動干擾。接下來程式所要做的工作就是測試輸入的任何變化,包括新鍵的按下或舊鍵的釋放。使用位元運算,可以很容易地將這些變化辨識出來。如表3.3所示,該表說明了如何使用位元掃瞄來鑑別鍵盤的變化過程。圖3.1、鍵盤掃描原理圖表3.3表示IOA4~IOA7設為反相輸出埠的情況。設為反相輸出埠的意思是,我們在軟體中送1到I/O腳,但I/O腳輸出的是0,兩者正好是反相的。表3.3使用位元檢測鍵盤值的變化IOA7IOA6IOA5IOA4IOA3IOA2IOA
10、1IOA0原鍵值(old)00101101新鍵值(new)01001110中間變數(temp=old^new)01100011新按鍵(temp&new)01000001釋放鍵(temp&old)00100010從表3.3可以看出,Aport原讀入值為00101101B,由於行驅動線IOA4~IOA7為反相輸出,按1為低電位,0為高電位,此時硬體電路的第二行IOA5為低電位。由於IOA0~IOA3為列讀入值,按0為低電位,1為高電位,則第二列的鍵被按下,其鍵值為5。根據同樣的原理,對於新讀入的值01001110B,意味著,此時鍵
11、值為5的鍵被釋放,而第三行第一列鍵值為8的鍵被按下。下面所進行的邏輯位元運算也正好說明了這一點。在表2.3中,IOA7~IOA4的新值0100B和原值0010B不同,說明了掃描的行不同,而新按鍵欄和釋放鍵欄中IOA7~IOA4為1的是掃描的行。而對於讀回列資訊的IOA3~IO
此文档下载收益归作者所有