基于单片机的函数信号发生器的设计与制作_(编辑修改稿)内容摘要:

经以上定义后, A1 就可当作位地址来使用。 MOV C, A1 程序设计实例; 程序 1:求符号函数。 201Y 000XXX当当当 设 X、 Y 分别为 30H、 31H 单元。 分析:由设计要求可以看出,程序有三条路径需要选择,因此需要采用分支程序设计,其流程图如图 21 所示。 24 图 21 符号函数流程图 程序如下: ORG 20xxH X EQU 30H Y EQU 31H MOV A, X JZ LOOP0 ; A 为 0 值,转 LOOP0 JB , LOOP1 ;最高位为 1,为负数 MOV A, 01H ; A← 1 SJMP LOOP0 LOOP1:MOV A, 02H ; A← 2 LOOP0: MOV Y, A ; Y← A SJMP $ END 程序 2:在内部 RAM 的 42H 开始的连续单元中存放一组 8 位无符号数,该数组长度 n( n≤ 3DH)存放在 41H 中,找出这组数中的最大数,并将其存入内部 RAM 的 40H 单元中。 分析:可以先将第一个数组元素送 40H 单元内,然后将数组中的其它数依次与其比较,若大于 40H 中的值,则取代它再比较下一位。 开始 0→ Y X=0。 X0。 2→ Y 1→ Y 结束 Y Y N N 25 直到所有元素都比较完。 此时 40H 单元中即为最大值。 程序: ORG 20xxH MOV R0, 42H MOV 40H,@R0 DEC 41H LOOP: INC R0 MOV A, @R0 CJNE A, 40H, COMP COMP: JC NEXT MOV 40H,A NEXT: DJNZ 41H,LOOP SJMP $ END 程序 3:编写程序实现延时 1min 分析:可利用 CPU 中每执行一条指令都有固定的时序这一特征,令其重复执行某些指令从而达到延时的目的。 程序: DELAY: MOV R7, 0E6H 1 LOOP1: MOV R6, 0FFH 1 LOOP2:MOV R5, 0FFH 1 LOOP3: NOP 1 NOP 1 DJNZ R6, LOOP3 2 DJNZ R6, LOOP2 2 DJNZ R7, LOOP1 2 RET 2 程序中: 内循环一次所需机器周期数 =( 1+1+2)个 =4 个。 内循环共循环 255 次的机器周期数 =4 255 个 =1020 个。 26 次外循环一次所需机 器周期数 =( 4 255+1+2)个 =1023 个。 次外循环共循环 255 次,所以该子程序总的机器周期数 =( 2551023+1+2)个 =260868 个。 外循环一次所需机器周期数 =( 260868+1+2)个 =260871 个。 外循环共循环 255 次,所以该子程序总的机器周期数 =( 230260871+1+2)个 =60,000,033 个。 因为一个机器周期为 12 个时钟周期,所以该子程序延时间 =260868 12/ oscf。 程序 4:编写一个循环闪烁灯程序,用 P1 口的 ~ 分别控制 8 个发光二极管的阴极,每次其中某个灯闪烁点亮 2次,依次进行,循环不止。 程序: MOV A, 0FEH SHIFT: LCALL FLASH RR A SJMP SHIFT FLASH: MOV R2, 02H FLASH1:MOV P1, A LCALL DELAY MOV P1, 00H LCALL DELAY DJNZ R2, FLASH1 RET 思考题 : 题 1: 编写一个循环闪烁灯程序,用 P1 口的 ~ 分别控制 8个发光二极管的阴极,每次其中两个点亮,依次进行,循环不止。 27 题 2: 编写一个循环闪烁灯程序,用 P1 口的 ~ 分别控制 8个发光二极管的阴极,由两边向中间的灯依次点亮,循环不止。 题 3: 在内部 RAM 的 42H 开始的连续单元中存放一组 8 位无符号数,该数组长度 n( n≤ 3DH)存放在 41H 中,找出这组数中的最小数,并将其存入内部 RAM 的 40H 单元中。 28 第三章 C51 及程序设计 C 语言的重要知识点 C 的数据类型 C 语言中数据有常量和变量之分,它们分别属于以下这些类型。 常量:在程序 运行过程中,其值不能改变的量。 如 ‘ a’、经 define PRICE 30 后, PRICE 为一常量,其值为 30。 变量:其值可以改变的量。 一个变量应该有一个名字,在内存中占据一定的存储单元,如图。 C 语言规定变量必须 先定义后使用。 标识符只能由字母、数字和下划线三种字符组成。 且第一个字符必须为字母或下划线。 习惯上,符号常量名用大写,变量名用小写,以示区别。 数据类型 定义 如 基本类型 整型 整形常量:即整常数。 1 0x12 整形变量:定义符为 int、signed int、 Unsigned int、signed short int、 Unsigned short int、 long int、 Unsigned long int 字符型 字符型常量:用单撇号括起来的一个字符。 ‘ a’、‘。 ’ 字符串型常量:用双撇号括起来的一个字符。 “ china”、“ ” 字符型变量:定义符为 char 3 a 变量名 变量值 存储单元 29 实型 实型常量:分为十进制小数形式和指数形式 123. 4123e3 实型变量:定义 符为 float、double、 long double 枚举类型 构造类型 数组类型 结构体类型 共用体类型 指针类型 空类型 一、 算术运算符和算术表达式 C 的运算符有以下几类: 1.算术运算符: ( + * / %) 2.关系运算符: ( > < == = > = < =。 =) 3.逻辑运算符: (。 amp。 amp。 ||) : (<< >> ~ | ∧(异或) amp。 ) 5.赋值运算符: ( = ) 6.条件运算符: (。 :) 7.逗 号运算符: ( , ) 8.指针运算符: ( * amp。 ) 、自减运算符: ( ++ ) 二、逗号运算符和逗号表达式 逗号表达式形式:表达式 1,表达式 2 C 语句 一、 C 语句可以分为以下 5类 30 1.控制语句: C 语言有 9 种控制语句,它们是:(~表示内嵌的语句) (1).if~ else~ (2).for()~ (3).while()~ (4).do~ while() (5).continue (6).break 结束整个循环 (7).switch 结束本次循环 (8).goto (9).return 2.函数调用语句 如: printf(“ This is a C statement” ) 3.表达式语句 如:赋值语句 4.空语句 如: ; 二、数据的输入输出 C语言函数库中有一批“标准输入输出函数”,它们是: putchar(输出字符 ), getchar(输入字符 ), printf(格式输出 ), scanf(格式输入 ),puts(输出字符串 ), gets(输入字符串。 三、选择结构程序设计 1. If 语句有三种形式 ①. If(表达式)语句 如: if(xy)printf(“ %d” ,x)。 ②. If(表达式) 语句 1 else 语句 2 如: if(xy)printf(“ %d” ,x)。 else printf(“ %d” ,y)。 31 ③. If(表达式 1) 语句 1 else if(表达式 2) 语句 2 else if(表达式 3) 语句 3 else 语句 n 2.条件运算符: 格式: 表达式 1。 表达式 2:表达式 3 如: max=( a b )? a : b 语句 格式: switch(表达式 ) {case 常量表达式 1:语句 1 case 常量表达式 2:语句 2 case 常量表达式 n:语句 n default :语句 n+1 } 四、循环控制语句 构成循环语句的语句有: 1. Goto 语句和 if 语句构成循环; P107 语句 格式: while(表达式 ) 语句 P107 32 语句 格式: do 循环体语句 While (表达式 ); P109 语句 格式: for(循环变量赋值初值;循环条件;循环变量增值)语句 如: for(i=1。 i=100。 i++) sum=sum+i。 五、数组 一维数组定义方式:类型说明符 数组名 [常量表达式 ]; 如: int a[10] 二维数组定义方式:类型说明符 数组名 [常量表达式 ] [常量表达式 ]; 如: float a[2][3],b[3][3] 六、函数 一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定功能。 所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。 在 C 语言中,子程序的作用是由函数完成的。 一个 C程序可由一个主函数和若干个函数构成。 由主函数调用其它函数,其他函数也可以互相 调用。 同一个函数可以被一个或多个函数调用任意多次。 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。 要善于利用函数,以减少重复编写程序段的工作量。 ⑪、一个源程序文件由一个或多个函数组成。 ⑫、一个 C程序由一个或多个源程序文件组成。 ⑬、 C 程序的执行从 main 函数开始。 ⑭、所有函数都是平行的,即在定义函数时是互相独立,一个函数并不从属于另一个函数。 ⑮、调用库函数的方式为: include include ⑯、函数的调用方式为:把函数语句作 为一个语句, 如: float add(float x, float y)。 33 C51 与 C 的区别 一、如何调用单片机内部资源 include 二、存储区的描述 变量的声明中还包括了对存储类型的指定,即指定变量存放的位置。 存储区 描述 DATA RAM 的低 128 字节,可在一个周期内直接寻址。 由于为寻址最快,所以应该把经常使用的变量放在 DATA 区。 例:unsigned char data system_status=0。 char data inp[16]。 BDATA DATA 区可字节,位混合寻址的 16 字节区。 IDATA RAM 区的高 128 字节,必须采用间接寻址。 XDATA 外部存储区,使用 DPTR 间接寻址 PDATA 外部存储区的 256 字节,通过 P0 口的地址对其寻址,使用指令 MOVX @Rn,需要两个指令周期。 CODE 程序存储区使用 DPTR 寻址,程序存储区的数据是不可改变 的。 如 固 化 表 格 的 声 明 会 表 示 为 : uc code moto_back[]={0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11}。 三、如何定义字 define uc unsigned char define ui unsigned int define hi ((655361500)/256) define lo ((655361500)%256) 四、如何定义位 sbit RS=P2^0。 34 sbit RW=P2^1。 sbit E=P2^2。 五、如何定义表格 uc code moto_back[]={0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11}。 六、如何进入中断 中断函数的完整语法及示例如下: 返回值 函数 名 interrupt n [using n]。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。