问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言实验报告心得

发布网友 发布时间:2022-04-19 11:18

我来回答

3个回答

热心网友 时间:2023-08-23 12:15

c语言实验心得:
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的访问

十、SWITCH( )语句中表达式不可以是位变量对吗?

可以用位变量:

#include

#include

void main()

{

bit flag;

flag=0;

switch(flag)

{

case '0':{printf("0\n");break;}

case '1':{printf("1\n");break;}

default:break;

}

}

bit 变量只有两种状态,if 语句足够啦,!!!

十一、const常数声明占不占内存???

const 只是用来定义“常量”,所占用空间与你的定义有关,如:

const code cstStr[] = {"abc"};

占用代码空间;而如:

const char data cstStr[] = {"abc"};

当然占用内存空间。

另外,#define 之定义似乎不占用空间。

十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用?

试一试将auxr.1清0,然后在c语言中直接声明xdata类型的变量

十三、BUG of Keil C51

程序中用如下语句:

const unsigned char strArr[] = {"数学"};

结果发现strArr[] 内容为 {0xCA,0xD1,0xA7},真奇怪!

凡是有0xfd,则会通通不见了,所以只能手工输入内码了,例如 uchar strArr[]=

{0xCA,0xfd,0xd1,0xa7}(用Ultraedit会很方便)。

十四、Keil C51中如何实现代码优化?

菜单Project下Option for target "Simulator"的C51.

看到Code optimization了吗?

十五、请教c的!和 ~ 符号有甚区别??

!是逻辑取反,~是按位取反。

十六、c51编程,读端口,还要不要先输出1?

我怎么看到有的要,有的不要,请高手给讲讲,到底咋回事?谢了

要输出1的,除非你能保证之前已经是1,而中间没有输出过其他值。

十七、当定时器1(T1)用于产生波特率时,P3^5还是否可以用作正常的I/O口呢?

p3.5完全可以当普通的io使用

十八、C51中 INT 转换为 2个CHAR?

各位高手:

C51中 INT 转换为 CHAR 如何转换诸如:

X = LOW(Z);

Y = HIGH(Z);

答:

x=(char)z;

y=(char)(z>>8);

十九、如果我想使2EH的第7位置1的话,用位操作可以吗?

现在对位操作指令我一些不太明白请各位多多指教:

如 SETB 07H 表示的是20H.7置1,对吗?(我在一本书上是这么看到的)

那么如果我想使2EH的第7位置1的话,象我举的这个例子怎么表示呢?谢谢!

SETB 77H

setb (2eh-20h)*8+7

20h-2fh每字节有8个可位操作(00h-7fh),其它RAM不可位直接操作

二十、char *addr=0xc000 和char xdata *addr=0xc000有何区别?

char *addr=0xc000;

char xdata *addr=0xc000;

除了在内存中占用的字节不同外,还有别的区别吗?

char *addr=0xc000; 是通用定义,指针变量 addr 可指向任何内存空间的值;

char xdata *addr=0xc000; 指定该指针变量只能指向 xdata 中的值;

后一种定义中该指针变量(addr)将少占用一个存储字节。

uchar xdata *addr=0xc000;指针指向外ram;

如果:data uchar xdata *addr=0xc000;指针指向外ram但指针本身存在于内ram(data)



以此类推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;

data uchar idata *addr=0xa0;.........

二十一、while(p1_0)的执行时间?

假设,P1_0为单片机P1口的第一脚,请问,

while(P1_0)

{

P1_0=0;

}

while(!P1_0)

{

P1_0=1;

}

以上代码,在KEIL C中,需要多长时间,执行完。能具体说明while(P1_0)的执行时间吗?

仿真运行看看就知道了,

我仿真了试了一下,约14个周期

二十二、怎样编写C51的watchdog程序?

各位大虾,我用KEIL C51 编写了一个带外部开门狗的程序,可程序无法运行起来,经过查

找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入

主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一端

初始花程序,使他一运行,就设置开门狗?

可以在startup.a51中加入看门狗刷新指令,当然用汇编,然后重新编译startup.a51

,将他和你的程序连接即可。新的startup.a51会自动代替系统默认的启动模块。

二十三、keil C51 怎样把修改的startup.a51 加到工程文件中

直接加入即可

注意不要改动?STACK,?C_START,?C_STARTUP等符号。startup.a51直接加入项目,不用修改也可。可在内面自己修改汇编的一些*或堆栈指针。

二十四、关于波特率的设置

