PSOC_C基本指令 中州技術學院 電子系 副教授 余文俊.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

现代电子技术实验 ——综合实验之单片机部分
C语言程序设计 主讲教师 :张群燕 电话:
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
第一章 C语言概述 计算机公共教学部.
编译原理上机实习
计算机硕士专业基础—C语言 赵海英
Chapter 5 迴圈.
第十一章 結構.
Class 2 流程控制-選擇敘述與迴圈.
Visual C++ introduction
第二章 C# 基础知识.
C++程序设计 第二讲 清华大学软件学院.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
【變數與記憶體位址】 變數(Variable)提供一個有名稱的記憶體儲存空間。一個變數包含資料型態、變數本身的值及它的位址值。
第3章 C 語言的基本知識.
保留字與識別字.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C語言簡介 日期 : 2018/12/2.
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C语言 程序设计基础与试验 刘新国、2012年秋.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
C++语言程序设计 第二章 C++简单程序设计.
Chap3 Linked List 鏈結串列.
|12 結構與列舉型態.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
第三章 C# 基础知识.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言概述 第一章.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第2章 数据类型及表达式 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
第十章 指標.
第 二 章 数据类型、运算符与表达式.
CH05. 選擇敘述.
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C qsort.
第2章 认识C语言 教学要点 2. 1 项目二C语言程序识读 2 .2 项目三班级成绩排名 2 .3 知识链接 返回.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
第2章 数据类型、运算符与表达式 本章要点: 基本数据类型 常量和变量 算术运算符和算术表达式 关系运算符和关系表达式
第二章 类型、对象、运算符和表达式.
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
陣列與結構.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
簡單Java介紹.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
第2章 Java语言基础.
Programming & Language Telling the computer what to do
LED Pili LED 中州技術學院 電子系 副教授 余文俊.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Array(陣列) Anny
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
第2章 Arduino编程.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

PSOC_C基本指令 中州技術學院 電子系 副教授 余文俊

C語言程式架構 1.主程式。 2.函式 ( 副程式 ) 3.標頭檔。 #include “stdio.h” void main(void) { unsigned char i, j, k; j=i+j; delay(); } void delay(void) unsigned char i; for(i=1; i<255; i++);

void delay_lms (char j) *主程式 (Main progran): *主程式以main為其函式的名稱。 main ( ) { C語言敘述; } *函式 (Function): void delay_lms (char j) 返回值型態 參數 void delay_1ms(char j) { for(j=0; j<100; j++); } *標頭檔 (Head File): *標頭檔以x.h檔名儲存,它 主要用來定義各硬體I/O位 址,常數、函數的宣告…。 #define FALSE 0 #define TURE l #define COUNTER 100

