77范文网 - 专业文章范例文档资料分享平台

合泰单片机C语言教程(3)

来源:网络收集 时间:2018-12-19 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

盛群半導體股份有限公司

HOLTEK SEMICONDUCTOR INC C50 微電腦工具事業處部 文 件 編 號 撰 寫 人 : 版 別 1.20 日 期 2008/5/26 第 11 頁 共 189 頁

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

依照下列步驟? 使用 C 語言實作一個簡單的應用程式

4.2.1 定義主函式 main

範例

void main(void) { }

在 C 語言中, 主函式 main 是程式執行的起點, 有如組合語言程式中的 start

ORG 00 jmp start :

void 是資料型態, main 與 void 皆是保留字, 必須用此字, 小寫字母

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

範例

#include “ht46r63.h” void main(void) { }

標頭檔 ht46r63.h 中定義許多與微控制器有關的變數及文字符號(symbol). 接下來寫程 式時可以使用這些變數與文字符號(symbol), 好處是寫程式或維護程式時會很容易了解 程式的功能, 增加程式的易讀性. 例如

unsigned char _pa

@0x12 ;

定義 _pa 是一個 unsigned char 型態的變數, 它的位址在 RAM 的 0x12 (就是A埠, port A). 所以程式中如下的敘述

_pa = 0 ;

則與組合語言的 CLR PA ; (PA=[12H]) 有相同的功能

// 引入標頭檔 ht46r63.h

start

盛群半導體股份有限公司

HOLTEK SEMICONDUCTOR INC C50 微電腦工具事業處部 文 件 編 號 撰 寫 人 : 版 別 1.20 日 期 2008/5/26 第 12 頁 共 189 頁

4.2.3 定義文字符號及變數

在程式中使用文字符號能夠更容易的讀懂程式及修改, 例如定義文字符號 _pa0 如下

#define _pa0 _12_0

表示 _pa0 是 RAM 位址 12H 的位元 0 (bit 0), 就是 A 埠的位元 0. 下列敘述

_pa0 = 1 ;

表示將 A 埠的位元 0 設為 1, 與組合語言程式的 SET [12H].0 有相同的功能

前置處理指令 #define 是定義一個文字符號代表數值, 或是文字串, 或是巨集指令. C 編譯器的前置處理器 (preprocessor) 在編譯前, 會先替換這些定義的文字符號. 前置處理指令 #undef 是將先前定義過的文字符號取消, 變成無效. 詳細的說明請參閱 第 4.9 節

微控制器中其他暫存器的變數或文字符號, 皆定義於對應之微控制器的標頭檔案內, 在設計程式時可參考之. 可以定義一些程式需要, 但是在標頭檔案中沒有定義的變數或 文字符號, 方便程式的開發及維護, 例如 #include #define #define #define #define

“ht48R50A-1.h”

// SCL (時鐘線) 接到 MCU 的 A 埠的第 3 位元 scl _pa3

scl_c _13_3 // A 埠之控制暫存器的第 3 位元 (bit 型變數)

// SDA (資料線) 接到 MCU 的 A 埠的第 1 位元 sda _pa1

sda_c _13_1 // A 埠之控制暫存器的第 1 位元

void main(void)

{ }

定義四個文字符號 scl, scl_c, sda, sda_c 分別代表不同的輸出/輸入埠

定義變數會佔用 RAM/ROM 的空間, 如果又指定位址, 則此變數佔用此位址, 否則 Linker 在做連結時才會分派位址給變數. 其效果有如組合語言的

_pa

DB

?

定義文字符號的效果則與組合語言的 EQU 相同, 例如

#define scl _pa3 與 scl EQU _pa3 有相同的效果

盛群半導體股份有限公司

HOLTEK SEMICONDUCTOR INC C50 微電腦工具事業處部 文 件 編 號 撰 寫 人 : 版 別 1.20 日 期 2008/5/26 第 13 頁 共 189 頁

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

根據程式的功能, 設定微控制器中各裝置的初始值, 例如周邊設備的初始狀態, 暫存器 的型態等.

scl_c = 0 ; sda_c = 0 ;

4.2.5 設計子函式

獨立之功能可分別用子函式完成, 在程式的偵錯, 維護及重複使用上皆有好處. 在設計 時需要注意函式的參數,返回值等. 通常會將主函式 main() 放在程式檔的最後, 各個 子函式定義在前面或其他的程式檔案內. 下列範例只是部份, 詳細的說明可參閱 4.6 節.