我在设定串口波特率时发现一个问题:在晶体震荡器为11.0592MHz时,若设9600BPS的话,

TH1=0XFD,TL1=0XFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么?

如果变了,又为什么?(因为我看书上俩个是一样的),希望大家点拨。

答:

当电源控制寄存器(PCON)第BIT7(SMOD)为1时波特率加倍。

TH1和TL1的值不变.

二十五、如何在C中声明保留这部分RAM区不被C使用?

我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:

DSEG AT 20H

AA: DS 10

这样C51就不会占用20H--29H了

或者在c51里这样定义:

uchar data asm_buff[10] _at_ 0x20;

二十六、问浮点运算问题

我在用C51时发现它对传递浮点参数的个数有*,请问:

1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也有*吗?

2)这种传递浮点参数的*有多少呢?

3)float*float的结果是float类型还是double类型?能否直接赋值给float类型的变量?

答:

由于KEIL C51的参数传递是通过R0-R7来传递的,所以会有*。

不过KEIL提供了一个编译参数,可以支持更多参数的传递。具体

的内容见KEIL的PDF文档。

我建议你把多个要传递的参数定义到指针或结构体中去,传递参

数通过指针或结构进行,这样好一些。

第3个问题回答是YES,你自己试试不就知道了。

二十七、如何在某一个地址定义ram

用_at_ 命令,这样可以定位灵活一点的地址

uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM

将dis_buff[16]定位在0x6020开始的16个字节

二十八、keil c中,用什么函数可以得到奇偶校验位?

例如32位数据,将四个字节相互异或后检查P即可,若耽心P被改变,可用内嵌汇编。

#include

unsigned char parity(unsigned char x){

x^=x;

if(P)return(1);

else return(0);

}

unsigned char parity2(unsigned int x){

#pragma asm

mov a,r7

xrl ar6,a

#pragma endasm

if(P)return(1);

else return(0);

}

热心网友 时间:2023-08-23 12:15

自己没有亲身做过实验吧?不然你自己会有自己的体会心得。如果没有,就写C语言的优点吧。

热心网友 时间:2023-08-23 12:16

实 验 报 告 一
课 程 C语言程序设计 实验项目 C程序设计初步 成 绩
专业班级 学 号 指导教师 张耀文
姓 名 序 号 实验日期

1. 了解使用VC++6.0的开发环境;
2. 掌握在该系统上如何编辑、编译、连接和运行一个C程序;
3. 通过运行简单的C程序,初步了解C源程序的特点;

输入并运行一个简单的正确程序
1)输入下面的程序
include <stdio.h>
void main( )
{
printf(" 欢迎学习C语言程序设计!\n ");
}
2).仔细观察屏幕的输入程序,检查有无错误。
3).对该程序进行编译,查看编译输出窗口,检查是否有错误,有错误需要改正错误。无错误就可以运行程序。
设计一个程序,已知矩形的两条边长为3.2和1.5,求矩形的面积。
求4和6的和,并在显示器上输出。然后修改程序从键盘上任意输入2个整数,并将二者的和输出。


c语言实验报告心得

6、确保程序中没有未调用的函数。在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。7、如果想节省data空间就必须用large模式。将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型...

c语言程序设计实验报告内容

12、实验心得:通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。其间开心过、郁闷过、无奈过、彷徨过……随着实验的胜利成功与实验报告的胜利完成,有点微微的自豪感使人难忘。感谢高克宁老师的高标准、严要求,感谢实验课上小老师们的耐心指点,也感谢我在实验中经历...

c语言先排序后折半查找程序的实验报告

8实验心得:通过折半查找,可以实现对数组数据的处理,并且增加了查找速度

有谁能够告诉我c语言的实验报告怎么写?

请给出对二叉树中结点的实现如上要求编号并按如下树状形式打印出相应点编号的程序。测试数据:输入 AB∪D∪∪CE∪F∪∪∪ (其中符号“∪”表示空格(space)字符)实验分析:本题的考察点:二叉树遍历应用。本题主要涉及到对二叉树的创建,二叉树的打印,以及在遍历的时候顺便给每个节点编号,这样打印...

大学生实验报告写作范文指导(精选6篇)

为了提高学生的动手 潜力,让学生做相关实训并完成单片机实验报告,在实验的形式上注重培养学生的实验技能和动手潜 力。从单片机实验心得中学生就能够总结出超多的经验以适应当代社会的发展。 学习单片机这门课程(教学中选用inter公司的mcs-51),要掌握单片机指令系统中汇编语言各种基 本语句的好处及汇编语言程序设计的基本...