路徑和檔案名稱 避免使用以下的字符用在路徑上和檔案名稱上(它們是有問題的): \ / : * ? ” < >| & + , = [ ] %$` ‘‧

C語言的常數 1.八進位表示法:以0開頭的數字。 2.十進位的表示法:不以0開頭的數字。 3.十六進位的表示法:以0x開頭的數字。 例:011為八進位表示法,相當於十進位的9。 2.十進位的表示法:不以0開頭的數字。 例:9213。 3.十六進位的表示法:以0x開頭的數字。 例:0x11表示16進位11。即十進位的17。 4.字元表示法:以單引號將英文字母、 阿拉伯數字、符號……括起來表示之。 ‘A’ 表示字母A,即0x41 ‘0’ 表示阿拉伯數字0,即0x30 ‘#’ 表示#符號 5.特殊字元 ( 控制字元 ) 表示法 控制字元 ASCII碼 字 元 名 稱 \0 0x00 空格 (null space) NULL \a 0x07 響鈴 (bell ring) BELL \b 0x08 退格 (backspace) BS \t 0x09 標識 (tab) HT \n 0x0a 跳列 (newline) LF \f 0x0c 跳頁 (form feed) FF \r 0x0d 回轉 (earriage return) CR \" 0x22 雙引號 (double quote) , " \' 0x2c 單引號 (singal quote) , ' \\ 0x5c 倒斜線 (bacrk slash) , \

C語言的變數 格式: 變數資料型態 變數名稱; 【例】 int i; 二、變數的組合 一、變數的名稱開頭字元 格式: 變數資料型態 變數名稱; 【例】 int i; 二、變數的組合 1.大寫英文字母 (A ~ Z) 2.小寫英文字母 (a ~ z) 3.阿拉伯數字 (0 ~ 9) 4.底線_ 一、變數的名稱開頭字元 1.大寫英文字母 (A ~ Z) 2.小寫英文字母 (a ~ z) 3.底線_ 三、變數名稱不可以為系統的保留字 auto break case char continue default do double else enum extern float goto if int long register return short sizeof static struct switch typebef union unsigned void while 四、大寫與小寫的變數,代表不同的變數 (?)

變數的資料型態 ( 基本資料型態 ) 格式:資料形態修飾 資料型態變數 1.資料基本型態 2.資料型態的修飾字:改變資料型態的意義。 char: 存放字元資料型態。代表存放8位元資料。 int: 存放整數的資料型態。代表存放16位元資料。 float: 存放浮點數的資料型態。代表存放32位元資料。 double:存放雙倍精度浮點數的資料型態。代表存放32位元資料。 2.資料型態的修飾字:改變資料型態的意義。 signed: 帶符號。 unsigned:不帶符號。 short: 短。未加入short的變數為short。 long: 長。其資料長度為原資料型態的2 倍。

C語言基本資料型態

另外的資料類型 在m8c.inc

支援的運算符號

支援的運算符號

支援的運算符號

支援的運算符號

支援的運算符號

變數的宣告 格式:資料型態修飾字 資料型態 變數名稱; 1 .宣告變數型態 char i; 宣告變數i為字元資料型態 2 . 宣告變數型態,並給予初始值 char i , j , k =10; unsigned char i=’A’ ;

變數的種類 ( 變數的有效範圍 ) (1)本地變數 (local variable) (2)全區變數 (global variable) (3)外部變數 (external variable)

本地變數 (local variable) 本地變數的有效範圍只有在它所宣告的函式內有效 void main(void) { char i; test(); } void test(void) char i, k; i=100; k=i+k; i的有效範圍 i, k的有效範圍此i與main()中之i不同

全區變數 (global variable) 全區變數的有效範圍是整個檔案內 (*.c )。 檔案A.C中: 檔案B.C中: char delay; 全區變數宣告 void dkk (void) void main(void) { {delay=10;} char delay ; 區域變數delay宣告 delay = delay /10; } void f1 (void) {delay = delay+1;}

外部變數 (external VARIABLE) 外部變數的有效範圍為所有檔案的所有函式 檔案A.C中: 檔案B.C中: EXTERNAL char delay;全區外部變數宣告 void dkk (void) void main(void) {char delay ; 區域變數delay宣告 {delay=10;} delay = delay /10; } void f1 (void) {delay = delay+1;}

變數的等級 1. auto ( 自動變數 ) 2 . static ( 靜態變數 ) 4. bit ( 位元變數 )

IAR-C是以暫存器R0~R7來儲存自動變數。(8051) auto ( 自動變數 ) 以堆疊方式儲存在記憶體空間。 IAR-C是以暫存器R0~R7來儲存自動變數。(8051) void delay (void) { auto char i; 意義相同 char i; }

static ( 靜態變數 ) IAR-C編譯器是以固定位址存放此變 數,使用堆壘方式來存放 IAR-C將它儲存在8051CPU的記憶體 00H~7FH。 static char i; static int j;

C語言的敘述 (statement) 格式: 變數=任何合法的運算式; char a, b, c, j ; a=3+2 ; 結果:a=5 格式: 變數=任何合法的運算式; char a, b, c, j ; a=3+2 ; 結果:a=5 b=a+4 ; 結果:b=9 c=a/b ; 結果:c=0 j=a-b ; 結果:-4

算術運算

關係運算子 關係運算子用來比較變數的值或常數的值,並將結果傳 回給變數。 若為真,則結果為1,若為假,則結果為0。 運算的結果不影響各個變數的值。

一般邏輯運算 ** 邏輯運算的功能是用來判斷敘述的真、偽。 ** 若敘述為真,則結果為1。若敘述為偽,則結果為0。

位元邏輯運算子 ** 位元邏輯運算子會將各變數或常數的每一個位 元 (bit)做邏輯運算,並將結果寫入某變數。

條件控制指令用來控制C語言程式的執行流程 1. for 指令 2. while 指令 3. do_while 指令 4. if ─ else 指令 5. switch ─ case 指令 6. goto 指令(無條件)

for 敘述

for應用例 (1)無限迴圈 (2)時間延遲 (3)執行n次敘述後,繼續往下執行程式。 4.多重迴圈 5..for迴圈不可交叉 【例】 for(;;) ; 與組合語言JMP $相同。 (2)時間延遲 char i; for(i=0;i<100;i + +); 本指令會執行for迴圈100次,後離開for迴圈,繼續往下執行程式。 (3)執行n次敘述後,繼續往下執行程式。 int i; for (i=0 ; i<5 ; i++) { P0=i; } P1=0;執行順序: P0=0 (i=0) P0=1 (i=1) P0=2 (i=2) P0=3 (i=3) P0=4 (i=4) 離開for迴圈 (I=5) 4.多重迴圈 for控制敘述可以有多層迴路控制敘述。先執行 內部迴圈後,依序執行外部迴圈。 5..for迴圈不可交叉 【例】 char i, j, k, l;i=0; j=0; for (k=0 ; k<3 ; k++) { j=j +3; for (l=0; l<3; l++) { i=i +3; } }

while迴圈 指令格式: while (運算) { 敘述 A ; } 敘述 B ; 執行流成圖:

應用例 【例】 char i=3; while (i>0) { P1=i; i ––; } 執行順序: (4) 結束 (1)無限迴圈 (a) while (1); (b) while (1) {敘述 ; } (2)時間廷遲 char i=100 ; while (i > 0) { ––i ; } (3)執行n次敘述 char i=100; while (i > 0) 執行100次 { 敘述 ; – – i; }

do–while指令 【說明】 【指令格式: 】 do { 敘述A;} { 敘述B;} 【說明】 (1) 首先執行完do迴圈的敘述 A後, 才測試while的運算 式是否為真。若運算式為真,則跳至do迴圈內,再執行迴圈內的敘述A。若為假,則跳出此迴圈,執行敘述B。 (2)如果{ }內,只有一個敘述, 可以省略大括弧。 (3)多層迴路與for( ) 相同。 (4)迴圈不得交叉。 【執行流程圖: 】

應用例 char i=0, j=0; do { j=j+10; i=i+4; } while (i<10) { i=100;} 【 程式】 char i=0, j=0; do { j=j+10; i=i+4; } while (i<10) { i=100;} 【執行順序】 (1)i=0,j=0 (2)do迴圈j=10 , i=4 判斷i<10為真 (3)do迴圈j=20 , i=8 判斷i<10為真 (4)do迴圈j=30 , i=12 判斷i<10為假 (5)離開do迴圈 i=100

if-else 【說明】 [流程圖] [流程圖] (1)if{ }else{ } (2)省略else if (運算式) if (運算式) 式是否為真,若運式為真 ,則執行敘述A,執行完 敘述A後,繼續執行敘述 C。若運算式不為真,則 執行敘述B,執行完敘述 B後,再執行敘述C。 (2)if { }:判斷運算式是否 為真,若運算式為真,則 執行敘述A,執行完敘述 A後,則執行敘述C。若 運算式不為真,則跳過敘 述A,執行敘述C。 (3)如{ }內,只有一個敘述 ,可以省略大括弧。 (4)多層迴路與for( ) 規則相同。 (5)迴圈不可交叉。 (1)if{ }else{ } (2)省略else if (運算式) if (運算式) { 敘述A;} { 敘述A;} else 敘述C; { 敘述B;} 敘述C; [流程圖] [流程圖]

應用例 [程式] char i , j; j=0; i=0; if(i>5){j=j+10;} else {j=j+1; } [執行順序] (1)j=0 , i=0 (2)i=33, j=1

switch _ case [流程圖] [指令格式] switch (變數) { case 條件1:敘述1; break; . case 條件N:敘述N; break; default:敘述N+1;break; break; } 敘述A; 【說明】 (1)C語言程式會將 “ 變數 ” 與 “ 條件1” 到“ 條件N” 比較。 若相等,則執行該 “ 條件 ” 的敘述,否則執行default的敘述。 (2)switch的變數,只能是整數或字元。 (3)default 敘述,可有可無。

應用例 [程式] char c , k; c=10; switch (c) { case 2:k=20; break; default:k=255; break; } c=88; [執行順序] (1)c=10,與case 10 相同,所以, k=100,離開switch ─ case迴圈, 繼續往下執行。 (2)c=88 [break指令的用法] 1.在switch-case指令中,扮演中斷case 敘述判斷的功能。 2.可以跳離任何迴圈-for , if –else , while , do-while。 [例] char i=0; for (; ;) { i=i+1; if (i= =10) { break;} } 如果i=10,則 跳離for

Goto指令 指令格式: goto lebel; Example: char h, a=10; test1: a=a+10; if (a<100) goto test1; h=3;

陣列 [1]陣列是一種結構化的資料型態。 [2]它將許多相同型態的變數集合起來, 以一 個名稱來代表。 [3]用陣列的索引值來代表陣列不同的變 數資料。

陣列的宣告 (1)有初始值的陣列宣告 資料型態 變數名稱[長度]={資料1,資料2,……} 註:長度可以省略。 【例】int total[3]={00,03,05} ; 代表 total[0]=0 total[1]=3 total[2]=5 【例】char iso[ ]={1, 2, 5, 10, 16} ; 代表 iso [0]=1 iso [1]=2 iso [2]=5 iso [3]=10 iso [4]=16 (3)無初始值陣列宣告 資料型態 變數名稱 [長度] ; 【例】char money [5] ; 【解】 [1]陣列有5個變數─ money[0] , money[1] , money[2] , money[3] , money[4] [2]它們的資料型態為字元 (char)。

(3)多重陣列 (a)不含初始值 (b)含有初始值 資料型態 變數名稱 [m] [n] … 資料型態 變數名稱 [m] [n]… 【例】char money [3] [2]; 陣列money共有3×2=6個變數, 6個變數如下: money [0] [0] money [0] [1] money [1] [0] money [1] [1] money [2] [0] money [2] [1] (b)含有初始值 資料型態 變數名稱 [m] [n]…   ={資料1,資料2,…… }; 【例】char car[2] [2]={1,2,3,4};【說明】 car [0] [0]=1 car [0] [1]=2 car [1] [0]=3 car [1] [1]=4

指標 (pointer) [1]指標是一個變數。 [2]它的內容是指向另一個變數的所在位址。 [3]它的作用就如同組合語言的間接定址法。 [4]在C語言中,如果有一個變數的內容 是另一個變數的位址,那麼就稱為該 變數為另一個 變數的指標變數。

指標運算子 ─ & 和 * 指標變數的宣告 [1]指標運算子 & : 如果放在變數之前,代 變數型態 * 變數名稱 【例】char * ip [1]指標運算子 & : 如果放在變數之前,代 表取得儲存該變數的記憶體位址。 [2]指標運算子* : 如果將它置於一個 指標變數前面,則代表取得該指標 變數所指向的變數內容。 【例】如果變數i被儲存在記憶體1000的位址內 char * ip; ip =&i; 則 ip=1000 例】char i=10 , temp; char *ip; /* 宣告ip為指標變數 */ ip=& i; /* ip指向變數i的位址*/ temp=*ip;/* temp取得ip所指向的變數的內容, 即i的內容。所以 temp=i=10 */  變數型態 * 變數名稱 【例】char * ip 【說明】ip為指標變數, 其所指向的位址 內容的資料型態 為字元 (char)。 【例】int * kk; 【說明】kk為指標變數, 為整數。

指標變數與陣列的關係(一) 陣列變數實際上就是一個指標。 [例] *採用索引的方式取得資料 i=ytr[3];即i=2。 int ytr [4]={5, 4, 3, 2}; ytr就是一個指標,它指到儲存這個整數陣列中的第一個元素 ( 即5) 的位址 *採用索引的方式取得資料 i=ytr[3];即i=2。 *建立了陣列與指標的關係 int ytr[5], i, *ip; ip=&yrr[0]; 【註】yrr前面不可以有&運算子。   P1=*ip ; 與 P2=yrr[0]==>P1=P2=5

指標變數與陣列的關係(二) char TAB[5]; int datal [5]; char ptr; char *ptr; ptr=&TAB[0]; char TAB [ ]={1,4,5,7,9}; char *ptr; ptr = &TAB[0]; int datal [5]; char *ptr; ptr=& datal [0];

結構 (structure) [1]結構定義 [1]結構的資料型態與陣列的資料型態相似,都是將多個變數收 集在同一個變數名稱下的集合。 [2]結構與陣列最大的不同點是 ─ 陣列中,每一個變數 ( 元素 ) 的資料型態都必須相同;而結構中的每一個變數,都可以擁 有不同的資料型態。 [1]結構定義

[3]結構的使用 [2]結構變數的宣告 typedef struct people { char child; char adult; char man; char women; int total; }; struct people china; /* 宣告china變數資料型態為結構people */ china‧child= 1; /* 令china變數內的元素child=1 */ china‧women=10; /* 令china 變數內的元素women=10 */ [2]結構變數的宣告 struct 結構變數名稱 變數名稱; 【例】struct student a1; 【說明】宣告a1為 student 資料結 束變數。

列舉 (enum) 指令格式1 :不設定初始值 [1]列舉 (enum) 是一種資料型態的定義。 [2]代表一群符號常數的定義的集合。 [3]當列舉被宣告後,列舉中的符號常數就 依序 ( 由左 而右 ) 給序0 , 1 , 2 ,… , n的整數值。 指令格式1 :不設定初始值 enum 變數名稱 {符號常數0,符號常數1,符號常數2,…}; 【例】enum colors {blue, red, green}; 【說明】經上述對列舉宣告後,blue=0 , red=1 , green=2

eunm 變數名稱 {符號常數1=xx , 符號常數2=yy, …… } 指令格式2 設定初始值 eunm 變數名稱 {符號常數1=xx , 符號常數2=yy, …… } xx, yy:整數 【例】enum today {hot=5 , rainny=10 , warm=20 , sunny=18}; 【說明】宣告列舉資料型態today,並設定符號常數初始 值如下:hot=5, rainny=10, warm=20, sunny=18 指令格式3 設定第一個符號常數初始值 enum 變數名稱{符號常數1=xx,符號常數2,符號常數3,……}; xx:表整數 符號常數2=xx+1, 符號常數3 =xx+2, 依此類推 【例】enum var {red=5 , green , blue , yan}; 【說明】red=5 , green=6 , blue=7 , yan=8

等 位 (union) 指令格式 union {成員1,成員2,……}; [1]等位的功用在於節省記憶體的使用 [2]等位內的成員佔有相同一塊的記憶體。 [3]等位所佔的記憶體為成員內元素的最大長度。 [4]每個等位變數只能同時儲存,其中一個變數的值 指令格式  union {成員1,成員2,……}; 【例】union {char i, char j, int k, char l}; 則變數 , i , j , k , l ,儲存在相同記憶體位址內,其最大長度為2 byte (int)。 [應用範例] union {char money, int total}; money=100;/* 設定money=100 */ total=10000;/* 設定total=10000, 同時money的內容己被改變,不再是100 */

PSOC 一般I/O代號 PRT0DR8 bits8051之 P0 PRT1DR8 bits8051之P1 Example :output PRT0DR=0x36; // P0=00110110 Example :input unsigned char hh; hh=PRT0DR; // hh=P0之值

編譯選單選項