AVR 控 制 應 用 與 實 務 使 用 ATmega8515 與 C 語 言
目 錄 第 0 章 單 晶 片 微 處 理 機 的 介 紹 第 一 篇 簡 介 與 程 式 安 裝 第 一 章 A V R 的 介 紹 第 二 章 Code VisionAVR C Compiler 安 裝 篇 第 三 章 AVRStudio 第 四 章 Code VisionAVR C Compiler 使 用 篇 第 五 章 AVR 電 路 及 其 說 明 第 六 章 Code Vision AVR 之 內 建 function 第 二 篇 功 能 說 明 與 應 用 第 七 章 ATmega8515 I/O PORT 應 用 實 驗 第 八 章 ATmega8515 計 時 器 與 插 斷 功 能 第 九 章 ATmega8515Watchdog Timer 第 十 章 ATmega8515UART 第 十 一 章 ATmega8515 SPI 第 十 二 章 嵌 入 式 系 統 的 軟 體 設 計 方 法 I-Shou University 2
第 0 章 單 晶 片 微 處 理 機 的 介 紹
系 統 單 晶 片 (SOC) 已 經 成 為 目 前 IC 電 路 發 展 的 重 點 技 術 把 一 台 電 腦 的 功 能 濃 縮 成 單 一 顆 IC 主 要 用 於 控 制 方 面, 可 程 式 控 制 I/O 腳 之 互 動 單 晶 片 微 電 腦 的 架 構 :CPU 記 憶 體 I/C PORT 計 時 器 計 數 器 串 列 傳 輸 介 面 A/D 轉 換 器 D/A 轉 換 器 軟 體 : 用 來 控 制 微 電 腦 動 程 式 硬 體.. 輸 入 單 元 記 憶 單 元 運 算 單 元 輸 出 單 元 控 制 單 元 I-Shou University 4
不 同 用 途 設 計 的 單 晶 片 微 電 腦 非 常 多, 目 前 普 遍 的 型 號 : 8051:Intel 公 司 的 MCS-51 系 列,8Bit CISC 40pin PIC:Microchip 公 司 發 展, 耗 電 小, 擾 雜 訊,RISC 應 用 於 防 盜 器 遙 控 器 倒 車 雷 達 等 AVR:RISC,I/O 腳 位 與 8051 共 通, 速 度 較 快 目 前 的 應 用 最 有 名 的 就 是 XBOX 的 搖 桿! I-Shou University 5
第 一 篇 簡 介 與 程 式 安 裝
第 一 章 AVR 的 介 紹
1-1 AVR 簡 介 ATMEL AVR 系 統 與 傳 統 之 8051 有 明 顯 不 同, 以 速 度 來 說 AVR 就 是 8051 的 24 倍 AVR 系 列 的 單 晶 微 控 制 器 是 美 商 ATMEL 所 推 出 之 快 速 指 令 低 消 耗 功 率 及 具 有 多 組 多 功 能 計 時 / 計 數 器 等 加 強 功 能 之 AVR 增 強 型 精 簡 指 令 型 單 晶 微 控 制 器 以 高 速 度 高 保 密 性 低 功 耗 大 驅 動 能 力 和 豐 富 的 硬 體 資 源 而 稱 著 於 微 控 制 器 的 世 界 美 商 ATMEL 之 官 方 網 站 網 址 為 :http://www.atmel.com/ I-Shou University 8
1-1 AVR 簡 介 一 般 IC 分 為 兩 種 架 構 : Von Neuman: 所 有 的 記 憶 體 ( 包 括 I/O), 都 使 用 同 一 個 空 間 屬 於 舊 式 架 構 Harvard: 每 個 記 憶 體 都 有 自 己 的 位 置 使 用 不 同 的 空 間 目 前 電 腦 都 是 屬 於 此 種 架 構, 效 率 好, 可 以 同 時 從 不 同 的 空 間 取 資 料 來 使 用 AVR 所 使 用 的 CPU 便 是 Harvard 架 構, 具 有 程 式 記 憶 區 以 及 資 料 記 憶 區 I-Shou University 9
1-1 AVR 簡 介 電 腦 架 構 分 為 CISC 及 RISC: CISC 全 名 為 Complex Instruction Set Computer; 中 文 複 雜 指 令 集 是 屬 於 傳 統 的 處 理 器 架 構, 多 用 於 控 制 電 路 上 為 節 省 Memory 容 量 所 以 指 令 有 長 有 短, 造 成 CPU 之 複 雜 無 法 提 升 速 度, 效 率 較 差 RISC 全 名 為 Reduced Instruction Set Computing; 中 文 精 簡 指 令 集 電 腦 或 精 簡 指 令 式 核 心, 此 種 指 令 集 專 為 了 硬 體 電 路 所 設 計, 它 的 CPU 構 造 簡 單, 速 度 變 快, 而 且 省 電 I-Shou University 10
1-1 AVR 簡 介 AVR 之 IC 記 憶 體 主 要 有 FLASH EEPROM RAM FLASH 為 存 放 主 要 系 統 程 式 之 位 置, 具 有 8Kbyte, 需 要 先 清 除 之 前 所 燒 入 的 程 式 後 才 能 進 行 燒 入 的 動 作 EEPROM 為 存 放 一 些 參 數 小 密 碼 等 之 位 置, 具 有 512byte, 可 以 直 接 才 能 進 行 燒 入 的 動 作 RAM 則 為 運 算 記 憶 體, 有 600 個 byte I-Shou University 11
1-2 AVR 之 特 性 速 度 高 : 在 20MHz 的 工 作 頻 率 下, 每 一 個 指 令 之 執 行 速 度 可 達 到 50ns 耗 電 低 : 採 用 CMOS 技 術 且 具 有 省 電 睡 眠 的 模 式, 耗 電 量 大 約 是 在 1uA~2.5mA 之 間 具 Flash ROM 之 功 能, 可 重 覆 燒 寫 達 1000 次 以 上 具 有 看 門 狗 計 時 器 功 能 I/O 埠 接 腳 具 有 大 電 流 輸 出 能 力, 約 在 10~20mA 左 右 I-Shou University 12
1-2 AVR 之 特 性 具 有 不 可 逆 的 保 護 不 可 被 破 解 的 Lock Bit 其 程 式 的 寫 入 可 以 使 用 ISP 的 方 式 進 行 支 援 JTAG 介 面 的 燒 錄 與 模 擬, 能 使 用 串 列 的 方 法 去 讀 寫 IC 內 部 之 暫 存 器 ; 直 接 透 過 JTAG 介 面, 可 執 行 發 展 系 統 的 功 能 內 建 可 抹 除 寫 入 10 萬 次 的 EEPROM, 能 確 保 存 放 數 據 的 安 全 AVR 16 位 元 程 式 記 憶 體 及 單 一 執 行 週 期 之 快 速 指 令 可 達 50nS 超 功 能 精 簡 指 令 集, 內 建 有 32 個 工 作 暫 存 器 以 及 128 個 ~512 個 內 部 靜 態 SRAM, 程 式 設 計 容 易 I-Shou University 13
1-2 AVR 之 特 性 具 有 高 階 C 語 言 編 譯 器, 使 程 式 設 計 更 於 容 易, 而 且 以 C 語 言 所 編 譯 出 之 機 械 碼 程 式 長 度 比 組 合 語 言 所 組 譯 出 之 機 械 程 成 長 度 更 精 簡 具 有 可 程 式 系 統, 即 線 上 燒 寫 的 功 能, 可 於 發 展 電 路 中 隨 時 隨 地 予 以 程 式 燒 寫, 在 使 用 上 極 為 方 便 多 重 的 中 斷 向 量, 讓 中 斷 服 務 程 式 可 以 快 速 地 做 出 回 應 的 控 制 機 制, 並 使 其 程 式 的 編 寫 更 趨 於 簡 單 有 一 組 8bit 計 時 / 計 數 器 與 二 組 16bit 計 時 / 計 數 器, 並 且 具 有 比 較, 捕 捉 以 及 PWM 的 功 能 I-Shou University 14
1-3 AVR 之 AT90S 系 列 AT90S 系 列 是 屬 於 一 個 低 功 率 高 效 能, 在 RISC 的 架 構 下 有 穩 定 的 8-16bit 微 控 制 器 之 元 件 其 特 色 包 括 控 制 電 壓 及 頻 率 完 善 的 佈 線, 以 及 匯 流 排 的 加 密 韌 體 : 儲 存 於 ROM 中 的 程 式 介 於 硬 體 和 軟 體 之 間, 相 當 於 將 軟 體 燒 入 完 成 在 其 中 的 硬 體 Masked ROM EEPROM Flash Memory 屬 於 非 揮 發 性 的 記 憶 體 - Masked ROM: 資 料 只 能 寫 入 一 次, 並 且 是 在 出 廠 時 就 已 經 寫 入 不 能 消 除 其 內 部 之 資 料 - EEPROM: 可 以 重 複 寫 入 及 清 除, 是 直 接 寫 入 與 讀 出, 若 讀 出 的 資 料 變 了, 即 表 示 寫 入 完 成 -Flash Memory: 可 以 重 複 寫 入 及 清 除, 是 在 寫 入 之 前, 要 先 把 所 屬 的 整 個 區 塊 做 處 理, 然 後 才 會 寫 入 I-Shou University 15
1-3 AVR 之 AT90S 系 列 AT90S 系 列 包 含 了 許 多 先 前 就 具 有 的 安 全 性 設 計, 能 保 護 元 件 本 身, 更 能 滿 足 非 合 法 性 的 使 用 為 了 配 合 能 具 有 高 安 全 得 應 用 特 性, 部 分 元 件 提 供 了 隱 密 的 產 生 器 CRC 與 硬 體 DES 模 組 AT90S8515 AVR 8-Bit RISC 8-Kbyte 的 系 統 可 程 式 快 閃 程 式 記 憶, 內 含 544 Byte 外 加 超 過 64K byte 的 SRAM,512 Byte EEPROM, 在 8MHz 時 電 腦 處 理 能 力 在 8 MIPS 以 上, 可 使 用 3 伏 特 及 5 伏 特 的 電 壓 目 前 ATmega8515 已 經 相 容 取 代 AT90S8515 ATmega8515 是 AT90S8515 的 升 級 替 換 的 改 善 產 品, 在 16MHz 時 電 腦 處 理 能 力 在 16 MIPS 以 上 I-Shou University 16
1-4 ATmega8515 ATmega8515 就 是 AT90S8515 的 升 級 替 代 產 品 ATmega8515 的 腳 位 也 與 AT90S8515 完 全 相 同 但 是 ATmega8515 的 部 份 功 能 需 要 針 對 幾 個 Program Fuse Bit(s), 來 做 額 外 的 設 定 I-Shou University 17
1-4-1 ATmega8515 Datasheets ATmega8515 可 以 即 時 修 改 可 程 式 化 元 件 中 之 資 料 是 一 個 8 位 元 組 有 快 閃 記 憶 體 程 式 的 8 位 元 的 微 處 理 機 可 程 式 來 控 制 I / O 腳 之 互 動 一 般 市 價 大 約 3.2 美 元 不 等 ATmega8515 第 40 腳 為 正 電 源 第 20 腳 為 接 地 端 18 19 腳 為 時 脈 輸 入 第 9 腳 為 外 部 輸 入 重 置 A B C D E 五 個 I/O PORT 可 寫 程 式 來 控 制 I-Shou University 18
ATmega8515 特 色 : 1-4-1 ATmega8515 Datasheets AVR - 高 效 能 以 及 耗 電 量 低 之 精 簡 指 令 集 架 構 使 用 AVR 精 簡 指 令 集 的 架 構 - 130 個 指 令, 大 部 分 是 一 個 CLOCK 執 行 一 個 指 令 -32 8 個 通 用 的 工 作 暫 存 器 - 全 靜 態 操 作 -1 秒 執 行 1600 萬 個 以 上 之 指 令 -2 個 循 環 的 晶 片 乘 法 器 I-Shou University 19
1-4-1 ATmega8515 Datasheets 非 揮 發 式 程 式 與 記 憶 資 料 -8K 位 元 組 的 系 統 可 程 式 快 閃 記 憶 體, 可 存 8000 多 筆 資 料, 線 上 燒 入 : 可 寫 入 / 清 除 共 10 萬 次 - 具 有 獨 立 位 元 鎖 定 的 可 選 擇 開 機 程 式 區 - 藉 由 單 晶 開 機 程 式 來 做 線 上 燒 入 - True Read-While-Write Operation - 512 位 元 組 系 統 可 程 式 EEPROM: 寫 入 / 清 除 共 10 萬 次 - 內 建 512 位 元 組 的 SRAM - 64K 以 上 個 位 元 組 可 做 任 意 外 部 記 憶 體 空 間 - 程 式 鎖 定 以 確 保 軟 體 防 護 I-Shou University 20
1-4-1 ATmega8515 Datasheets 週 邊 特 色 : - 有 1 個 預 除 頻 器 與 比 較 模 式 的 8 位 元 計 時 計 數 器 - 有 1 個 預 除 頻 器 比 較 模 式 與 捕 捉 模 式 的 16 位 元 計 時 計 數 器 - 三 個 波 寬 調 變 的 通 道 - 在 晶 片 上 有 類 比 之 比 較 測 定 儀 - 在 晶 片 震 盪 器 上 有 可 程 式 的 看 門 狗 計 時 器 - 可 程 式 化 串 列 介 面 (USART) - 主 / 從 串 列 週 邊 介 面 (SPI) I-Shou University 21
1-4-1 ATmega8515 Datasheets 特 殊 微 電 腦 功 能 : - 電 源 開 啟 重 置 與 可 程 式 電 源 低 電 壓 重 置 偵 測 - 內 部 具 有 標 準 設 定 之 RC 震 盪 器 - 三 個 睡 眠 省 電 模 式 : 閒 置 斷 電 與 待 機 - 外 部 與 內 部 插 斷 來 源 輸 入 / 輸 出 及 包 裝 : -35 條 可 程 式 輸 入 / 輸 出 接 線 -40 隻 腳 PDIP 封 裝 44 隻 腳 PLCC 及 TQFP 封 裝 44 隻 腳 MLF 封 裝 I-Shou University 22
1-4-1 ATmega8515 Datasheets PDIP: 塑 料 雙 列 直 插 式 封 裝 PLCC: 塑 料 無 引 線 晶 片 載 体 封 裝 TQFP: 薄 型 四 方 扁 平 封 裝 MLF: 表 面 黏 著 的 微 型 導 線 架 封 裝 I-Shou University 23
1-4-1 ATmega8515 Datasheets 操 作 電 壓 :( 供 電 範 圍 廣 ) - ATmega8515L:2.7-5.5V - ATmega8515:4.5-5.5V 工 作 速 度 :( 速 度 快 ) - ATmega8515L:0-8MHz - ATmega8515:0-16MHz I-Shou University 24
1-4-2 ATmega8515 功 能 說 明 ATmega8515 是 一 個 用 來 做 數 位 系 統 設 計 低 功 率 消 耗 8 位 元 CMOS 微 控 制 的 AVR 晶 片, 屬 於 RISC 設 計, 功 能 強 速 度 快 ATmega8515 提 供 以 下 的 功 能 : - 具 有 8K 位 元 組 同 時 讀 寫 能 力 的 系 統 可 程 式 快 閃 記 憶 體 512 位 元 組 的 EEPROM,512 位 元 組 的 SRAM - 一 個 外 部 記 憶 體 介 面 -35 通 用 目 的 I/O 線,32 通 用 目 的 工 作 暫 存 器 - 兩 個 具 有 比 較 模 式 且 可 變 通 的 計 時 / 計 數 器 - 內 部 及 外 部 插 斷 - 一 個 可 程 式 串 列 USART - 一 個 具 有 內 部 震 盪 且 可 程 式 的 看 門 狗 計 時 器 - 一 個 SPI 串 列 埠 - 三 個 可 使 用 軟 體 選 擇 的 省 電 模 式 I-Shou University 25
I-Shou University ATmega8515 方 塊 圖 26
ATmega8515 RISC 架 構 圖 I-Shou University 27
High-level language program (in C) swap(int v[], int k) {int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; } Compiler Assembly language program (for MIPS) swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31 Assembler Binary machine language program (for MIPS) 00000000101000010000000000011000 00000000000110000001100000100001 10001100011000100000000000000000 10001100111100100000000000000100 10101100111100100000000000000000 10101100011000100000000000000100 00000011111000000000000000001000
Instruction Fetch Instruction Decode and Register Fetch Execution, Memory Address Computation, or Branch Completion Memory Access or R-type instruction completion Write-back step Five Execution Steps INSTRUCTIONS TAKE FROM 3-5CYCLES!
4 Add Add Data PC Address Instruction Instruction memory Register # Registers ALU Address Register # Register # Data memory Data
Building the Datapath Use multiplexors to stitch them together PCSrc Add M ux 4 Add ALU result Shift left 2 PC Read address Instruction Instruction memory Read register 1 Read register 2 Registers Write register Write data RegWrite Read data 1 Read data 2 ALUSrc M ux 4 ALU ALU operation Zero ALU result Address Write data MemWrite Read data Data memory MemtoReg M ux 16 Sign 32 extend MemRead
第 2 章 Code VisionAVR C Compiler 安 裝 篇
簡 介 與 安 裝 Code VisionAVR C Compiler, 是 一 套 可 配 合 Atmel 公 司 之 AVR 系 列 所 使 用 的 軟 體, 約 100 元 美 金 可 以 買 到, 其 主 要 之 功 能 為 模 擬 驗 證 可 以 到 以 下 的 網 址 http://www.dontronics.com/cvavr_download.html, 去 進 行 免 費 軟 體 下 載 的 工 作 這 是 試 用 版 的 軟 體, 除 非 因 為 程 式 過 長 導 致 容 量 不 足 之 外, 大 致 上 在 小 規 模 的 程 式 使 用 已 經 綽 綽 有 餘 若 是 需 要 而 必 須 寫 出 較 長 的 程 式 碼 或 是 需 要 更 強 大 的 用 途 時, 請 循 正 當 管 道 進 行 完 整 版 的 安 裝 I-Shou University 33
第 3 章 AVRStudio
AVRStudio AVRStudio 可 以 除 錯 組 合 語 言 及 C 語 言, 主 要 的 功 能 是 在 程 式 編 寫 完 成 後 做 模 擬 驗 證, 確 定 我 們 的 程 式 撰 寫 無 誤 並 模 擬 燒 入 至 電 路 板 的 動 作 與 預 期 相 同 後 AVRStudio 必 須 搭 配 Code VisionAVR C Compiler 使 用 我 們 先 在 Code VisionAVR C Compiler 撰 寫 好 程 式, 然 後 才 使 用 AVRStudio 偵 錯 除 錯 並 模 擬 程 式 動 作 AVRStudio 是 屬 於 一 種 新 的 專 業 整 合 發 環 境, 它 針 對 Window 9x / NT / 2000 / XP 之 環 境 在 AVR 中 寫 程 式 和 除 錯 AVRStudio 中 還 包 含 了 組 合 語 言 程 式 與 模 擬 器 I-Shou University 35
AVRStudio I-Shou University 36
第 4 章 Code VisionAVR C Compiler 使 用 篇
簡 介 Code VisionAVR 的 最 大 特 色 是 將 一 些 常 用 的 功 能 寫 成 function, 在 使 用 者 需 要 時 可 以 直 接 呼 叫 使 用 Code VisionAVR 是 使 用 C 語 言 編 寫 程 式, 且 可 以 在 C 下 使 用 組 合 語 言 之 指 令 並 對 照 使 用 在 Code VisionAVR 中, 必 須 先 寫 好 程 式 後 才 能 順 利 作 除 錯 及 驗 證 的 動 作 而 使 用 Code VisionAVR 時, 在 一 開 始 便 要 做 許 多 相 關 的 設 定, 因 為 這 可 以 減 少 許 多 程 式 的 編 寫 I-Shou University 38
進 入 Code VisionAVR I-Shou University 39
第 5 章 AVR 電 路 及 其 說 明
電 路 佈 線 圖 I-Shou University 41
電 路 板 製 作 電 路 製 作 的 程 序 主 要 可 分 為 : 制 訂 產 品 功 能 規 格 (specification) 電 路 設 計 (schematic design) 電 路 板 layout(pcb layout) 製 作 光 罩 (mask) 曝 光 (exposure) 顯 影 (development) 水 洗 (rinse) 蝕 刻 (etching) 鑽 孔 (drill) 零 件 焊 接 測 試 等 步 驟 購 買 電 路 板 I-Shou University 42 所 需 材 料
電 路 佈 線 圖 的 取 得 EDA 設 計 和 線 路 佈 局 完 成 後 的 圖 形 必 需 轉 移 至 圖 形 稿 上 圖 形 稿 只 有 不 透 明 和 透 明 的 部 份 I-Shou University 43
曝 光 (exposure) 曝 光 機 曝 光 紫 外 線 日 光 燈 曝 光 I-Shou University 44
顯 影 (development) I-Shou University 45
蝕 刻 (etching) 氯 化 鐵 溶 劑 專 門 的 小 型 儀 器 蝕 刻 手 動 蝕 刻 蝕 刻 完 成 I-Shou University 46
鑽 孔 與 焊 接 I-Shou University 47
第 6 章 Code VisionAVR 之 內 建 function
Library Function 使 用 Library Function, 必 須 呼 叫 #include 例 如 : #include <math.h> // 呼 叫 數 學 運 算 函 數 ( 如 絕 對 值 平 方 根 餘 數 等 ) #include <stdio.h> // 呼 叫 各 種 資 料 型 態 的 數 值 函 數 ( 如 亂 數 整 數 浮 點 數 等 ) I-Shou University 49
Standard C Input/Output Functions 這 些 函 數 被 放 置 在 檔 案 stdio.h 被 放 置 在 檔 案 此 類 型 之 中 #include <90s8515.h> #include <stdio.h> #define xtal 4000000L // 石 英 震 盪 器 的 頻 率 設 定 [Hz] #define baud 9600 //Baud rate void main(void) { char k; UBRR=xtal/16/baud-1; // 將 UART 的 Baud rate 初 始 化 UCR=0x18; // 將 UART 的 控 制 暫 存 器 初 始 化 RX & TX 致 能, 不 使 用 插 斷, 8 位 元 的 資 料 while (1) { k=getchar(); // 接 收 字 元 putchar(k); // 傳 回 }; } I-Shou University 50
Character Type Functions 這 些 函 數 的 原 型 被 放 置 在 檔 案 ctype.h 之 中 unsigned char isalnum(char c): 如 果 c 是 字 母 或 數 字 符 號 則 傳 回 1 unsigned char isalpha(char c): 如 果 c 是 字 母 則 傳 回 1 unsigned char isascii(char c): 如 果 c 是 ASCII 符 號 則 傳 回 1 unsigned char iscntrl(char c): 如 果 c 是 控 制 符 號 則 傳 回 1 unsigned char isdigit(char c): 如 果 c 是 十 進 位 制 則 傳 回 1 unsigned char islower(char c): 如 果 c 是 小 寫 字 母 則 傳 回 1 unsigned char isprint(char c): 如 果 c 是 可 印 刷 字 體 則 傳 回 1 unsigned char ispunct(char c): 如 果 c 是 標 點 符 號 則 傳 回 1 unsigned char isspace(char c): 如 果 c 是 空 白 符 號 則 傳 回 1 unsigned char isupper(char c): 如 果 c 是 大 寫 字 母 則 傳 回 1 unsigned char isxdigit(char c): 如 果 c 是 十 六 進 位 制 則 傳 回 1 char toascii(char c): 如 果 等 於 c 則 傳 回 其 ASCII 符 號 unsigned char toint(char c): 如 果 c 是 十 六 進 位 制 則 說 明 並 傳 回 char tolower(char c): 如 果 c 的 內 容 是 大 寫 字 元 則 傳 回 小 寫 的 c char toupper(char c): 如 果 c 的 內 容 是 小 寫 字 元 則 傳 回 大 寫 的 c I-Shou University 51
Standard Library Functions 這 些 函 數 的 原 型 被 放 置 在 檔 案 stdlib.h 之 中 int atoi(char *str): 字 串 轉 換 為 整 數 數 字 long int atol(char *str): 字 串 轉 換 為 長 整 數 void itoa(int n, char *str): 整 數 n 轉 換 為 字 串 void ltoa(long int n, char *str): 長 整 數 n 轉 換 為 字 串 void ftoa(float n, unsigned char decimals, char *str): 浮 點 數 n 轉 換 為 十 進 位 字 串 void ftoe(float n, unsigned char decimals, char *str) : 浮 點 數 n 轉 換 為 指 數 字 串 float atof(char *str): 字 元 轉 換 浮 點 數 int rand (void): 數 字 範 圍 為 0-32767 void srand(int seed): 重 新 設 定 數 值 為 亂 數 I-Shou University 52
Mathematical Functions 這 些 函 數 的 原 型 被 放 置 在 檔 案 math.h 之 中 signed char sign(int x): 若 整 數 x 為 負 零 或 正 數, 傳 回 -1 0 或 1 unsigned int abs(int x): 傳 回 整 數 x 的 絕 對 值 int min(int a, int b): 傳 回 整 數 a 與 b 的 最 小 值 int max(int a, int b): 傳 回 整 數 a 與 b 的 最 大 值 unsigned char isqrt(unsigned int x): 傳 回 整 數 x 的 平 方 根 float fmod(float x, float y): 傳 回 x/y 的 餘 除 值 float modf(float x, float *ipart): 將 浮 點 數 x 分 開 成 整 數 及 小 數 float pow(float x, float y): 計 算 x**y, 並 將 結 果 傳 回 float sin(float x): 當 有 角 度 時 傳 回 浮 點 數 x 的 sin 函 數 float sinh(float x): 當 有 角 度 時 傳 回 浮 點 數 x 的 sinh 函 數 float atan(float x): 傳 回 浮 點 數 x 的 tan-1 函 數 I-Shou University 53
Delay Functions 這 些 函 數 原 型 被 放 置 在 檔 案 delay.h 之 中 #include <delay.h> void main(void) { #asm("cli") /* 插 斷 失 能 */ delay_us(100); /* 延 遲 100ms */ /*... */ delay_ms(10); /* 延 遲 10ms */ #asm("sei") /* 插 斷 致 能 */ /*... */ } I-Shou University 54
LCD Functions 這 些 函 數 原 型 被 放 置 在 檔 案 lcd.h 之 中 #asm.equ lcd_port=0x15 ; // LCD 連 接 到 PORTC 輸 出 #endasm #include <lcd.h> // 宣 告 LCD 操 作 規 則 void main(void) { lcd_gotoxy(0,0); // 顯 示 位 置 lcd_putsf("user"); // 顯 示 while (1); /* 迴 圈 */ } I-Shou University 55
I2C Bus Functions I2C 函 數 原 型 被 放 置 在 檔 案 i2c.h 之 中 /* 從 EEPROM 讀 一 個 位 元 組 */ unsigned char eeprom_read(unsigned char address) { unsigned char data; i2c_start(); i2c_write(eeprom_bus_address); i2c_write(address); i2c_start(); i2c_write(eeprom_bus_address 1); data=i2c_read(0); i2c_stop(); return data; } I-Shou University 56
1 Wire Protocol Functions 在 網 路 上 下 載 CodeVisionAVR 的 版 本, 將 無 法 使 用 這 個 功 能 1 Wire 函 數 原 型 被 放 置 在 檔 案 1wire.h 之 中, 以 微 控 制 器 為 主, 周 邊 為 輔 #asm.equ w1_port=0x18 //1 Wire 在 PORTB.equ w1_bit=2 #endasm #include <1wire.h> 1 Wire Protocol 函 數 使 用 時 有 嚴 格 的 延 遲 時 間 並 且 一 定 要 在 Project Configure C Compiler 選 單 設 定 正 確 的 時 脈 頻 率 I-Shou University 57
SPI Functions 用 在 介 於 C 語 言 與 使 用 SPI 匯 流 排 的 各 種 周 邊 的 介 面 函 數 原 型 被 放 置 在 檔 案 spi.h 之 中 #include <spi.h> // 呼 叫 SPI 函 數 庫 unsigned char spi(unsigned char data): 傳 送 一 個 字 元 的 資 料, 同 時 接 收 一 個 字 元 資 料 I-Shou University 58