1 / 21

C-51 程序设计

C-51 程序设计. 本讲重点: C-51 的数据类型和存储类型; 指针和中断的使用; 通过实例消化理解 C-51 的编程方法; . ㈠ C-51 简介. C 语言作为一种非常方便的语言而得到广泛的支持,国内最通用的是 Keil C51. C 语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。 C 提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。. C-51 与 ASM-51 相比,有如下优点:

debbie
Download Presentation

C-51 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C-51程序设计 本讲重点: C-51的数据类型和存储类型; 指针和中断的使用; 通过实例消化理解C-51的编程方法; 《单片微机原理及应用》教学课件

  2. ㈠ C-51简介 C语言作为一种非常方便的语言而得到广泛的支持,国内最通用的是Keil C51. C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。 C提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。 《单片微机原理及应用》教学课件

  3. C-51与ASM-51相比,有如下优点: 1.对单片机的指令系统不要求了解,仅要求对8051 的存贮器结构有初步了解; 2.寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理; 3.程序有规范的结构,可分成不同的函数,这种方式可使程序结构化; 4.具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性; 5.提供的库包含许多标准子程序,具有较强的数据处理能力; 6.由于具有方便的模块化编程技术,使已编好程序可容易地移植; 《单片微机原理及应用》教学课件

  4. ㈡ C-51的程序结构 与一般C语言的结构相同,以main()函数为程序人口,程序体中包含若干语句还可以包含若干函数。 C-51函数的一般格式 类型 函数名(参数表) { 数据说明部分 语句执行部分 } 《单片微机原理及应用》教学课件

  5. ㈢ C-51的数据类型 基本数据类型 类型 符号 关键字 数的表示范围 所占位数 16 (signed) int -32768~32767 有 16 (signed) short -32768~32767 (signed) long 32 -2147483648~2147483647 整型 16 0~65535 unsigned int 16 无 0~65535 unsigned short int unsigned long int 32 0~4294967295 有 float 32 3.4e-38~3.4e38 实型 double 1.7e-308~1.7e308 64 有 有 char -128~127 字符型 8 0~255 unsigned char 无 8

  6. C语言中的基本数据类型 类型 符号 关键字 数的表示范围 所占位数 16 (signed) int -32768~32767 有 16 (signed) short -32768~32767 (signed) long 32 -2147483648~2147483647 整型 16 0~65535 unsigned int 16 无 0~65535 unsigned short int unsigned long int 32 0~4294967295 有 float 32 3.4e-38~3.4e38 实型 double 1.7e-308~1.7e308 64 有 有 char -128~127 字符型 8 0~255 unsigned char 无 8

  7. ㈢(续) C-51的数据类型扩充定义 sfr:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位声明 bit:位变量声明 例:sfr SCON = 0X98; sfr16 T2 = 0xCC; sbit OV = PSW^2;

  8. ㈣ C-51数据的存储类型 名 存储空间位置 长度 数据范围 data 直接寻址片内RAM 8位 0~255 bdata 可位寻址片内RAM 1位 0/1 idata 间接寻址片内RAM 8位 0~255 pdata 片外页RAM 8位 0~255 xdata 片外RAM 16位 0~65535 code 程序ROM 16位 0~65535 《单片微机原理及应用》教学课件

  9. ㈣ C-51数据的存储类型(续) 例: 数据类型存储类型 变量 chardata var1; bitbata flags; unsigned charxdata vextor[10]; ㈣ C-51数据的存储类型

  10. ㈤ C-51的包含的头文件 通常有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h (定义特殊功能寄存器和位寄存器); math.h (定义常用数学运算);

  11. ㈥ C-51的运算符 与C语言基本相同: + - * /(加 减 乘 除) > >= < <=(大于 大于等于 小于 小于等于) == !=(测试等于 测试不等于) && || !(逻辑与 逻辑或 逻辑非 ) >> <<(位右移 位左移) & |(按位与 按位或) ^ ~(按位异或 按位取反) 《单片微机原理及应用》教学课件

  12. ㈦ C-51的基本语句 与标准C语言基本相同: if 选择语言 switch/case多分支选择语言 while循环语言 do-while 循环语言 for 循环语言 《单片微机原理及应用》教学课件

  13. ㈧ 中断服务程序 函数名()interrupt n { } ㈨ I/O口定义 #include <absacc.h> #define prot xbyte[0x1000] 或 用指针定义

  14. 例:清零程序 (将2000H—20FFH的内容清零) ★ 汇编语言程序 ORG 0000H SE01: MOV R0,#00H MOV DPTR,#2000H ;(0000H)送DPTR LOO1: CLR A MOVX @DPTR,A ;0送(DPTR) INC DPTR ;DPTR+1 INC R0 ;字节数加1 CJNE R0,#00H,LOO1 ;不到FF个字节再清 LOOP: SJMP LOOP 《单片微机原理及应用》教学课件

  15. 清零程序 (将2000H—20FFH的内容清零) ★ C-51程序 #include <reg51.h> main( ) { int i; unsigned char xdata *p=0x2000; /* 指针指向2000H单元 */ for(i=0;i<256;i++) {*p=0; p++;} /*清零2000H-20FFH单元*/ }

  16. 例:查找零的个数(在2000H--200FH中查出有几个字 节是零,把个数放在2100H单元中) ★ 汇编语言程序 ORG 0000H L00: MOV R0,#10H ;查找16个字节 MOV R1,#00H MOV DPTR,#2000H L11: MOVX A,@DPTR CJNE A,#00H,L16 ;取出内容与00H相等吗? INC R1 ;取出个数加1 L16: INC DPTR DJNZ R0,L11 ;未完继续 MOV DPTR,#2100H MOV A,R1 MOVX @DPTR,A ;相同数个数送2100H L1E: SJMP L1E 《单片微机原理及应用》教学课件

  17. ★查找零的个数C-51程序 #include <reg51.h> main ( ) { unsigned char xdata *p=0x2000;/*指针p指向2000H单元*/ int n=0,i; for(i=0;i<16;i++) { if(*p==0) n++; /* 若该单元内容为零,则n+1 */ p++; /* 指针指向下一单元 */ } p=0x2100; /* 指针p指向2100H单元 */ *p=n; /* 把个数放在2100H单元中 */ } 《单片微机原理及应用》教学课件

  18. 例:电脑时钟 (用定时器产生0.1秒定时中断,在P1口输出) ★ C-51程序 #include <reg51.h> Sbit P1_0 = P1^0; /* 中断服务子程序(0.1秒中断一次) */ void time( ) interrupt 1 { P1_0 = !P1_0; TH0=0x3c; TL0=0xb7; /* 给 T0 赋计数初值 */ } 《单片微机原理及应用》教学课件

  19. 例:电脑时钟(续) main( ) { TMOD=0X01; /* T/C0工作在定时器方式1 */ TH0=0x3c; TL0=0xb7; /* 给 T0 赋计数初值 */ EA=1; /* CPU开中断 */ TR0=1; /* 启动T/C0开始定时 */ ET0=1; /* T/C0开中断 */ whlie(1); } 《单片微机原理及应用》教学课件

  20. 演示SIMLAB C 程序实例

  21. OVER ! 《单片微机原理及应用》教学课件

More Related