单片机问题

void dd1ms()
{uchar i;
for(i=2000;i>0;i--){}}此单片机的晶振为12MHz,z咋会实现1ms的延时,请高手指导一下,谢谢了.还有定时器不断刷新来实现时间的前进呢?

把外部RAM中1000H~1030H的内容传送到内RAM的30H~60H中。

2.试编制程序实现1+2+3+……+100=?结果的商8位保存内RAM中51H单元中,低8位保存在50H单元中。

3.已知8051单片机使用的晶振为12HZ,试编制延时40ms的程序。
我需要知道程序!
提问者: Oct_JuJu - 童生 一级 最佳答案
6月4日 20:56 我来提个思路吧,具体程序有你来编写.单片机这个东西是越琢磨越有意思,只要思路对头你就能做得出来.对自己要有信心.
1、这个问题主要应解决两部分
一是状态的读入和处理。因为是高电平有效,在电路设计中应该为P1口上装上下拉电阻。处理主要是把他们从二进制转换到十进制,然后转换成七段码以便驱动数码管。转换的方法有多种,你可以对他进行判断他是否在100以内、100与200之间还是大于200。小于100直接用DA转换成十进制,并记高位为0;在100与200之间就先减去100然后用DA转换并记高位为1;大于200之间就先减去200然后用DA转换并记高位为2。至于转换为七段码的方法无非有两个——译码器译码和查表译码。对于这个小项目没必要增加硬件消耗,所以建立一个译码表查表即可。这里需要查三次,分别是高位、低位高4位和低位低4位。查表后要在RAM中建立一个显示缓冲区,三个字节就可以了。
二是输出问题。采用动态显示3个数码管就可以了,定时10ms把显示缓存区相应的数据送到P0口,当然P0口需要驱动放大的。同时利用P3口的3个引脚做位选信号分别选择相应的数码管,同样也少不了驱动。
2、这个问题比较简单,你只要把信号输入到外部中断INT0或INT1就可以。外部中断设置为脉冲中断,这个中断子程序在一个标准时间段(如1S)内对一个计数器加一计数。然后把这个数乘以6(这个数是60除以10得到的)就是一分钟内的转数了。另外虽然你没提到,不过我想你还是要做个显示的,显示同上。
3、这题因为我不太了解574所以没办法帮你了,不好意思。

希望我说的这几句话能帮到你,也希望你能因此对单片机产生兴趣:)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-01
void delayXms(unsigned int z)
{
unsigned int a,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}
这个是延时Xms的函数;
调用的时候是 delay(1);就是延时1ms;
第2个回答  2012-08-30
这是51的吧,12个机器周期为一个指令周期,也就是说12次振荡的时间CPU执行一次指令.12M晶振一个指令的执行时间为1uS,for(i=2000;i>0;i--){}这一句的意思就是第一步.i=2000;第二步:i如果大于0,则执行第3步,如果等于或小于0则退出;第3步:空操作,一个指令周期时间;第四步:i自减1,也就是i=i-1,然后回到第二步循环.
一直这样下去的话那么这条语句就是执行了2000次,最后的具体时间因为是用的C语言,所以不好算,不好可以通过软件仿真得到时间.
相似回答