PowerPoint 演示文稿

Size: px
Start display at page:

Download "PowerPoint 演示文稿"

Transcription

1 STC 单片机 C 语言函数 主讲 : 何宾 hebin@mail.buct.edu.cn

2 在标准 C 语言中, 定义函数的格式如下 : 函数返回类型函数名字 ( 数据类型形参 1, 数据类型形参 2,..., 数 据类型形参 N) { } 局部变量定义 ; 表达式语句 ; 函数定义和声明 -- 标准 C 函数定义和声明

3 函数定义和声明 -- 标准 C 函数定义和声明 其中 : () 内为函数入口参数列表, 每个参数之间用, 分割 对于参数列表中的每个参数, 需要声明其数据类型 在单片机中, 使用给出的 ANSI C 形参列表描述方法 函数返回类型为调用函数后, 函数所返回值的数据类型 当函数不返回值时, 函数类型用 void 表示 注 : 如果没有指定函数的返回类型, 默认为 int 型

4 这里的标准 C 函数定义, 包含函数定义, 及定义了函数的名字 函数的入口参数, 以及函数所需要实现的功能 而函数声明用于告诉存在函数定义 更准确的说, 当出现下面 的情况时, 需要函数声明 : 函数定义和声明 -- 标准 C 函数定义和声明 程序员把函数定义写在了 main() 主函数后面时, 需要在 main() 主 函数的外面声明所使用的函数 注 : 当吧函数定义写在 main() 主函数前面时, 只需要函数定义, 因为在这种情况下, 函数定义隐含实现了函数声明的功能

5 当在当前的设计文件中, 使用到其它源文件中所定义的函数, 而 用不能通过 #include 包含命令说明 函数声明的格式如下 : 函数类型函数名字 ( 数据类型形参 1, 数据类型形参 2,..., 数据类型 形参 N); 函数定义和声明 -- 标准 C 函数定义和声明 与函数定义不同的是, 函数声明仅仅说明函数类型 函数名字和 函数参数列表, 注意后面需要使用, 说明函数声明的结束 函 数声明仅仅是用来说明在当前设计文件中, 所要使用到的函数 函数的定义是要说明函数所要实现功能

6 例 14-1 带有返回值函数定义的例子 int max(int x,int y) { if(x>y) return x; else return y; } 函数定义和声明 -- 标准 C 函数定义和声明

7 函数定义和声明 -- 标准 C 函数定义和声明 其中 : 函数名字为 max max 前面的 int 用于该函数的返回值类型为整型 该函数入口参数列表中, 有两个 int 型变量, 分别是 x 和 y, 它们用, 分割 该函数有返回参数, 当有返回参数时, 使用 C 语言中的关键字 return 说明,return 后面为返回的数 在该函数中, 1 当 x 大于 y 的时候, 将 x 作为 max 函数的返回值 ; 2 当 x 小于等于 y 的时候, 将 y 作为 max 函数的返回值 注 : 如果声明所要使用的函数时, 格式为 : int max(int x,int y);

8 例 14-2 无返回值函数定义的例子 void max(int x,int y) { if(x>y) printf("%d > %d\n",x,y); else printf("%d < %d\n",x,y); } 函数定义和声明 -- 标准 C 函数定义和声明

9 该例子与前一个例子的不同之处在于 : max 前面的 void 表示该函数没有返回值 因为在该函数中没有返回值, 因此并没有使用 C 语言关健字 return 该函数实现的功能是通过 printf 函数打印得到的最大值信息, 而 没有提供返回值信息 函数定义和声明 -- 标准 C 函数定义和声明

10 在 C51 编译器中, 提供了对标准 C 函数定义和声明的扩展 扩展包括 : 可以将函数声明为一个中断服务程序 ISR; 可以选择所使用的寄存器组 可以选择存储器模型 可以声明一个可重入函数 可以声明特性 (alien) 函数 函数定义和声明 -- 扩展 C 函数定义和声明 C51 编译器所支持的函数定义格式为 :

11 函数返回类型函数名字 ( 参数列表 ) { 存储模型 } {reentrant} {interrupt n} {using y} { } 局部变量定义 ; 表达式语句 ; 函数返回类型用于说明从函数返回值的类型 如果在函数定义 / 声明时没有定义函数返回类型, 则默认为 int 型 {} 内的内容为可选项 函数定义和声明 -- 扩展 C 函数定义和声明 () 内为参数列表, 参数列表给出了函数的入口参数 列表中的每个参数, 使用, 进行分割 每个参数通过参数数据类型和参数名字进行说明

12 存储模型为可选项, 在该可选项中可以通过使用关键字 small large 或者 compact, 使用小的 大的或者压缩的存储模型 在 small 模式下, 函数参数和局部变量位于单片机片内数据 RAM 中 ; 在 compact 和 large 模式下, 函数参数和局部变量位于单片机的扩展数据 RAM 中 interrupt 关键字用于显式声明该函数用于中断服务程序 ISR 后 面的 n 为中断号 using 关键用于说明要使用的通用寄存器组的编号,y 的取值为 0, 1,2 或者 3 函数定义和声明 -- 扩展 C 函数定义和声明

13 当使用标准的 C 函数定义和声明时, 函数的参数和本地变量所保存 的存储空间由 Option 对话框界面内 Targer 标签界面内 Memory Model 右侧下拉框内所选择的选项确定 也可以使用编译器命令声 明, 声明格式为 : 函数定义和声明 -- 存储器模型 #pragma small // 将存储器模型默认设置为 small 模型前 面已经提到, 在声明函数的时候可以使用 small large 或者 compact 说明函数中参数和本地变量所使用的存储空间

14 例 14-3 包含存储器模型函数声明的例子 extern int calc(char i,int b) large; extern int func(int I, float f) large; extern void *tcp(char xdata *xp, int ndx) compact; 例 14-4 包含存储器模型函数定义的例子 int large_func(int i,int j) large 函数定义和声明 -- 存储器模型 { } return(i*j);

15 在前面已经介绍过当定义函数的时候, 根据是否带有返回值, 将函 数分为带有返回值的函数和不带有返回值的函数 不带有返回值的函数调用格式为 : 被调用的函数名字 ( 实际参数 1, 实际参数 2,... 实际参数 N); 带有返回值的函数调用格式为 : N); 其中 : 函数调用原理 -- 函数调用格式 变量 = 被调用的函数名字 ( 实际参数 1, 实际参数 2,... 实际参数

16 在被调用函数实际入口参数列表中, 各个参数之间用, 分割 当调用函数时, 传递给被调用函数实际参数的类型必须与定义 / 声 明函数时所使用参数的类型对应, 参数的位置也需要一一对应 在 C 语言中, 将定义 / 声明函数时给出的参数成为形式化参数, 简 称形参 ; 而把调用函数时, 所给出形参具体的取值成为实际参数, 简称实参 因此, 可以这样理解, 实参就是形参的一个具体取值 而已 函数调用原理 -- 函数调用格式

17 例 14-5 调用带有返回值函数的例子 d=max(a,b); 例 14-6 调用不带有返回值函数的例子 max(a,b); 函数调用原理 -- 函数调用格式

18 函数调用原理 -- 参数和堆栈 在传统的 8051 内的堆栈只访问内部数据存储器 C51 编译器确定堆栈区域的位置 堆栈指针以间接的方式访问内部存储器, 可以使用全部的内部数据存储器, 直到 0xFF 的最大内部数据存储器地址 传统 8051 的所有堆栈空间限制在 256 个字节范围内 C51 编译器为每个函数参数分配一个固定的存储器位置 当调用一个函数时, 在把控制权交给所希望的函数之前, 调用程序将参数复制到已经分配的存储位置 然后, 被调用的函数从固定的存储位置提取它的参数 在这个调用过程中, 只有返回地址被保存在堆栈中 对于中断程序来说, 它要求更多的堆栈空间, 这是因为需要切换寄存器组以及在堆栈中保存少量寄存器的值 默认,C51 编译器使用寄存器传递最多三个函数参数 因此, 改善了程序执行的速度

19 函数调用原理 -- 参数和寄存器 在前面一节已经说明,C51 可以通过 8051 内的寄存器传递最多三个 函数参数 由于参数没有被写到存储器, 因此就不需要从存储器中 读取参数, 所以明显的提高了系统的性能 可以通过 REGPARMS 和 NOREGPARMS 命令控制传递参数的个数 参数的位置 char 1 个字节的 ptr int 2 个字节的 ptr long float 通用指针 1 R7 R6&R7 R4-R7 R1-R3 2 R5 R4&R5 R4-R7 R1-R3 3 R3 R2&R3 -- R1-R3

20 函数调用原理 -- 参数和寄存器 注 : 如果函数的第一个参数是 bit 类型, 则不能使用寄存器传输其它参数参数 这是因为超出了用寄存器传递参数的顺序要求 由于这个原因, 因此在 bit 类型的参数应该作为参数列表中的最后一个参数 如果没有可用的寄存器用于传输参数, 则固定的存储器位置用于传递函数参数

21 在 C51 编译器中, 总是使用 8051 单片机内的寄存器来保存返回值 返回值类型和所用的寄存器 函数调用原理 -- 返回值 返回类型寄存器保存格式 bit 进位标志 C -- char,unsigned char, 一字节指针 R7 -- int,unsigned int, 两字节指针 long,unsigned long R6~R7 R4-R7 高字节在 R6 寄存器中, 低字节在 R7 寄存器中 高字节在 R4 寄存器中, 低字节在 R7 寄存器中 float R4-R7 32 位 IEEE 格式 通用指针 R1-R3 R3 为存储器类型, 偏置的高字节在寄存器 R2 中, 偏置的低字节在寄存器 R1 中

22 函数调用实现分析 本节将通过一个实例分析函数调用的过程, 以便使读者能更深刻理解函数定义 函数声明和函数调用的原理 例 14-7 实现简单函数调用的设计实例 代码清单 14-1 main.c 文件 #include "stdio.h" #include "reg51.h" int max(int a, int b) // 定义一个函数 max, 该函数返回值为 int 型 { // 该函数有两个入口参数 ( 形参 )a 和 b if(a>b) // 如果形参 a 的值大于 b 的值, return a; // 则将 a 作为函数返回值

23 函数调用实现分析 else return b; } main() { int i,j,k; SCON= 0x52; TMOD = 0x20; TCON = 0x69; TH1 = 0xF3; // 如果形参 a 的值小于等于 b 的值 // 则将 b 作为函数返回值 // 声明整型变量 i,j,k // 初始化串口

24 函数调用实现分析 scanf("%d %d",&i,&j); // 输入两个整型变量的值, 用空格隔开 k=max(i,j); // 调用 max 函数, 将实参 i 和 j 带入到形参中, 返回结果保存在 k 中 printf("max value is %d\n",k); // 打印 k 的值 while(1); }

25 函数调用实现分析 读者可以进入到本书所提供资料的 stc_program_example\ 例子 14-7 目录下, 在 Keil μvision5 集成开发环境下打开该设计 运行和分析该设计的步骤主要包括 : 打开 main.c 文件, 设置断点

26 函数调用实现分析 在 μvision 集成开发环境主界面主菜单下, 选择 Debug- >Start/Stop Debug Session, 进入调试器模式, 如图 14.2 所示 1 在该界面中, 可以看到在 Disassembly 窗口中, 给出了每条 C 语言指令, 所对应的汇编语言 注 : 如果没有出现这个窗口, 则在调试模式主界面主菜单下, 选择 View- >Disassembly Window 选项, 打开 Disassembly 窗口 2 从图中可以看到, 程序停在 main() 主程序的入口, 表示该 C 语言 main 主程序入口点位于 STC 单片机程序存储器 Flash 空间地址为 0x0788 的位置

27 函数调用实现分析 在当前调试模式主界面下, 选择 View->Serial Windows->UART #1, 打开串口界面 按 F5 按键运行程序, 运行到设置在 17 行代码的断点位置 运行 scanf 语句后, 表示要输入整型变量 i 和 j 的值 注 : 单片机的 scanf 语句和标准 C 语言的 scanf 语句用法不同 PC 或者笔记本上的 C 语言中所使用的 scanf 语句是从键盘上输入变量的值 ; 而单片机的 scanf 语句是从串口终端界面输入变量的值 在当前调试主界面右下侧的窗口内, 输入两个数 2 和 100 然后, 按回车键 注 : 在两个数之间只允许存在空格键

28 函数调用实现分析 程序自动停到了第 18 行的断点处

29 函数调用实现分析

30 函数调用实现分析 在当前调试模式主界面右下方的 Memory 窗口中, 在 Address 标题右侧的文本框中输入 &I 可以看到下面显示 D:0x22, 表示整型变量 i 保存在单片机片内基本数据 RAM 地址为 0x22 和 0x23 的位置, 占用两个字节 ; 右侧显示 00 02, 表示整型变量当前的取值为 0x0002

31 函数调用实现分析 注 : 如果没有出现 Memory 窗口, 则在当前调试器模式主界面主菜单下, 选择 View->Memory Windows->Memory1, 打开 Memory 窗口 &i 表示得到变量 i 所在的存储器的空间及地址信息 在当前调试模式主界面右下方的 Memory 窗口中, 在 Address 标 题右侧的文本框中输入 &j, 如图 14.5 所示 可以看到下面显示 D:0x24, 表示整型变量 j 保存在单片机内基本数据 RAM 地址为 0x24 和 0x25 的位置, 占用两个字节 ; 右侧显示 00 64, 表示整型 变量 j 当前的取值为 0x0064 注 :&j 表示得到变量 j 所在的存储器的空间及地址信息

32 函数调用实现分析

33 函数调用实现分析 此时, 在 Disassembly 窗口中可以看到, 子函数 max 的程序入口点 / 入口地址位于 STC 单片机程序存储器 0x07AF 的位置 下面给出 Disassembly 窗口中, 由 C 程序代码 k=max(i,j) 所生成对应的反汇编代码 代码清单 14-2 k=max(i,j) 的反汇编代码 18: k=max(i,j); C:0x07AF AD25 MOV R5,0x25 C:0x07B1 AC24 MOV R4,0x24 C:0x07B3 AF23 MOV R7,0x23 C:0x07B5 AE22 MOV R6,0x22 C:0x07B LCALL max(c:0807)

34 函数调用实现分析 由于被调用函数 max 共有两个实参, 根据表 14.1 给出的寄存器分配规则, 将单片机片内基本数据 RAM 地址为 0x24 和 0x25 的内容 ( 保存参数 j) 传递给寄存器 R4 和 R5 将单片机片内基本数据 RAM 地址为 0x22 和 0x23 的内容 ( 保存参数 i) 传递给寄存器 R6 和 R7 当把形参保存到寄存器后, 通用 LCALL 指令调用位于单片机程序存储器地址为 0x0807 的 max 函数程序入口点 / 入口地址 观察 Registers 窗口中, 此时 sp 的值为 0x3f 注 :sp 为堆栈指针, 表示指向当前 8051 片内数据基本 RAM 地址为 0x3f 的位置

35 函数调用实现分析 单步运行程序, 进入到被调用函数 max 内部 1 下面给出在 Disassembly 窗口中给出所调用函数 max 的反汇编代码 代码清单 14-3 max 函数的反汇编代码 3: int max(int a, int b) 4: { 5: if(a>b) C:0x0807 D3 SETB C C:0x0808 EF MOV A,R7 C:0x0809 9D SUBB A,R5 C:0x080A EC MOV A,R4 C:0x080B 6480 XRL A,#P0(0x80)

36 函数调用实现分析 C:0x080D F8 MOV R0,A C:0x080E EE MOV A,R6 C:0x080F 6480 XRL A,#P0(0x80) C:0x SUBB A,R0 C:0x JC C:0815 6: return a; 7: else C:0x RET 8: return b; C:0x0815 AE04 MOV R6,0x04 C:0x0817 AF05 MOV R7,0x05 9: }

37 函数调用实现分析 观察 Registers 窗口中, 堆栈指针 sp 的值由 0x3f 变为 0x41, 递增了 2, 说明执行了入栈操作 注 :sp 为堆栈指针, 表示指向当前 8051 片内数据基本 RAM 地址为 0x41 的位置 在 Memory 窗口中, Address: 标题右侧的文本框中, 输入 d:0x3f, 如图 14.6 所示 从图中可以看出, 因为将 0x07BA 保存到堆栈中, 所以堆栈指针的值递增了 2 根据前面的知识, 知道这是将程序计数器 PC 的值保存在这里

38 函数调用实现分析 在 Disassembly 窗口中, 查看在程序存储器地址为 0x07BA 的地址

39 函数调用实现分析 从图中可以看出, 该地址正是 C 语言中所调用函数 max 下面 printf 语句的入口点 / 入口地址, 也就表示当调用 max 结束后, 将要执行 printf 语句 从上面的反汇编代码中, 可以看到 max 函数的程序入口点 / 入口地址, 即在单片机程序存储器地址为 0x0807 的位置 将鼠标光标放到第 3 行代码 int a 的字母 a 上, 出现浮动提示框 该提示框内的信息表示形参 a 位于单片机片内基本数据 RAM 地址为 0x06 的位置, 它的值为 0x0002, 这说明输入变量 i 的值作为实参传递给了函数形参 a, 并在单片机基本数据 RAM 存储空间内给形参 a 另外分配了一个存储空间

40 函数调用实现分析 将鼠标光标放到第 3 行代码 int b 的字母 b 上, 出现浮动提示框 该提示框内的信息表示形参 b 位于单片机片内基本数据 RAM 地址为 0x04 的位置, 它的值为 0x0064, 这说明输入变量 j 的值作为实参传递给了函数形参 b, 并在单片机基本数据 RAM 存储空间内给形参 b 另外分配一个存储空间

41 函数调用实现分析 分析前面的反汇编代码, 可以知道在实现 max 函数的功能时, 实际调用保存在 R4 和 R5 寄存器内的参数 j, 以及保存在 R6 和 R7 寄存器内的参数 i, 进行减法运算, 以判断在参数 i 和参数 j 中, 到底哪个参数值大 根据表 14.2 给出的返回值的寄存器分配原则, 当返回值为 int 型时, 参数保存在 R6 和 R7 中 当 i>j 的时候, 将保存在 R6 和 R7 寄存器内的值, 即 i 的值作为 max 函数的返回值 ; 否则将形参 b 的值 ( 由实参 j 得到, 保存在单片机内部基本数据 RAM 地址为 0x04 和 0x05 的内容 ) 传给寄存器 R6 和 R7

42 函数调用实现分析 继续运行程序, 断点停到了第 8 行 说明条件判断 a>b 不成立, 即 a b 成立, 将 b 的值作为函数 max 的返回值, 如图 所示 注 : 将保存在单片机内部基本数据 RAM 地址为 0x04 和 0x05 的内容传递给 R6 和 R7 作为 max 函数的返回值 断点运行到第 19 行停下来 观察 Registers 窗口中, 此时 sp 的值由 0x41 重新变为 0x3f, sp 的值递减了 2, 说明执行了出栈操作 根据出栈的原理, 将堆栈 0x41 和 0x40 的内容恢复到了程序计数器中 注 :sp 为堆栈指针, 表示指向当前 8051 片内数据基本 RAM 地址为 0x3f 的位置

43 函数调用实现分析 观察 Register 窗口中,PC 此时的值为 0x07BA, 说明确实从堆栈中恢复了程序计数器的值 从这个过程也可以知道程序计数器的真正含义 在 Memory 窗口中, 在 Address: 右侧的文本框中, 输入 d:0x3f 内容和前面一样

44 函数调用实现分析 小提示 : 在出栈和入栈的过程, 你彻底知道了堆栈的作用, 堆栈是一种特殊的数据结构 按 F5 按键几次, 继续运行程序, 直到运行到第 20 行为止, 观察 UART #1 窗口内打印出来的信息

45 函数变量的存储方式 前面已经介绍过, 在 C 语言中, 提供了多种变量的存储方式 按照变量的作用范围分为局部变量和全局变量 按照变量的存储方式, 可以分为 : 自动变量 (auto) 外部变量 (extern) 静态变量 (static) 寄存器变量 (register) 当不同存储类型的变量用在函数中, 一方面增加了 C 语言访问变量的灵活性, 但另一方面也增加了难度, 这就要求准确掌握这些存储方式 下面将详细说明在函数中使用不同存储类型变量的方法

46 函数变量的存储方式 自动变量 当声明变量时, 如果没有指定变量的存储类型, 则将变量的存储类型默认为 auto 在 C 语言中, 这是一类用的最广泛的变量 其特点表现在以下 : 自动变量的作用范围在定义它的函数体或者复合语句的内部 只有当调用定义自动变量的函数时, 或者执行定义自动变量的复合语句时, 编译器才会在单片机内的数据存储 RAM 内为自动变量分配存储空间 当函数调用结束或者执行完复合语句后, 将释放为自动变量所分配的存储空间, 因此自动变量的值因此也就不再存在, 也就是不会保留当前的运行结果

47 函数变量的存储方式 当再次调用函数或者执行复合语句时, 会在单片机内的数据存储 RAM 内为自动变量重新分配存储空间, 而且重新给自动赋值 根据自动变量的这些特点, 我们经常将自动变量称为局部变量 典型地, 在前一节中, 调用函数 max 使用的两个变量 i 和 j 就是自动变量, 它们完全遵循自动变量的特点

48 函数变量的存储方式 外部变量使用存储类型说明符 extern 定义的变量称为外部变量 其特点表现在以下 : 默认地, 凡是在所有函数之前, 在函数外部定义的变量都是外部变量, 定义时可以不写 extern 说明符 如果在一个函数体内说明一个已经在函数体外或者别的程序模块文件中定义过的外部变量时, 则必须使用 extern 说明符

49 函数变量的存储方式 一旦定义了外部变量, 必须在单片内的数据存储 RAM 内为外部变量分配固定的存储空间 并且, 在程序运行的整个过程中, 外部变量均有效, 并且保存外部变量值的变化过程 函数可以互相调用, 因此函数都具有外部存储种类的属性 定义函数时如果用关键字 extern, 则将该函数明确定义为一个外部函数 如果定义函数时, 省略了关键字 extern, 则隐含为外部函数 如果要调用当前程序模块文件以外的其他模块文件所定义的函数, 则必须用关键字 extern 说明被调用的函数是来自其它文件的一个外部函数

50 函数变量的存储方式 静态变量静态变量主要分为两类 : 局部静态变量局部静态变量是指定义在函数的内部, 使用 static 关键字声明的变量 特点包括 : 不像自动变量那样只有在函数调用它的时候才存在, 退出函数之后它就消失, 局部静态变量始终存在, 但是只能在定义它的函数内部进行访问, 退出函数值之后, 静态变量以前的值仍然被保留, 但是不能访问它 也就是说, 定义为 static 的变量, 一直保存着以前的运行结

51 函数变量的存储方式 全局静态变量 当在函数外部定义变量时, 这样的变量称为全局静态变量 特点包括 : 作用范围从它的定义点开始, 一直到程序结束 当一个 C 语言文件由若干模块文件构成时, 全局静态变量始终存在, 但它只能在被定义的文件中访问, 其数据值可以为该文件内的所有函数共享, 退出该文件后, 虽然变量值仍然保留, 但是不能被其他模块文件访问 从前面的分析可以看出, 局部静态变量是一种在两次函数调用之间仍能保留其值的局部变量 有些程序需要在多次调用之后仍然保持变量的值, 使用自动变量就无法实现这个功能, 但是如果使用全局变量又会带来副作用, 这时就可以使用局部静态变量 从程序员的角度来说, 使用静态局部变量比使用全局静态变量容易控制一些, 这是因为全局静态变量的作用范围要比局部静态变量的范围要大的多

52 函数变量的存储方式 寄存器变量为了提高程序执行的效率, 在 C 语言中将一些使用频率很高的变量定义为能够直接使用硬件寄存器的所谓寄存器变量 在定义变量时, 在前面用 register 说明符, 表示该变量是寄存器类型的 寄存器变量是自动变量的一种, 它的有效范围同自动变量一样 例 14-8 不同存储模式变量的例子

53 函数变量的存储方式 代码清单 14-2 main.c 文件 int i=0; // 定义全局静态整型变量 i int cal(int x) // 定义子函数 cal, 带有自动整型变量 x { static int y=0; // 定义静态整型变量 y y=x-y-i; return y; }

54 函数变量的存储方式 void main() { int j=1000; // 定义整型局部变量 j, 初值为 1000 int k; // 定义整型局部变量 k i=cal(j); // 第一次调用函数 cal, 返回值给全局变量 i i=cal(j); // 第二次调用函数 cal, 返回值给全局变量 i i=cal(j); // 第三次调用函数 cal, 返回值给全局变量 i }

55 函数变量的存储方式 读者可以进入到本书所提供资料的 stc_program_example\ 例子 14-8 目录下, 在 Keil μvision5 集成开发环境下打开该设计, 并进入调试器模式, 按断点运行程序 分析程序的执行过程的步骤主要包括 :

56 函数变量的存储方式 当执行第 14 行代码时, 也就是第一次调用函数 cal 时 : j 的值为 1000, 作为实参传递给 cal 函数的形参 x, y 的初值为 0,i 的初值为 0 当执行完 y=x-y-i 后,y 的值为 1000 由于 y 是局部静态变量, 在执行完 cal 后, 仍然保持该值为 1000, 即使 y 的初值设置为 0 在下次调用 cal 函数时, 是用 1000 作为 y 的值, 而不是用 0 作为 y 的值 在执行完子函数 cal 后, 返回值赋值给 i 由于 i 是全局变量, 所以 i 的值此后变成 1000

57 函数变量的存储方式 当执行第 15 行代码时, 也就是第二次调用函数 cal 时 : j 的值仍然为 1000, 作为实参传递给 cal 函数的形参 x,y 的值为 1000,i 的值为 1000 当执行完 y=x-y-i 后,y 的值变成 由于 y 是局部静态变量, 在执行完 cal 后, 仍然保持该值为 在下次调用 cal 函数时, 用 作为 y 的值 在执行完子函数 cal 后, 返回值赋值给 i 由于 i 是全局变量, 所以 i 的值此后变成 -1000

58 函数变量的存储方式 当执行第 16 行代码时, 也就是第三次调用函数 cal 时 : j 的值仍然为 1000, 作为实参传递给 cal 函数的形参 x,y 的值为 -1000,i 的值为 当执行完 y=x-y-i 后,y 的值变成 3000 由于 y 是局部静态变量, 在执行完 cal 后, 仍然保持该值为 3000 在执行完子函数 cal 后, 返回值赋值给 i 由于 i 是全局变量, 所以 i 的值此后变成 3000 执行完该程序, 退出调试器界面, 并关闭该设计

59 数组类型传递参数 在 C 语言中, 数组元素可以作为函数实参传递参数, 其用法和变量相同 此外数组名也可以作为实参和形参, 此时传递的是元素的首地址 下面通过一个例子, 详细说明数组作为函数参数的传递过程 例 14-9 数组名字传递参数的例子在该程序中, 调用子函数实现对数组元素的升序排列 注 : 在设计前, 请查阅资料, 描述升序排列的原理和实现方法

60 数组类型传递参数 代码清单 14-3 main.c 文件 #include "stdio.h" #include "reg51.h" void sort(int array[],int n) { int i,j,k,t; // 声明排序子函数, 不返回值

61 数组类型传递参数 for(i=0;i<n-1;i++) { k=i; for(j=k+1;j<n;j++) if(array[j]<array[k]) k=j; t=array[k]; array[k]=array[i]; array[i]=t; } } // 二重循环排序

62 数组类型传递参数 void main() { int a[10],i; SCON= 0x52; TMOD = 0x20; TCON = 0x69; TH1 = 0xF3; printf("please enter the value of a[10]\n"); for(i=0;i<10;i++) scanf("%d,",&a[i]);

63 数组类型传递参数 printf("\n sorted array is\n"); sort(a,10); for(i=0;i<10;i++) printf("a[%d]=%d,",i,a[i]); while(1); // 调用排序函数, 数组名传递 // 打印排序后的结果 }

64 数组类型传递参数 读者可以进入到本书所提供资料的 stc_program_example\ 例子 14-9 目录下, 在 Keil μvision5 集成开发环境下打开该设计, 并进入调试器模式 按下面步骤运行和分析数组类型传递参数的过程 : 在代码的第 4 行 第 7 行 第 17 行和第 30 行分别设置断点 按 F5 按键, 运行程序 打开 UART #1 窗口 在该窗口界面内, 出现提示信息 please enter the value of a[10], 然后, 在该窗口内输入 10 个数据, 每个数据之间用, 隔开

65 数组类型传递参数 打开 Watch 1 窗口, 执行下面的操作 : 输入 a, 如图 所示 从该图可以看到数组 a 存放在单片机内部数据区地址为 0x22 的起始位置 在 Memory 1 窗口中, 输入 d:0x22, 可以看到所保存数组 a 的数据元素信息 按 F5 按键, 继续运行程序, 程序停到了第 4 行代码的位置 从图中可以看到 sort 子函数的入口在单片机程序 Flash 存储空间的 0x07ED 的位置

66 数组类型传递参数

67 数组类型传递参数 按 F5 按键, 继续运行程序, 程序停到了第 7 行代码的位置 在 Watch 1 窗口中, 输入 array 从图中可以看到形参数组 array 在单片机片内数据区 0x22 的起始 地址

68 数组类型传递参数 注 : 也就是说, 在使用数组作为函数参数实现参数传递的过程, 并不象采用简单变量传递参数那样将实参的值传递给了形参 本质上, 形参 array 指向了实参数组 a 的首地址, 也就是实参和形参指向了相同的数据区 由于指向了相同的数据区, 因此当形参指向的存储空间的内容发生变化时, 实参指向的存储空间的内容发生了同样的变化 在 Memory 1 窗口界面内, 输入 array

69 数组类型传递参数 按 F5 按键, 运行程序到第 17 行代码 此时, 再观察 Memory 1 窗口内的内容 读者会发现这个地址空间的内容发生了变化

70 数组类型传递参数 注 : 最好单步执行程序到第 17 行代码, 这样就可以清楚地看到 0x22 起始数据区内容的变化情况 按 F5 按键, 运行程序 由于数组 a 一直指向单片机片内地址为 0x22 的起始位置, 而由于子函数操作修改了单片机片内地址为 0x22 开始连续 20 个字节的内容 因此, 打印出来的数据, 就是修改后 0x22 地址开始的存储空间的内容

71 指针类型传递参数 当函数的参数是指针类型的变量时, 主调函数将实际参数的地址作为被调函数中形式参数的地址 因此, 指针类型传递参数也是通过地址传递 下面将通过一个例子来说明指针类型传递参数的过程 例 两个字符数组首尾连接的例子比如 : 字符串 a= STC, 字符串 b= Hello, 将两个字符串连接后的字符串 c= STC Hello 代码清单 14-4 main.c 文件 #include "stdio.h" #include "reg51.h" void con_string(char *s1, char *s2 ) { // 声明子函数, 有两个字符指针参数

72 指针类型传递参数 while(*s1!='\0') s1++; while(*s2!='\0') *s1++=*s2++; *s1='\0'; } // 如果指针 *s1 指向的字符不是结束, 则继续 // 指针递增 // 如果指针 *s2 指向的字符不是结束, 则继续 // 将指针 *s2 指向的内容赋值到 *s1 的末尾 // 在 *s1 当前指向的内容后添加结束标志 void main() {

73 指针类型传递参数 xdata char a[40],b[40]; // 在单片机 xdata 区域内声明字符数组 a 和 b SCON= 0x52; // 初始化串口 TMOD = 0x20; TCON = 0x69; TH1 = 0xF3; printf("please enter the string of a[40]\n"); // 提示输入字符串 a gets(a,40); // 输入字符串 a, 可以有空格, 回车键结束 printf("please enter the string of b[40]\n"); // 提示输入字符串 b gets(b,40);

74 指针类型传递参数 printf("\n connected the string is\n"); // 提示连接后的字符串信息 con_string(a,b); // 调用连接字符串函数 puts(a); // 打印字符串 a while(1); }

75 指针类型传递参数 读者可以进入到本书所提供资料的 stc_program_example\ 例子 目录下, 在 Keil μvision5 集成开发环境下打开该设计, 并进入调试器模式 按下面步骤运行和分析函数的运行过程 : 在代码的第 4 行 第 10 行 第 21 行和第 26 行分别设置断点 按 F5 按键, 运行程序 运行到第 21 行代码 在 Watch 1 窗口界面内, 输入 a 和 b, 看到相关信息 从图中可以看出, 数组 a 的起始地址位于单片机扩展数据 RAM 地址为 0x 的位置, 数组 b 的起始地址位于单片机扩展数据 RAM 地址为 0x 的位置 展开后其内部用二进制数 0 填充

76 指针类型传递参数 打开 UART #1 窗口 在该窗口界面内, 出现提示信息 please enter the string of a[40], 然后, 在下面一行输入字符串 STC, 然后按回车键 然后, 又出现提示信息 please enter the string of b[40], 在下面一行输入字符串 Hello, 按回车键

77 指针类型传递参数 按 F5 按键, 运行程序 程序运行到第 26 行 从 Disassembly 窗口可以看到该行代码在单片机片内程序 Flash 存储空间地址为 0x0551 的位置 在该行汇编结束的时候有 LCALL 调用 con_string(c:056e), 可以看到被调用函数的起始地址在单片机片内程序 Flash 存储空间地址为 0x0560 的位置

78 指针类型传递参数 按 F5 按键, 运行程序 断点停在第 4 行代码, 从 Disassembly 窗口中可以看到 con_string 子函数的起始地址位于单片机片内程序 Flash 存储空间地址为 0x574 的位置 单步运行一行代码 在 Watch 1 窗口界面内输入 s1 和 s2, 显示相关信息 图中,s1 地址为 x:0x000000,s2 地址为 x:0x 也就是 s1 指向数组 a,s2 指向数组 b

79 指针类型传递参数 注 : 此处说明, 在使用指针传递参数时, 不象使用简单变量传递参数那样将实参传递给形参并且另外开辟存储空间, 在使用指针传递参数时, 只不过是形参指针的地址分别指向实参数组 a 和数组 b 而已, 也就是说形参和实参指向了相同的数据空间 因此, 一旦形参指向数据空间的内容发生变化时, 实参的内容也发生同样的变化

80 指针类型传递参数 单步运行程序代码到第 10 行 注意观察地址为 x:0x 起始 位置的内容改变, 修改后的内容

81 指针类型传递参数 按 F5 按键运行程序 在 UART #1 窗口内打印出拼接后的字符串 STC Hello 信息

82 指向函数的指针 函数指针是 C 语言中的一个难点 函数指针是指向函数的指针变量 在前面介绍指针变量可以指向整数 字符 浮点数 数组, 在本节将介绍指针变量指向函数的定义和使用方法 在 C51 对函数进行编译时, 每个函数都有一个入口地址, 该入口地址就是函数指针所指向的地址 引入了指向函数的指针变量后, 就可以用该指针变量调用函数, 就如同使用指针变量引用其他类型变量一样 函数指针有两个用途, 即调用函数和做函数的形参 函数指针的声明格式为 : 返回值类型 (* 指针变量名 )( 形参列表 );

83 指向函数的指针 例 声明函数指针的例子 int func(int x); int (*f) (int x); 下面将函数指针指向函数 : f=func; // 声明一个函数 // 声明一个函数指针 // 将 func 函数的首地址赋给指针 f 或者使用下面的方法将函数地址赋给函数指针 : f=&func; 注 : 赋值时函数 func 不带括号, 也不带参数, 由于 func 代表函数的首地址, 因此经过赋值以后, 指针 f 就指向函数 func(x) 的代码的首地址

84 指向函数的指针 例 声明和使用函数指针的例子代码清单 14-4 main.c 文件 #include "stdio.h" #include "reg51.h" void print_max(int a,int b) // 声明一个无返回值的函数 print_max { if(a>b) printf("max value is %d\n",a); // 当 a>b 时,a 为最大值, 并打印 a 的值 else printf("max value is %d\n",b); // 当 a b 时,b 为最大值, 并打印 b 的值 }

85 指向函数的指针 void print_min(int a,int b) // 声明一个无返回值的函数 print_min { if(a>b) printf("min value is %d\n",b); // 当 a>b 时,b 为最小值, 并打印 b 的值 else printf("min value is %d\n",a); // 当 a b 时,a 为最小值, 并打印 a 的值 } int main() { void (*ptr)(int i,int j); // 声明指向函数的指针 int m,n; // 定义整型变量 m 和 n SCON= 0x52; // 初始化串口

86 指向函数的指针 TMOD = 0x20; TCON = 0x69; TH1 = 0xF3; puts("please input two integer"); // 提示输入两个整数 scanf("%d %d",&m,&n); // 输入整型变量 m 和 n 的值 ptr=print_max; //ptr 指向函数 print_max ptr(m,n); // 在 ptr 后面给出函数所用的实参列表 ptr=print_min; //ptr 指向函数 print_min ptr(m,n); // 在 ptr 后面给出函数所用的实参列表 return 0; }

87 指向函数的指针 读者可以进入到本书所提供资料的 stc_program_example\ 例子 目录下, 在 Keil μvision5 集成开发环境下打开该设计, 并进入调 试器模式 打开 UART #1 界面, 输入两个整数的值, 然后显示结果,

88 可重入函数设计 在 Keil Cx51 编译器中, 对于可重入函数使用关键字 reentrant 标识 对于一个可重入函数来说, 可以在同一时刻被不同的程序共享 当正在执行可重入函数时, 其它程序可以打断该函数的执行, 然后开始执行同一个可重入函数 通常情况下, 在 C51 编译器中的函数不能被递归调用或者以递归的行为运行, 这是因为 C51 编译器将函数的参数和本地变量保存在固定的存储空间位置之一限制, 递归调用使用了相同的存储器空间位置 在这种情况下, 可能破坏函数参数和本地变量 reentrant 函数属性允许声明一个可重入函数, 这样就可以被递归调用 可重入函数可以在同一时刻被两个以上的程序调用, 它经常用于要求实时应用或者中断和非中断代码共享一个函数的情况

89 可重入函数设计 对于一个可重入函数来说, 根据存储器模型的选择, 使用内部或者外部存储器来模拟一个可重入堆栈 对于可重入函数来说, 需要注意以下的规则 : 不能使用 bit 类型的函数参数, 也不能使用本地 bit 标量, 这是因为可重入能力不支持可位寻址的变量 不能从 alien 函数调用可重入函数 可重入函数不能包含 alien 属性 可重入函数可以同时有其它属性, 包括 :using interrupt 和存储器模型属性 (small compact 或 large) 返回地址保存在 8051 的硬件堆栈中, 任何要求 PUSH 和 POP 的操作会影响硬件堆栈

90 可重入函数设计 可重入函数可以混合使用不同存储器模型 然而, 每个可重入函 数必须正确的声明以及包含它的存储器模型属性 这是因为需要 这些属性, 以便将函数参数正确的放入正确的可重入堆栈 三个可重模型的任何一个都有它自己的可重入栈和堆栈指针 注 : 可重入函数使用的模拟堆栈有它自己的堆栈指针, 它并不依赖于 8051 的堆栈和堆栈指针 在 STARTUP.A51 文件中, 定义了堆栈和堆栈指针 下面将通过一个递归函数, 说明可重入函数的用法 对于下面的函数 : f n = n 很明显, 存在下面的递归关系 : f n = f(n 1) + 1 n

91 可重入函数设计 当 n=1 时,f(1)=1, 这是正常计算的初始条件也是递归过程的终 止条件 由于 f n = f(n 1) + 1 n, 所以需要先得到 f(n-1) 的结果 而 f(n-1) 又可以通过计算 f(n-2) 得到, 即 :f n 1 = f(n 2) + 1 n 1, 以此类推直到得到 f(1), 这就是一个递归的过程 当递归得到 f(1) 时, 就可以通过 f(1), 得到 f(2) 的值,..., 直到最 终得到 f(n) 的值

92 可重入函数设计 例 递归函数计算 f n = 的例子 2 3 n 代码清单 14-5 main.c 文件 #include "stdio.h" #include "reg51.h" float fac(int n) reentrant // 声明可重入函数 fac, 入口参数为 n, 返回类型为浮点 { float f; // 声明浮点变量 f, 作为 fac 函数的返回值 if(n==1) f=1.0; // 当 n=1 时,fac 函数的返回值为 1.0 else f=fac(n-1)+1.0/n; // 当 n>1 时,fac(n) 调用 fac(n-1) return f; // 通过关键字 return, 说明 f 为 fac 函数的返回值 }

93 可重入函数设计 int main() { int n; // 声明整型变量 n float y=0.0; // 声明浮点变量 y SCON= 0x52; // 初始化串口 TMOD = 0x20; TCON = 0x69; TH1 = 0xF3; printf("please input an integer number\n"); scanf("%d",&n); // 输入整型变量 n 的值 y=fac(n); // 调用可重入函数 n printf("f(%d)=1+1/ /%d=%f\n",n,n,y); // 打印计算结果 return 0; }

94 可重入函数设计 读者可以进入到本书所提供资料的 stc_program_example\ 例子 目录下, 在 Keil μvision5 集成开发环境下打开该设计, 并进入调试器模式 按下面步骤运行和分析递归函数的调用过程 : 在代码的第 8 行 第 10 行和第 11 行分别设置断点 打开 UART 1 窗口界面 单步运行程序 当运行到第 23 行代码时, 在 UART 1 窗口内出现提示信息 please input an integer number 在提示信息下面输入 4, 表示该程序将计算 f(4) 的值, 按回车键 在当前调试模式主界面右下侧的 Call Stack + Locals 标签窗口下, 可以看到主程序的信息 注 : 该窗口说明, 当前断点在 main 主程序内,main 主程序入口点 / 入口地址在单片机片内存储区的 0x0F2F 的位置

95 可重入函数设计

96 可重入函数设计 单步运行程序, 跳到断点所在的第 10 行代码 在当前调试模式主界面右下侧的 Call Stack + Locals 标签窗口下, 可以看到调用函数 FAC 的信息 从图中可以看到,fac 函数的程序入口点在 c:0x0eb7 的位置

97 可重入函数设计 注 : 从图中可以看到当前断点程序代码的入口在单片机片内程序 Flash 空间的 0x0EB7 断点落在这个位置 表示继续调用 fac 函数, 也就是 fac 调用自己 此时,n=4; 由于 fac 要调用自己, 所以 fac 函数当前运行的状态保存在堆栈中 单步运行程序, 再次跳到断点所在的第 10 行代码 在当前调试模 式主界面右下侧的 Call Stack + Locals 标签窗口下, 可以看到第 二次被调用函数 fac 的信息

98 可重入函数设计 注 : 从图中可以看到当前断点程序代码的入口在单片机片内程序 Flash 空间的 0x0EB7 断点落在这个位置 表示继续调用 fac 函数, 也就是 fac 调用自己 此时,n=3; 由于 fac 要调用自己, 所以 fac 函数当前运行的状态保存在堆栈中, 很明显上一次调用函数的程序入口点在单片机片内程序 Flash 区的 0x0EB7

99 可重入函数设计 按 F5 键, 再次跳到断点所在的第 10 行代码 在当前调试模式主界 面右下侧的 Call Stack + Locals 标签窗口下, 可以看到第三次被 调用函数 fac 的信息

100 可重入函数设计 注 : 从图中可以看到当前断点程序代码的入口在单片机片内程序 Flash 空间的 0x0EB7 断点落在这个位置 表示继续调用 fac 函数, 也就是 fac 调用自己 此时,n=2; 由于 fac 要调用自己, 所以 fac 函数当前运行的状态保存在堆栈中, 很明显上一次调用函数的程序入口点在单片机片内程序 Flash 区的 0x0EB7

101 可重入函数设计 按 F5 键, 再次跳到断点所在的第 10 行代码 在当前调试模式主界 面右下侧的 Call Stack + Locals 标签窗口下, 可以看到第四次被 调用函数 fac 的信息

102 可重入函数设计 注 : 从图中可以看到当前断点程序代码的入口在单片机片内程序 Flash 空间的 0x0EB7 断点落在这个位置 表示继续调用 fac 函数, 也就是 fac 调用自己 此时,n=1; 由于 fac 要调用自己, 所以 fac 函数当前运行的状态保存在堆栈中, 很明显上一次调用函数的程序入口点在单片机片内程序 Flash 区的 0x0EB7 单步运行程序, 此时由于 n=1, 满足 if(n==1)f=1.0, 判断条件 单步运行程序, 调到第 11 行代码,return f; 准备返回 f 的值,f=1 当运行完 return f 后, 继续单步运行程序, 在 Call Stack + Locals 标签窗口下, 最顶上 n=1 的内容出栈, 栈顶此时为 n=2,

103 可重入函数设计

104 可重入函数设计 注 : 此时返回的值 f=1.5, 表示 f(2)=1.5 单步继续运行程序, 跳到第 11 行, 准备执行 return f 当运行完 return f 后, 继续单步运行程序, 在 Call Stack + Locals 标签窗口下, 最顶上 n=2 的内容出栈, 栈顶此时为 n=3

105 可重入函数设计 注 : 此时返回的值 f= , 表示 f(3)= 单步继续运行程序, 跳到第 11 行, 准备执行 return f 当运行完 return f 后, 继续单步运行程序, 在 Call Stack + Locals 标签窗口下, 最顶上 n=3 的内容出栈, 栈顶此时为 n=4

106 可重入函数设计 注 : 此时返回的值 f= , 表示 f(4)= 单步继续运行程序, 跳到第 11 行, 准备执行 return f 当运行完 return f 后, 继续单步运行程序, 在 Call Stack + Locals 标签窗口下, 最顶上 n=4 的内容出栈

107 可重入函数设计 注 : 此时得到调用函数 fac(4) 的最终返回值, 即 y= , 表示 fac(4)= 在 UART #1 窗口下, 可以看到最后打印的结果

108 中断函数设计 --C 语言中断函数的格式 Keil Cx51 编译器支持在 C 语言源程序中直接编写 8051 单片机的中断服务程序, 从而降低了采用汇编语言编写中断服务程序的复杂度 在 Keil Cx51 编译器中, 对函数定义进行了扩展, 增加了关键字 interrupt n,n 值与中断源和中断向量的关系

109 中断函数设计 --C 语言中断函数的格式 中断源 中断向量 中断号 n 外部中断 0 0x 定时器 0 0x000B 1 外部中断 1 0x 定时器 1 0x001B 3 串口 (UART)1 0x ADC 中断 0x002B 5 低电压检测 (LVD) 0x 可编程计数器阵列 (PCA) 0x003B 7 串口 (UART)2 0x 同步串口 SPI 0x004B 9 外部中断 2 0x 外部中断 3 0x005B 11 定时器 2 0x 外部中断 4 0x 串口 (UART)3 0x008B 17 串口 (UART)4 0x 定时器 3 0x009B 19 定时器 4 0x00A3 20 比较器 0x00AB 21 PWM 0x00B3 22

110 在该设计中, 将设计一个在 0~3 之间计数 (4 进制 ) 的计数器 通 过 STC 学习板上的 P4.6 和 P4.7 端口上的 LED, 显示计数的值 在 该设计中, 计数是通过外部中断 INT0 触发的, 即 : 每次当 INT0 引脚下拉到地时, 触发一次中断, 计数器递增一次 该设计的硬 件电路的触发由开关控制 中断函数设计 -- 外部中断电路原理

111 中断函数设计 -- 外部中断电路原理

112 中断函数设计 -- 外部中断电路原理 为了正确的下载程序, 以及方便读者后续的实验 STC 学习板上没 有焊接开关 但是, 提供了 SW17 和 SW18 两个按键 当 : 按下 SW17 时,P3.2 引脚接地, 也就是产生一个 INT0 下降沿低脉 冲信号 按下 SW18 时,P3.3 引脚接地, 也就是产生一个 INT1 下降沿低脉 冲信号 注 : 在本节设计的例子中, 只使用了 INT0 外部中断信号 在该设计中, 为了简化程序的设计过程, 没有加入对外部按键的去抖动处理代码

113 在该设计中, 当通过外部中断触发中断事件, 并进行相应的处理 实现 C 语言中断函数 / 中断服务程序设计的步骤主要包括 : 注 : 读者可以进入到本书所提供资料的 stc_program_example\ 例子 目录下, 在 Keil μvision5 集成开发环境下打开并参考该设计 建立新的设计工程 在当前工程主界面中, 选中 Target 1, 单击右键, 出现浮动菜单 在浮动菜单内, 选择 Options for Target Target 1 选项 出现 Options for Target Target 1 对话框界面 在该界面窗口下, 选择 Output 标签 在该标签窗口下, 选中 Create HEX File 前面 的复选框 中断函数设计 -- C 语言中断程序的编写和测试

114 中断函数设计 -- C 语言中断程序的编写和测试 单击 OK 按钮, 退出 Options for Target Target 1 对话框界面 建立新的名字为 main.c 的 C 语言源文件, 输入下面的代码, 并保存该设计文件 代码清单 14-7 main.c 文件 #include "reg51.h" int i=0; // 声明全局变量 i, 初值为 0 servivce_int0() interrupt 0 // 声明该函数是中断函数, 对应于中断号 0 { if(i==4) i=0; // 如果 i 计数到 4, 则复位到 0 if(i==0) // 当计数值为 0 时 {

115 P46=1; // 设置 P4.6 为 1( 灯灭 ) P47=1; // 设置 P4.7 为 1( 灯灭 ) } else if(i==1) { // 当计数值为 1 时 P46=0; // 设置 P4.6 为 0( 灯亮 ) P47=1; // 设置 P4.7 为 1( 灯灭 ) } else if(i==2) 中断函数设计 -- C 语言中断程序的编写和测试 // 当计数值为 2 时

116 { P46=1; // 设置 P4.6 为 1( 灯灭 ) P47=0; // 设置 P4.7 为 0( 灯亮 ) } else if(i==3) { // 当计数值为 3 时 P46=0; // 设置 P4.6 为 0( 灯亮 ) P47=0; // 设置 P4.7 为 0( 灯亮 ) } i=i+1; } 中断函数设计 -- C 语言中断程序的编写和测试 //i 递增

117 void main() { IT0=1; // 只允许下降沿触发 EX0=1; // 允许外部中断 0 EA=1; } while(1); 中断函数设计 -- C 语言中断程序的编写和测试 //CPU 允许响应中断 // 无限循环 编译并下载设计到 STC 单片机中

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 7.5 函数的嵌套调用 C 语言的函数定义是互相平行 独立的 即函数不能嵌套定义 但可以嵌套调用函数 即调用一个函数的过程中, 又可以调用另一个函数 7.5 函数的嵌套调用 main 函数 1 调用 a 函数 2 a 函数 3 调用 b 函数 4 b 函数 5 9 8 7 6 结束 7.5 函数的嵌套调用 例 7.5 输入 4 个整数, 找出其中最大的数 用函数的嵌套调用来处理 解题思路 : main

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 STC 单片机 C 语言数组 主讲 : 何宾 Email:hebin@mail.buct.edu.cn 2016.03 一维数组的定义格式为 : 类型说明符数组名 [ 常量表达式 ]; 其中, 类型说明符是任意一种基本数据类型或者构造数据类型 数 组名是用户定义的数组标识符 [] 内的常量表达式表示数据元素的 个数, 也称为数组的长度 比如 : int a[10] -- 一维数组的定义 该数组用标识符

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

DPJJX1.DOC

DPJJX1.DOC 8051 111 2K 1 2 3 ' ' 1 CPU RAM ROM / A/D D/A PC CPU 40 68 10 20 8 51 PIII 8051 2 MCS51 8051 8031 89C51 8051 8031 89C51? MCS51 INTEL INTEL 8031 8051 8751 8032 8052 8752 8051 8051 8051 MCS51 8031 8031

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 在第 2 章中已经对 C 语言变量的声明 定义及初始化进行了介绍, 并简单介绍了 C 语言变量的作用域, 本章将对变量的存储方式进行详细的介绍, 不同存储方式的变量有不同的生命期, 作用域也各不相同 通过对 C 语言变量存储方式的介绍, 使更加深入的了解 C 语言变量的作用域的工作原理 本章讲述的知识点包括 : C 语言变量的生存期和作用域 ; C 语言局部变量与全局变量 ; C 语言变量的存储方式

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 STC 单片机复杂数据结构 主讲 : 何宾 Email:hebin@mail.buct.edu.cn 2016.03 结构类型定义的格式为 : struct 结构名 } 其中 : 结构元素列表 结构 -- 结构类型的定义 结构元素列表为不同数据类型的列表 结构 -- 结构类型的定义 例 16-1 结构体的声明例子 struct student char name[30]; char gender;

More information

C C

C C C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please

More information

Static Enforcement of Security with Types

Static Enforcement of Security with Types 例题 1 一个 C 语言程序及其在 X86/Linux 操作系统上的编译结 果如下 根据所生成的汇编程序来解释程序中四个变 量的存储分配 生存期 作用域和置初值方式等方面 的区别 static long aa = 10; short bb = 20; func( ) { } static long cc = 30; short dd = 40; static long aa = 10; func(

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 思考题 1 函数总需要从 main 中调用吗? 当调用一个函数时, 为什么要使用参数? 函数不是总需要从 main 函数中调用, 使用参数的目的是为了给被调函数传递数据 2 什么是函数的返回值? 是否每个函数都有返回值?

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0 SH79F6431 1. SH79F6431 1T 8051 FLASH SH79F JET51 Keil µ vision JTAG 1.1. SH79F6431 LQFP64 1.2. (Target Board) SH79F6431 1 V 1.0 1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F6431 1 2 1 B. 1(VCC/GND)

More information

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD2 1...2 1.1...2 1.2...2 1.3 /...2 2 SoftICE...2 3 SoftICE MCU...2 4 SoftICE...3 4.1 SST BootLoader SOFTICE...3 4.2 SoftICE SST MCU...6 5 SoftICE...7

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

MSP430µ¥Æ¬»úCÓïÑԺͻã±àÓïÑÔ»ìºÏ±à³Ì.doc

MSP430µ¥Æ¬»úCÓïÑԺͻã±àÓïÑÔ»ìºÏ±à³Ì.doc MSP430 单片机 C 语言和汇编语言混合编程 Mixing C and Assembler With the MSP430 刘玉宏 Liu,Yuhong 摘要 : 为了发挥 C 语言和汇编语言各自的优点, 二者需要相互调用函数 本文首先介绍了 MSP430 单片机的 C 语言函数的参数传递规则, 然后对 C 语言和汇编语言的混合编程进行了详细描述, 最后给出应用实例 关键字 :MSP430 单片机

More information

ARM中C和汇编混合编程及示例.doc

ARM中C和汇编混合编程及示例.doc ARM 中 C 和汇编混合编程及示例 在嵌入式系统开发中, 目前使用的主要编程语言是 C 和汇编,C++ 已经有相应的编译器, 但是现在使用还是比较少的 在稍大规模的嵌入式软件中, 例如含有 OS, 大部分的代码都是用 C 编写的, 主要是因为 C 语言的结构比较好, 便于人的理解, 而且有大量的支持库 尽管如此, 很多地方还是要用到汇编语言, 例如开机时硬件系统的初始化, 包括 CPU 状态的设定,

More information

untitled

untitled 1 1.1 1.2 1.3 1.4 1.5 ++ 1.6 ++ 2 BNF 3 4 5 6 7 8 1.2 9 1.2 IF ELSE 10 1.2 11 1.2 12 1.3 Ada, Modula-2 Simula Smalltalk-80 C++, Objected Pascal(Delphi), Java, C#, VB.NET C++: C OOPL Java: C++ OOPL C# C++

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期  开放本科  期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new 试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 C 十 + 程序中都必须包含有这样一个函数, 该函数的函数名为 ) A.main

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu 移动平台应用软件开发 C/C++/JAVA 基础 指针以及指针操作 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0;

More information

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期  开放本科  期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l 试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 c++ 程序中都必须包含有这样一个函数, 该函数的函数名为 ( ) A. main

More information

C

C C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 STC 单片机比较器原理及实现 主讲 : 何宾 Email:hebin@mail.buct.edu.cn 2016.03 STC 单片机比较器结构 STC15W 系列单片机内置了模拟比较器 对于 STC15W201S STC15W404S, 以及 STC15W1K16S 系列单片机的比较器内部结 构 STC 单片机比较器结构 从图中可以看出, 比较器正端输入 CMP+ 的输入电压来自单片机的 P5.5

More information

第十四章 STC单片机比较器原理及实现

第十四章 STC单片机比较器原理及实现 第 14 章 STC 单片机比较器 原理及实现 何宾 2015.02 1 本章主要内容 STC 单片机比较器结构 STC 单片机比较器寄存器组 STC 单片机比较器应用 2 STC 单片机比较器结构 STC15W 系列单片机内置了模拟比较器 对于 STC15W201S STC15W404S, 以及 STC15W1K16S 系 列单片机的比较器内部结构 3 STC 单片机比较器结构 S T C 15W

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 lambda 表达式及其应用 lambda 表达式是 Java 8 提供的一种新特性, 它使得 Java 也能像 C# 和 C++ 语言一样进行简单的 函数式编程, 这不仅简化了某些通用结构的实现方式, 也大大增强了 Java 语言的表达功能 3.1 lambda 表达式简介 lambda 表达式是基于数学中的 λ 演算得名, 本质上就是一个没有方法名的匿名方法 例如, 有一个方法定义如下

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

More information

目录

目录 ALTERA_CPLD... 3 11SY_03091... 3 12SY_03091...4....5 21 5 22...8 23..10 24..12 25..13..17 3 1EPM7128SLC.......17 3 2EPM7032SLC.......18 33HT46R47......19..20 41..20 42. 43..26..27 5151DEMO I/O...27 52A/D89C51...28

More information

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc C 语言开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 :201409210011 学分 :5 学分学时 :60 学时 ( 其中 : 讲课学时 :37 学时上机学时 :23 学时 ) 先修课程 : 计算机导论后续课程 :C++ 程序设计适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 C 语言开发入门 是计算机各专业必修的基础课程, 是数据结构 C++ Java

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

2015年计算机二级(C语言)模拟试题及答案(四)

2015年计算机二级(C语言)模拟试题及答案(四) 2016 年 计 算 机 二 级 (C 语 言 ) 模 拟 试 题 及 答 案 (4) 一 填 空 题 1 C 语 言 中 基 本 的 数 据 类 型 有 : 2 C 语 言 中 普 通 整 型 变 量 的 类 型 说 明 符 为, 在 内 存 中 占 字 节, 有 符 号 普 通 整 型 的 数 据 范 围 是 3 整 数 -35 在 机 内 的 补 码 表 示 为 4 执 行 下 列 语 句 int

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63> 1 实验目的 实验 2 C 和汇编语言的混合编程实验 学习在 C 程序中使用嵌入式汇编编写程序 了解嵌入式汇编的格式 语言特点 2 实验设备 S3C2410 开发板 ADS1.2 集成开发环境,JTAG 调试器 串口连接线 3 实验原理 在 ARM 的应用开发中,C 语言功能强大且容易编写程序, 但是汇编程序在底层的操作仍然具有 C 程序无法替代的功能, 有时候我们需要在 C 程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作

More information

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 C C trio@seu.edu.cn C C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 Week3 C Week5 Week5 Memory & Pointer

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

第五章 STC单片机汇编语言编程模型

第五章 STC单片机汇编语言编程模型 第 5 章 STC 单片机汇编语言 编程模型 何宾 2015.02 1 本章主要内容 汇编语言程序结构 汇编代码中段的分配 汇编语言符号及规则 汇编语言操作数描述 汇编语言控制描述 Keil μvision 集成开发环境介绍 Keil μvision5 汇编语言设计流程 单片机端口控制汇编语言程序设计 单片机中断汇编语言程序设计 2 汇编语言程序结构 实际上, 所谓的汇编语言程序就是按照一定的规则组合在一起的机器语言助记符和汇编器助记符命令

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

More information

第三篇 C 语言基础编程能力实训案例 编程练习题答案 1-1 程序例 #include<stdio.h> main( ) { printf("c Language Program\n"); } 结果 1. 变量及数据运算 1-2 程序例 #include<stdio.h> main( ) { pri

第三篇 C 语言基础编程能力实训案例 编程练习题答案 1-1 程序例 #include<stdio.h> main( ) { printf(c Language Program\n); } 结果 1. 变量及数据运算 1-2 程序例 #include<stdio.h> main( ) { pri 第三篇 C 语言基础编程能力实训案例 编程练习题答案 1-1 程序例 printf("c Language Program\n"); 1. 变量及数据运算 1-2 程序例 printf("mini-floppy disk\n"); printf("floppy disk\n"); printf("hard disk\n"); 1-3 程序例 /*printf test*/ printf("c Language\n");

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf(%d, &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf(% 2013 ( 28 ) ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 10 B 1 C 1 D 5 E 5 F 1 G II 5 H 30 1 2013 C 1 #include 2 int main(void) 3

More information

C/C++语言 - 运算符、表达式和语句

C/C++语言 - 运算符、表达式和语句 C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe

More information

Microsoft PowerPoint - C语言课件-9-结构体.pptx

Microsoft PowerPoint - C语言课件-9-结构体.pptx 第九章结构体 郎大鹏 第九章结构体 9.1 结构体类型的声明方法 9.2 结构体类型变量的定义与使用 9.3 结构体数组 9.4 编程举例 9.5 习题 9.1 结构体类型的声明方法 结构体声明的语法形式如下 : struct 结构体标识符 成员变量列表 ; }; 例如, 为了描述班级 ( 假设仅仅包括班级编号 专业 人数等信息 ), 可以声明如下的结构体类型 struct Class char Code[10];

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 选择题 1. 以下数组定义中, 错误的是 :C)int a[3]=1,2,3,4; 2. 以下数组定义中, 正确的是 :B) int a[][2]=1,2,3,4; 3. 设有定义 int a[8][10];,

More information

技能竞赛C试题

技能竞赛C试题 C 语言程序设计单元测验六 ( 指针 ) 一 单项选择题 ( 每题 1 分, 共 54 分 ) 1 有以下程序 void fun(char *a, char *b) { a=b; (*a)++; { char c1='a',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf("%c%c\n",c1,c2); A Ab B aa C Aa D Bb 2

More information

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf (%d, & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

<4D F736F F F696E74202D2043D3EFD1D4BFCEBCFE2D362DBAAFCAFD2E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D2043D3EFD1D4BFCEBCFE2D362DBAAFCAFD2E BBCE6C8DDC4A3CABD5D> 第六章函数 郎大鹏 第六章函数 6.1 高效程序的编写方法 6.2 函数的定义 6.3 函数间数据的传递方法 6.4 函数的调用 6.5 函数的嵌套调用 6.6 函数的递归调用 6.7 局部变量和全局变量 6.8 变量的存储类别 6.9 习题 第六章函数 6.1 高效程序的编写方法 6.2 函数的定义 6.3 函数间数据的传递方法 6.4 函数的调用 6.5 函数的嵌套调用 6.6 函数的递归调用

More information

C/C++ - 数组与指针

C/C++ - 数组与指针 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 float candy [ 365]; char code [12]; int states [50]; 2 int array [6] = {1, 2, 4, 6, 8, 10}; 3 // day_mon1.c: # include # define MONTHS 12 int

More information

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

More information

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 STC 单片机汇编语言编程基础 主讲 : 何宾 Email:hebin@mail.buct.edu.cn 2016.03 汇编语言程序结构 实际上, 所谓的汇编语言程序就是按照一定的规则组合在一起机器语言助记符和汇编器助记符命令 这些按一定规则组合在一起的汇编语言助记符机器指令, 能通过软件开发环境的处理, 转换成可以在 STC 8051 CPU 上按照设计要求运行的机器代码 汇编语言程序结构 例子

More information

第五讲 数组 一维数组 二维数组 数组作为函数参数

第五讲 数组 一维数组 二维数组 数组作为函数参数 第五讲 数组 一维数组 二维数组 数组作为函数参数 一维数组 2 数组 数组 : 具有一定顺序关系的若干相同类型变量的集合体 一维数组的声明 类型标识符变量名 [n] 声明一个长度为 n 的数组 ( 向量 ) 类型标识符 : 数组元素的数据类型 ; n: 数组的长度, 即元素的个数 ; 例 : int x[5] // 声明一个长度为 5 的一维数组 一维数组的引用 变量名 [k] // 注 : 下标

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

untitled

untitled MODBUS 1 MODBUS...1 1...4 1.1...4 1.2...4 1.3...4 1.4... 2...5 2.1...5 2.2...5 3...6 3.1 OPENSERIAL...6 3.2 CLOSESERIAL...8 3.3 RDMULTIBIT...8 3.4 RDMULTIWORD...9 3.5 WRTONEBIT...11 3.6 WRTONEWORD...12

More information

Microsoft PowerPoint - 06_Struct.ppt

Microsoft PowerPoint - 06_Struct.ppt C 程序设计语言 第 6 章章结构 孙志岗 sun@hit.edu.cn http://sunner.cn 从基本数据类型 复合数据类型到抽象数据类型 类型本不存在 内存里存储的内容, 你认为它是什么, 它就是什么 高级语言设计了基本数据类型 : 整型 浮点型 字符型等 不同的语言也会定义不同的基本类型 基本数据类型并不能方便地解决所有问题 复合数据类型是基本数据类型迭代派生而来 典型的代表就是 结构,,

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

a( a 0) a a( a 0) a = a ( a) = a a( a 0 ) a = a( a ) 0 a = a 4 f x 1 = x a ai a R sinx + a b ab sin x sinx = sinx sin x = 4 y = sinx + sinx - ysinx 4 = 0 sinx sinx x - 3 3= x x- 3 - x- 3 = 0

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

e bug 0 x=0 y=5/x 0 Return 4 2

e bug 0 x=0 y=5/x 0 Return 4 2 e 1 4 1 4 4.1 4.2 4.3 4.4 4.5 e 2 4.1 bug 0 x=0 y=5/x 0 Return 4 2 e 3 4 3 e 4 (true) (false) 4 4 e 5 4 5 4.2 1 G= V E V={n1,n2,,n m } E={e1,e2,,e p } e k ={n i,n j }, n i,n j V e 6 4.2 4 6 1 e 3 n 1 e

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

02

02 Thinking in C++: Volume One: Introduction to Standard C++, Second Edition & Volume Two: Practical Programming C++ C C++ C++ 3 3 C C class C++ C++ C++ C++ string vector 2.1 interpreter compiler 2.1.1 BASIC

More information

Chapter12 Derived Classes

Chapter12   Derived Classes 继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数

More information

<313034A4BDB67DA4C0B56FBA5DB3E65FBD64A5BB2E786C7378>

<313034A4BDB67DA4C0B56FBA5DB3E65FBD64A5BB2E786C7378> 科 別 : 國 文 科 (A 區 ) 分 發 16 名 1 600110129 黃 毅 潔 國 立 豐 原 高 級 商 業 職 業 學 校 2 600110446 鄭 安 芸 國 立 南 投 高 級 中 學 3 600110632 李 孟 毓 桃 園 市 立 大 園 國 際 高 級 中 學 4 600110492 洪 珮 甄 南 投 縣 立 旭 光 高 級 中 學 5 600110262 柯 懿 芝

More information

学年本科教学和思政工作情况汇报

学年本科教学和思政工作情况汇报 微机原理与接口技术 第 4 章 8051 的 C 语言与程序设计 浙江大学 王立强 王晓萍 内容提要 4.1 C51 特点 4.1.1 C51 结构特点 4.1.2 C51 与汇编编程的区别 4.1.3 C51 编程的优缺点 4.1.4 C51 与标准 C 的区别 4.1.5 C51 编译器 4.2 C51 基础 4.2.1 数据类型 4.2.2 存储器类型与存储模式 4.2.3 数组 4.2.4

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

Microsoft Word - MAN2011A_CH_RTT.doc

Microsoft Word - MAN2011A_CH_RTT.doc 基于 SAM7X EK 和 IAR EWARM 文档编号 文档版本 Rev. A 文档摘要 基于 AT91SAM7X EK 开发板的代码解读,RTT 代码解读 关键词 AT91SAM7X256 SAM7X EK IAR EWARM J LINK RTT 创建日期 2010 06 08 创建人员 Cust126 审核人员 Robin 文档类型 公开发布 / 开发板配套文件 版权信息 Mcuzone 原创文档,

More information

2001年(下)局域网技术与组网工程试卷答案

2001年(下)局域网技术与组网工程试卷答案 二 一年上半年全国高等教育自学考试计算机基础与程序设计试卷 一 单项选择题 ( 本大题共 20 小题, 每小题 1 分, 共 20 分 ) 在每小题列出的四个选项中只有一个选项是符合题目要求的, 请将正确选项前的字母填在题后的括号内 1.I/O 设备指的是计算机的 ( ) A 存储设备 B 输入和输出设备 C 控制器 D 运算器 2. 具有只读功能的内存储器是指 ( ) A ROM B RAM C

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information