【www.chawenzhang.com--其他日记】

  因为在C语言草创的年代,UNIX是最好的大型机系统.下面是为大家带来的c语言实验报告范文,希望可以帮助大家。

  c语言实验报告范文范文1:

  1、只有频繁用到或对运算速度要求很高的变量才放到data区内,如for循环中的计数值。

  2、其他不频繁调用到和对运算速度要求不高的变量都放到xdata区。

  3、常量放到code区,如字库、修正系数。

  4、逻辑标志变量可以定义到bdata中。

  在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。这样可以大大降低内存占用空间。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。

  5、data区内最好放局部变量。

  因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同;

  6、确保程序中没有未调用的函数。

  在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。

  7、如果想节省data空间就必须用large模式。

  将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。

  8、使用指针时,要指定指针指向的内存类型。

  在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为: char data *p;。还可指定指针本身的存放内存类型,如:char data * xdata p;。其含义是指针p指向data区变量,而其本身存放在xdata区。

  以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述:

  从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

  在51系列中data,idata,xdata,pdata的区别

  data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

  idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

  xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

  pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

  三、有关单片机ALE引脚的问题

  "单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/6.每当访问外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲."这句话是不是有毛病.我觉得按这种说法,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,希望大虾们帮帮我.

  答:

  其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE

  四、如何将一个INT型数据转换成2个CHAR型数据?

  经keil优化后,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一样的。

  五、在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

  右键点项目中Target 1,选第二个,在OUTPUT中选中CREAT HEX

  六、typedef 和 #define 有何不同??

  typedef 和 #define 有何不同》》》 如

  typedef unsigned char UCHAR ;

  #define unsigned char UCHAR ;

  typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,只不过是定义了

  一个新的名字.

  #define只是一个标号的定义.

  你举的例子两者没有区别,但是#define还可以这样用

  #define MAX 100

  #define FUN(x) 100-(x)

  #define LABEL

  等等,这些情况下是不能用typedef定义的

  七、请问如何设定KELC51的仿真工作频(时钟)用右键点击左边的的target 1,然后在xtal一栏输入

  八、不同模块怎样共享sbit变量,extern不行?把SBIT定义单独放到一个.H中,每个模块都包含这个.h文件

  九、C51中对于Px.x的访问必须自己定义吗?

  是的。

  如sbit P17 = 0x97;即可定义对P1.7的访问

  c语言实验报告范文范文2:

  一、 实验目的

  1、掌握指针的概念、会定义和使用指针变量

  2、掌握指向数组的指针变量

  3、掌握字符串指针的使用

  二、 实验内容

  1、 输入3个字符串,按由小到大的顺序输出。(习题10.2)

  2、 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(习题10.6)

  3、 完善程序,要求使用函数功能:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。

  #include

  #include

  long fun(char *p)

  填写程序

  void main()

  char s[6];

  long n;

  printf("Enter a string:\n");

  gets(s);

  n=fun(s);

  printf("%ld\n",n);

  三、 实验步骤与过程

  四、程序调试记录

  c语言实验报告范文范文3:

  一、 实验目的

  1、掌握c语言中的变量、数组、函数、指针、结构体等主要知识点。

  2、掌握c程序的结构化程序设计方法,能使用c语言开发简单的应用程序。

  3、掌握c程序的运行、调试方法等。

  二、 实验内容

  编写一个学生信息排序程序。要求:

  1、程序运行时可输入n个学生的信息和成绩(n预先定义)。

  2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。

  3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。

  1、 使用函数方法定义各个模块。

  三、 实验步骤与过程

  物理实验报告 ·化学实验报告 ·生物实验报告 ·实验报告格式 ·实验报告模板

  四、程序调试记录

  

本文来源:https://www.chawenzhang.com/riji/96350/