结构体c语言实验报告结构体c语言

关于结构体c语言实验报告,结构体c语言这个很多人还不知道,今天来为大家解答以上的问题,现在让我们一起来看看吧!1、结构体定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。2、结构体作用 结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体...

C语言程序设计实验报告怎么写?

实验原理和设计方案:1、函数头的选则,while循环语句,switch(case)语句,条件表达式,if else条件语句,自增运算符,设置复杂变量,输出随机操作数。2、变量要有分数变量和等级变量,要有选择算法题数的变量和计算正确与否的变量,要有随机输出的两个操作数变量和自己按运算符号输入结果的变量,最后...

计算机实验报告 要有心得体会的

一、标题。关于XX实验的心得体会 二、 正文。实验目的 实验环境 实验内容 实验步骤 实验结果实验体会范文:关于word文档与excel表格的编辑与操作的心得体会 实训时间:xx年12月26日—12月28日 实训目的:通过上机操作形式,潜移默化地进行综合操作素质的训练,增强学生综合运用所学知识解决实际问题的能力。

c语言程序设计题。实验报告。高分。

c语言程序设计题。实验报告。高分。一、实习题目:1)运动会分数统计;任务:参加运动会有n个学校,学校编号为1……n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1...m,女子m+1...m+w.不同的项目取前五名或前... 一、实习题目:1)运动会分数统计;任务:参加运动会有n个学校,学校编号为1……n.比赛...

怎么写c语言综合实验设计报告?

c语言作业报告书 题 目:二次探测再散列法解决冲突建立哈希表并查找 完成时间:2012年5月31号 学 号:2011013290姓名:聂亮兵专业班级:信管112班 1. 实习任务与目的 实验任务:独立写出哈希查找的相关代码并画出核心的算法流程图,记录相关实验数据,得出实验结果。试验目的:通过两者运行时间的对...

c语言实验小结300字 c语言实验感悟 c语言实训心得体会200字 C语言实验报告心得500字 C语言实验分析与体会 c语言实验报告分析与体会 C语言程序设计实训心得体会 语言实训心得体会 c语言实践报告总结1000字
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么软件借钱容易审核过 wifi监控摄像头能监控到我上网浏览的内容吗? 中国岛屿绝大部分分布在()以南的海域? 体温正常,医生看喉咙也没事,就是喉咙左侧疼的厉害,跟针扎一样疼,扭动脖... 被骗在借条上签名了怎么办呢 喉咙里面左边疼,感觉吞口水或喝水疼,右边没事,就喉咙左边疼啊,有点肿... 因为受骗而写的借条有法律效果吗? 嗓子左边疼… 被骗打借条不放款我应该怎么办? 被骗写借条会怎么处理 如何用matlab求解向量微分方程 帮我找些古诗 怎么弄到QQ密码 推荐几篇关于辩论的古诗文 辩论褰规则究竟是什么呢? qq注销申请页面链接 怎么注销qq在所有网站注册的业务 注销QQ交友用户的网址? 注销QQ号的网站有没有? 谁有注销QQ的网址? 怎么注销网页QQ 可以在电脑上下载免费的ps软件吗 如何? 电脑ps软件有免费的吗 这是怎么回事啊?我qq不能注册新账号 qq要怎么注册新账号 为什么QQ账号注册不了?手机号是新的无违章行为 现在注册不了QQ号了? QQ注册失败该怎么办? QQ账号注册不了是怎么回事 红豆,赤小豆,小米,薏米,茨实,燕麦能一齐煮粥吗 adc0809的多通道c程序设计? skt t1烬的皮肤什么时候卖 linux 的program问题 win7封装激活参数怎么填? 苹果7p值得买么 现在的苹果7p多少钱买合适 苹果7p怎么样啊 苹果7p是什么处理器 三星手机怎么查保修期? 三星的手机怎样查保修期? 我要买阿曼提奶粉 阿曼的风俗习惯是怎样的气候最高气温 在迪拜机场买什么东西比较划算 骆驼选美在哪个国家举办的? 阿曼有什么好玩的地方 阿曼的风俗习惯是怎样的气候最高气温 日本1-0阿曼升至小组第二,如何评价这场比赛? 阿曼人的简介? 为什么阿曼有一部分领土在霍尔木兹海峡? 中国,俄罗斯,沙特,非洲中那个地方用骆驼奶帮助艾滋病人?