合泰单片机C语言教程

合泰单片机C语言教程
合泰单片机C语言教程

Holtek 微控制器應用範例–使用Holtek C 語言目錄

第一章內容簡介

第二章選定Holtek C 語言的使用環境

2.1 進入HT-IDE3000 建立新的專案時, 選定Holtek C 編譯器

2.2 已開啟專案後, 選用Holtek C 編譯器

第三章微控制器C 語言程式的速成

3.1 定義主函式main()

3.2定義副函式(sub-function)

3.3定義全域變數(global variable)

3.4定義中斷服務函式(Interrupt Service Routine : ISR)

3.5 其他

第四章 C 語言程式

4.1 C 程式架構

4.2 開始用C 語言設計一個程式

4.2.1 定義主函式main

4.2.2 將標頭檔引入(include a header file)

4.2.3 定義文字符號及變數

4.2.4 設定微控制器及裝置的初始狀態

4.2.5 設計子函式

4.2.6 設計中斷服務函式

4.3變數(variable) 及資料型態(data type)

4.3.1 變數名

4.3.2 資料型態

4.3.3 變數的有效範圍(scope)

4.3.4 變數的資料型態(data type)

整數型(integer)

浮點型(floating point)

4.3.5 bit 資料型態

4.3.6儲存類別(storage class) 與修飾詞(qualifier)

儲存類別(storage class)

修飾詞(qualifier)

4.3.7絕對變數(absolute variable)

4.3.8常數(constant)

4.3.9指標(pointer) 與陣列(array)

指標的運算子& 與*

陣列(array)

4.3.10結構(struct) 與等位(union)

結構的運算子-> 與.

4.4運算子(Operators)

運算前的型態轉換

4.5程式流程控制(program flow control)

4.5.1if-else 敘述

4.5.2switch 敘述

4.5.3for 敘述

4.5.4while 敘述

4.5.5do-while 敘述

4.5.6goto 敘述

4.5.7break 與continue 敘述

4.6函式(Functions)

4.6.1參數(arguments)

4.6.2返回值(return values)

4.7中斷服務函式(Interrupt Service Routines)

4.8在C 語言程式中嵌入組合語言(in-line assembly code)

從組合語言的程式去存取 C 語言的物件(變數)

4.9前置處理指令(Preprocessor)

4.9.1 定義文字符號(#define)

4.9.2引入檔案(#include)

4.9.3內嵌組合語言(inline assembly)

4.9.4 條件式編譯(#if/#endif)

4.9.5 編譯器的特殊選項pragma

4.10Holtek C 編譯器的內建函式(built-in functions)

第五章基本 C 語言程式

5.1 語法觀念

5.2 迴圈的應用(loop)

5.3 撰寫MCU 應用程式的注意事項

5.4 可供微控制器應用程式使用的範本

5.5 設計微控制器應用程式的小技巧

第六章程式範例–初級

6.1LED 跑馬燈

6.2LED 霹靂燈

6.3 單顆七段顯示器

6.4 5*5 點矩陣LED 顯示

6.5 HT48 微控制器控制HT1621 LCD 的顯示

6.6 HT48 微控制器控制LCD 模組的顯示

6.7 具LCD 驅動功能的微控制器之顯示應用程式– HT46R63

6.8 顯示器的通用函式– HT44780 LCM

6.9 鍵盤掃描程式

第七章程式範例–中斷函式

7.1 用時鐘控制LED 的亮與滅

7.2 類比/數位轉換(ADC) 的應用

第八章HT46R52A 應用於鎳氫電池充電器(HA0084T)

第九章程式範例– HT46R74D-1 胎壓計(HA0105T)

第一章內容簡介

盛群半導體公司(Holtek)開發一系列的八位元微控制器(micro-controller, MCU). 當開發

微控制器的應用程式時, 除了可使用盛群提供的組合語言(assembly language),也可使用

標準的C 語言編譯器(C compiler).

由於八位元微控制器的記憶體空間, 不論是程式記憶體(program memory space)或是資料

記憶體(ram memory space), 皆是有限制的, 通常會使用組合語言開發應用程式. 但是越

來越多的微控制器支援更多的記憶體以及更多的功能, 使得程式也相對的擴大. 如果仍

然使用組合語言開發程式, 不但費時費力, 未來在維護及擴增功能的工作上也相當困難.

因此, 使用高階程式語言, 例如C 語言, 來開發應用程式就是一種可行的趨勢.

C 語言是高階程式語言中的一種, 它具有高度的的可讀性及可移植性(portability),除了

能夠快速地完成應用程式的開發與偵錯, 也很容易移植到其他的微控制器上. 當程式需

要縮減或擴充功能時, 也很容易的完成, 因此很適合於微控制器的程式開發.

本書主要是以Holtek C 語言為主, 說明如何使用Holtek C 語言撰寫盛群微控制器的

應用程式, 包括 C 的程式架構, C 語言的一般用法, 特殊用法及應用範例書中將說明在

開發微控制器的應用程式時需要注意的地方及如何撰寫會比較恰當, 並配以實例解釋.

讀者可以參考修改或直接採用到自己的程式中, 再用發展工具HT-ICE, HT-IDE3000 驗

證之.

第二章介紹選用Holtek C 編譯器的步驟, 指引HT-IDE3000 呼叫Holtek C 編譯器去

編譯C 語言的原始程式.

第三章提供一種快速撰寫 C 程式的方法, 對ANSI C 語言熟悉的用者, 可於閱讀本章

之後即開始撰寫微控制器的 C 語言程式

第四章介紹C 語言, 未曾使用過 C 語言的讀者應仔細閱讀本章以了解 C 語言的用法

第五章介紹使用 C 語言寫程式的基本觀念, 注意事項及建議的寫作方法第六章到第九

章則是應用範例, 針對盛群各系列的微控制器, 以 C 語言撰寫的應用程式. 包含有功

能說明, 應用電路及程式說明.

文件編號版別 1.20日期2008/5/26 第5 頁共189 頁第二章選定Holtek C 編譯器的使用環境

2.1 進入HT-IDE3000, 建立新的專案時, 選定Holtek C 編譯器

進入HT-IDE3000 開發環境後, 依照下列方法建立一個新的專案(project)

→ 移動滑鼠游標到Project 選單, 按左鍵

→ 移動滑鼠游標到New 命令, 按左鍵

→ 出現如下的視窗, 在Language Tool 之處勾選Enhanced Holtek C compiler/Assembler

文件編號版別 1.20日期2008/5/26 第6 頁共189 頁2.2 已開啟專案後, 如何選用Holtek C 編譯器

若專案(project) 已開啟之後, 可以點選(click) Option 選單下的Project Setting 命令,

在Language Tool 中點選Enhanced Holtek C Compiler/Assembler 以設定使用Holtek C 的Enhance 版編譯器

Enhance 版的C compiler 包括ehcc32srsc.exe , ehcc32mrsc.exe 與ehcc32mrmc.exe 三個執行檔

此版本必須在HT-IDE3000 V7.0 或以上的系統才能執行

第三章微控制器 C 語言程式的速成

本章介紹如何快速撰寫微控制器的 C 語言應用程式. 已熟悉ANSI C 標準語言的用法或有撰寫的經驗者, 在閱讀此章後即可開始設計撰寫微控制器的 C 應用程式, 以下各節是基本的

C 程式成員, 某些是必須要有的, 如3.1, 其他的則視微控制器的功能及應用來決定是否需要

3.1 定義主函式main()

#include “ht46r63.h”

void main(void)

{

int Flag ;

……

TurnOn_LCD() ;

Flag = LCD_display(cstr) ;

TurnOff_LCD() ;

……

}

主函式的返回資料型態(return type)必須是void, 而且不能有參數

檔案ht46r63.h 定義與微控制器有關的常數, 例如暫存器的位址定義, 將之引入(include) 可增加程式的可讀性.

3.2定義副函式(sub-function)

視程式的大小及功能決定是否需要定義副函式. 基本上, 主函式應將應用程式的架構做成模組化, 不需要將所有的程式皆放在主函式中. 為了能很快的完成及了解應用程式, 主函式中只需要包含(呼叫) 定義各功能的副函式即可, 無論在設計或維護程式時皆能很快的進入與完成.

例如, 關於LCD 的開啟, 顯示及關閉等功能就可分別定義為單獨的副函式, 如下例. 任何其他的函式或其他的應用專案都可去呼叫這些副函式. 若設計成通用型的, 也可藉由程式館管理器(Library Manager) 將之建入程式館檔案, 以供其他應用專案使用.

void TurnOn_LCD(void)

{

}

int LCD_display(char *cstr)

{

}

void TurnOff_LCD(void)

{

}

3.3定義全域變數(global variable)

程式在運行中會需要一些變數做為資料存放的地方, 由於微控制器資料記憶體大小的限制及

C 編譯器的設計, 最好將常需使用的變數定義為全域型的變數, 在編譯程式的大小與執行上

皆較佳. 例如定義常數型指標變數cstr 指到字串“Hello!”, 則可如下

const char *cstr = “Hello!” ;

3.4定義中斷服務函式(Interrupt Service Routine : ISR) 若微控制器的周邊裝置具有中斷功能,

程式也需要此中斷機能以完成工作時, 則必須定義此周邊裝置的中斷服務函式(Interrupt Service Routine, ISR), 如下的格式

#pragma vector ISR_tmr0 @ 0x0c

void ISR_tmr0(void)

{

tick++ ;

}

中斷服務函式必須遵守下列規定

→ 返回的資料型態必須是void

→ 不能有參數(必須為void)

→ 必須使用前置處理指令#pragma vector 設定中斷向量值(interrupt vector), 在函式名稱(本例子是ISR_tmr0) 之後加上@ 及中斷向量值(本例是0x0c). 也可使用先前定義好的常數, 例如

相关主题
相关文档
最新文档