// 設定 SCL (= PAC) 的狀態為輸出 // 設定 SDA (=PA) 的狀態為輸出

#include “ht48r50a-1.h” #define scl _pa3 #define #define #define

scl_c

// 引入標頭檔

// SCL (時鐘線) 接到 MCU 的 A 埠的第 3 位元

_13_3 // A 埠(位址 0x13)之控制暫存器的第 3 位元 (bit 型變數)

// SDA (資料線) 接到 MCU 的 A 埠的第 1 位元 // A 埠 (位址 0x13)之控制暫存器的第 1 位元 子函式

sda _pa1 sda_c _13_1

// 函式 : StartCondition() // 功能 : 開始一個命令 // 輸入 : 無 // 輸出 : 無

void StartCondition(void) {

sda = 1 ; // SDA 輸出 high scl = 1 ; // SCL 拉 high sda = 0 ; // SDA 輸出 low scl = 0 ; // 完成 Start of command }

// 函式 : StopCondition() // 功能 : 結束先前的命令 // 輸入 : 無 // 輸出 : 無

void StopCondition(void) {

盛群半導體股份有限公司

HOLTEK SEMICONDUCTOR INC C50 微電腦工具事業處部 文 件 編 號 撰 寫 人 : 版 別 1.20 日 期 2008/5/26 第 14 頁 共 189 頁

}

// 函式 : main() // 功能 : 主函式 // 輸入 : 無 // 輸出 : 無

void main (void) {

unsigned char Rdata, type ;

// 暫存器的初始設定

scl_c = sda_c = 0 ; // 將 A 埠的位元 1, 3 設為輸出型態 (SCL, SDA 為輸出) StartCondition() ; // 呼叫子函式 …… }

4.2.6 設計中斷服務函式

針對有硬體中斷的微控制器, 需要設計中斷服務函式以處理中斷事件 定義周邊裝置的中斷服務函式 (Interrupt Service Routine, ISR) 如下格式

#pragma vector ISR_tmr0 @ 0x0c void ISR_tmr0(void) {

tick++ ; }

中斷服務函式必須遵守下列規定 → 返回的資料型態必須是 void → 不能有參數

→ 必須設定中斷向量值 (interrupt vector), 在函式名稱(本例子是 ISR_tmr0之後

加上 @ 及中斷向量值 (本例是 0x0c). 也可使用先前定義好的常數, 例如 #define VECTOR_TMR0 0x0c

#pragma vector ISR_tmr0 @ VECTOR_TMR0 void ISR_tmr0(void) { }

盛群半導體股份有限公司

HOLTEK SEMICONDUCTOR INC C50 微電腦工具事業處部 文 件 編 號 撰 寫 人 : 版 別 1.20 日 期 2008/5/26 第 15 頁 共 189 頁

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

程式執行過程中, 可能會需要暫存一些資料, 例如旗標, 執行次數, 延遲秒數等, 因此就必須 定義變數以儲存這些資料. 由於變數要佔用程式記憶體 (PROM) 或資料記憶體(RAM), 因此在使用變數之前, 定義變數的資料型態, 以便讓編譯器正確的編譯程式及配置記憶體 空間. 除了資料型態之外, 還可加入儲存類別 (storage class) 及修飾詞 (qualifier), 對變數做 更詳細的安置.

4.3.1 變數名

變數名的規則

→ 第一個字元必須是英文字母或底線符號 (underscore), 之後可緊接著字母或數字 → 變數名的前 32 個字元有效

→ 變數名內不可有 +, - , *, / , ……等符號字元

→ 英文字母的大小寫是有區別的 (case-sensitive), 例如 count 與 Count 是不同的 變數名

範例, number, total_tick, _tick 是合法的變數名, 而 2num, $dot, line\\n 是非法的變數名

4.3.2 資料型態

Type (資料型態) Size (bits) bit char signed char unsigned char short unsigned short int unsigned int long unsigned long void float 1 8 8 8 16 16 16 16 32 32 0 32 Arithmetic Type unsigned integer signed integer signed integer unsigned integer signed integer unsigned integer signed integer unsigned integer signed integer unsigned integer - real 範圍大小 0, 1 -128 ~ +127 -128 ~ +127 0 ~ 255 -32768 ~ +32767 0 ~ 65535 -32768 ~ +32767 0 ~ 65535 -2147483648 ~ +2147483647 0 ~ 4294967295 - -3.48e-38 ~ 3.48e+38 *

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库合泰单片机C语言教程(3)在线全文阅读。

合泰单片机C语言教程(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/374484.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: