C語言的基本知識與軟體模擬x.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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 分別是 32 位與 64 位浮點數。表3.1、μ’nSP? GCC 的基本資料類型資料類型資料長度(位元數)表示範圍char16-32768~32767short16-32768~32767int16-32768~32767long int32-2147483648~2147483647unsigned char160~65535unsigned short160~65535unsigned int160~65535unsigned long int320~4294967295float32以 IEEE 格式表示的 32 位浮點數double32以 IEEE 格式表示的 32 位浮點數3.1.2常數、變數、運算符號與運算式在程式執行過程中,其值不會改變的數稱為常數。程式中可以用一個常數名稱來代表一個看不出有什麼意義的數字,比如:#defineC_Fosc_49M0x0080這裏定義了一個常數名稱 C_Fosc_49M,它的值為 0x0080。在寫程式時,我們就可以用 C_Fosc_49M來代替 0x0080。這樣的好處是顯而易見的,大家一眼就可以看出 Fosc 選擇了49MHz。在程式執行過程中,其值可以改變的數稱為變數。下面就有符號/無符號 (signed/unsigned) 問題作一些說明。在寫程式時,如果使用 signed 和 unsigned 兩種資料類型,就得分別使用這兩種格式類型的函數庫,這將使佔用的儲存空間成倍增長。因此在寫程式時,如果只強調程式的運算速度而又不進行負數運算時,最好採用 unsigned 格式。μ’nSP? GCC 基本的算術運算符和 ANSI-C 是一樣的,見表3.2。表3.2、μ’nSP? GCC基本的算術運算符號運算子作用+、-、*、/、%加、減、乘、除、餘數運算、||邏輯AND、OR、|、^、、位元運算AND、OR、XOR、左移、右移,=,,=,= =,!=大於、不小於、小於、不大於、等於、不等於=指定運算? :條件運算,逗號運算*、指標運算.分量運算sizeof資料位元組數運算[ ]陣列指標運算下面舉一個用使用位元運算掃瞄鍵盤的例子。如圖3.1所示為 SPCE061A與一個 4×4 鍵盤介面的電路圖。圖 3.1 電路直接掃描一個矩陣鍵盤。在這些按順序進行掃描的鍵盤矩陣上,每次只有一行電位被拉低準位。在每次掃描拉低這些行的同時,去讀那些列的資訊,在被拉低的行上被按下的按鍵所對應的列的電位值為 0,其他列的電位值為 1。如圖 3.1 所示,用SPCE061A的 A port 低8位作為 4×4 鍵盤的介面,其中 IOA4~IOA7 作為行驅動線,IOA0~IOA3 作為列讀入線。每隔約20ms 行驅動線被逐次拉至低電位,以避免鍵盤的抖動干擾。接下來程式所要做的工作就是測試輸入的任何變化,包括新鍵的按下或舊鍵的釋放。使用位元運算,可以很容易地將這些變化辨識出來。如表 3.3 所示,該表說明了如何使用位元掃瞄來鑑別鍵盤的變化過程。圖3.1、鍵盤掃描原理圖表3.3 表示IOA4~IOA7 設為反相輸出埠的情況。設為反相輸出埠的意思是,我們在軟體中送 1 到 I/O 腳,但 I/O 腳輸出的是 0,兩者正好是反相的。表3.3 使用位元檢測鍵盤值的變化IOA7IOA6IOA5IOA4IOA3IOA2IOA1IOA0原鍵值(old鍵值(new間變數(temp=old^ new按鍵(tempnew放鍵(tempold表3.3 可以看出,A port原讀入值為,由於行驅動線 IOA4~IOA7 為反相輸出,按 1 為低電位,0 為高電位,此時硬體電路的第二行 IOA5 為低電位。由於 IOA0~IOA3 為列讀入值,按 0 為低電位,1 為高電位,則第二列的鍵被按下,其鍵值為 5。根據同樣的原理,對於新讀入的值,意味著,此時鍵值為 5 的鍵被釋放,而第三行第一列鍵值為 8 的鍵被按下。下面所進行的邏

文档评论(0)

天马行空 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档