单片机C语言中为何要定义 如: .. void delay() { unsigned char i;for(i=0;i<10;i++) } 与硬件和软件关系

上题没完善在unsignedchari;... 上题没完善在unsigned char i; 展开
 我来答
smokeghost
2012-10-14 · TA获得超过544个赞
知道小有建树答主
回答量:354
采纳率:100%
帮助的人:342万
展开全部
你好
这个问题回答透彻比较繁琐,楼上的两位说的都不错,我这样解释,不知你能明白吗。
1.void delay() 是一个子程序的名字,是软件
2.{ for(i=0;i<10;i++) } 是这个子程序的内容,作用 操作硬件的软件,操作的硬件i(名字)。
3. unsigned char i;定义该子程序操作的硬件(内存中的一个寄存器,数值范围0-255),无符号8位变量,想这个你应该知道。
你要是学习过汇编,这个就不难理解,下面给出这个程序的汇编,你对比一下,示例说明,不一定能用,哈哈,好久没玩过汇编,都快忘记了。就是说明c语言与汇编的异同。

equ i 0030H //定义内存地址30(16进制)的寄存器为i,在汇编中,也可不定义,直接对30H进行操作。汇编中数字不带H,为10进制,后缀带H为16进制。
delay: //定义子程序,方便调用,也可为其他名字,如loop1等。
L1:inc i //寄存器i(30H)加一。L1为行号。
cjne i 10 L1 //比较不等则转,这里回到上一行。相等则往下执行。
ret //子程序返回
对于你对楼上两位的追问,c语言就是一个平台(或者说环境),就像一个游戏,你想玩好就必须遵从游戏规则,或者说他就是这样用才行,否则免谈。
再说一下unsigned char i;就是c语言按自身的规定,或随机给你定义一个可操作的51内存变量,不一定是30H,可能是30H-07FFH中的任何一个,想搞明白,的详细研究c了。不过作为c51的应用,会用就行,就行office的办公软件,会用就好,没必要去追究他是怎么运行的。
百度网友00e4ec0
2012-10-14 · TA获得超过308个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:145万
展开全部
我在你刚才那个提问已经回答过了啊:

这个函数是用来进行时钟延时的。
一般做一个硬件操作,需要等待一段时间再取结果的时候使用这个函数。

i和软硬件都没关系,只是一个循环,目的是让cpu循环10次来等待一小段时间。
这个10一般是个经验值,就是说写代码的人凭经验来估算他所采用的cpu(比如51)大致要等这么长时间。
它和cpu运算速度以及编译器编译代码效率都有关系。
在实际操作中这个循环次数还是需要仔细的调试来确定次数的。

看你还是没明白,我给你举个例子吧。
比如你要做一个串口有线鼠标(串口设备),你鼠标加电以后是不是要初始化?是不是要和上位机(比如PC)通讯?
这时候你和上位机是不是要协商串口波特率?
你告诉上位机你的波特率,要等待上位机应答。这时候是不是要delay等一段时间再去获取应答?
如果不等,发出去马上就收,是不是就收不到数据?波特率协商就失败了吧?那你设备还怎么工作呢?

再给你个例子,比如你要对电压做采样,采样频率10/s,那么每秒采集10次。
这时候你怎么处理10/s的采样呢?是不是要写个循环函数去等?是不是要想办法每两次采集之间等100个毫秒?
如果没这个delay,你的采样能准么?程序能正常工作么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生活如歌_
2012-10-14 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2172万
展开全部
1.不同的数据类型在单片机里所占的内存多少不一样,比如unsigned char是一个字节,unsigned int是2个字节。这样根据不同的需要可以分配不同的单元 ,可以有效的节省单片机里的有限的内存空间,并符合你的程序里对数据大小的需要。
2.你例子中是子程序里定义的局部变量,在这个子程序执行完退出后,相应的变量被释放,占用的内存空间可以继续使用,也可以节省单片机的内存空间。
更多追问追答
追问
这个我知道,我就是不明白为什么要去定义 如果不定义 那么该程序软硬件都无法执行
追答
是的,这个是C语言的要求,变量在使用之前必须先定义。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seizeF
2012-10-14 · TA获得超过412个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:227万
展开全部
只看到一个函数定义,即一个spin循环用来等待一段时间。这里没有上下文,不能作出具体解释。
追问
如果没关系那么 不去定义该程序是不成立的
追答
我想可能是某些地方引用了这个函数,或者有时序相关的原因,比如某个操作需要在delay之后才能够完成,而这个操作是异步的,所以用这种简单的方式来等待那个操作完成。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式