单片机循环左移指令的一个程序 我想问一下为什么万位和千位没有循环for(j=50;j>0;j--);还有这句话是什么意思 求教大神

第5章单片机C51程序设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第5章单片机C51程序设计
上传于||暂无简介
大小:2.28MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢熟悉单片机的朋友请教一个问题_百度知道
熟悉单片机的朋友请教一个问题
启动定时器0
TR1=1;1000;
TL0=()%256;
/ #define uint
unsignedint #define uchar unsigned char float f=0;reg51,0x5b.h&i& uchar code table[10]={0x3f;
f=TH1*256+TL1; delay(20);
} / dec=dec % 100;/i--) for(j=110,请热心的朋友帮我看看吧;/
ET0=1;开定时器0中断 } /
} } 3 timer()interrupt 1 using 2 { i=i+1; /方式1
TH0=()&#47!#include& display().h&
//
TL0=()%256; 2 LED1_data=dec/
//0;
&#47,我实在不明白哪里错了; &#47,LED1_ #include&
delay(10);
{ dectobit(f),0x66;
EA=1,0x07;
P2|=0x04; void display(),LED3_256; /T1计数器 dec=dec % 1000;*将十进制数拆成送数码管的显示码*&#47,keil3上运行老是说第十行unit v附近有错误,0x06; for(i=c,0x4f,0x6d;T0定时器&#x6f}以下是一个红外测速实验的源代码; voidinit();
P2&=~0x04; uchari=0; void display() { P0=table[LED3_data];
TL1=0;个位 P2&=~0x01;十位 P2&=~0x02;j&j--);
P2|=0x08;/ voidinit() {
TMOD=0x51;
P0=table[LED1_data];&#47,少个); void delay(unsigned int c) {
} void main(void) { init(); void delay(uint v),j;256;*延时子函数*/ if(i==100) { i=0;千位 P2&=~0x08; LED2_data=dec/
} TH0=()&#47,谢谢; LED0_data=0;百位 P0=table[LED0_data],0x7f; P2|=0x01;*定时器初始化*/
delay(20);
} &#47,LED2_开总中断
TL1=0;100; delay(20); voiddectobit(intdec) {
LED3_data=dec/ dec=dec % 10;/*显示程序*//intrins,0x7d; uchar LED0_
P0=table[LED2_data]
提问者采纳
0x5b;&nbsp,0x6d;&&}&& {&&//开总中断&&if(dt==100)&&j&&&& P0=table[d2]; LED3=1;//十位sbit LED2 = P2^2;&&&&&for( ;&&&&&&&LED3=d%10;&&nbsp,0x6f};}/*********************************************************************//*********************************************************************/void init() //定时器初始化{& &&nbsp.jpg" esrc="&nbsp://a;&&& YS(10);& //T1计数器&#57344;& & &&&&T0定时器&#57344;j--);&&&&& TH1=0;&&&&&&&nbsp.jpg" />帮你改了改;&& dt++.& &&&/zhidao/wh%3D600%2C800/sign=4df8dca5eb3/b90e7bec54e736d11fe0e94e9a504fc2d4626980;void XS(uint d);#include&&&&&& TH0=()/256; &while(1)&&nbsp,0x66;}/*********************************************************************//*********************************************************************/void XS(uint d) //显示{&& //显示void YS( uint i);{&&&&nbsp://a;&&&&&&/zhidao/wh%3D450%2C600/sign=8a6f9dce7af5c8f6feefcb/b90e7bec54e736d11fe0e94e9a504fc2d4626980;&&& LED1=0,0x7f;P0=table[d1];&&&TL1=0;&& TMOD=0x51;&&&uchar dt=0;&&nbsp,d4;&//千位float df=0;&&&nbsp.&&&&&&&&&/zhidao/pic/item/b90e7bec54e736d11fe0e94e9a504fc2d4626980;方式1&& //取百位&//百位sbit LED3 = P2^3,d3;& &&&&&&ET0=1;&& TR0=1;&&&nbsp<img class="ikqb_img" src="http
提问者评价
其他类似问题
为您推荐:
单片机的相关知识
其他1条回答
这里有什么问题?
uchar i=0;
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁for(j=110;j>0;j--);}这个用于延时t毫秒事实证明它确实能做到11。0952的十二分频是0.6*110*=0.1sec这是为什么呢,t=1000">
关于51单片机的晶振void delayms(uint t){
for(i=t;i>0;i--)
for(j=110;j>0;j--);}这个用于延时t毫秒事实证明它确实能做到11。0952的十二分频是0.6*110*=0.1sec这是为什么呢,t=1000_百度作业帮
关于51单片机的晶振void delayms(uint t){
for(i=t;i>0;i--)
for(j=110;j>0;j--);}这个用于延时t毫秒事实证明它确实能做到11。0952的十二分频是0.6*110*=0.1sec这是为什么呢,t=1000
关于51单片机的晶振void delayms(uint t){
for(i=t;i>0;i--)
for(j=110;j>0;j--);}这个用于延时t毫秒事实证明它确实能做到11。0952的十二分频是0.9246,0.0/10^6=0.1sec这是为什么呢,t=1000,从数学上算却不是1秒?
因为你的计算方法是完全错误的,0.0/10^6=0.1sec,这样计算对于C语言是完全没用的, for(j=110;j>0;j--);这句话对于单片机可不是一个机器周期能完成的,他需要若干个机器周期才能完成,如果想要精确地计算出延时时间,需要看,编译器生成的汇编语言才能计算出来,下面是我用编译器生成的汇编代码C:0x000C
R5,#0x6EC:0x000E
R4,#0x00C:0x0010
A,R5C:0x0011
R5C:0x0012
C:0015C:0x0014
R4C:0x0015
A,R5C:0x0016
A,R4C:0x0017
C:0010C:0x0019
A,R7C:0x001A
R7C:0x001B
delayms(C:0003)C:0x001D
R6C:0x001E
delayms(C:0003)这只是for(j=110;j>0;j--);这一句话生成的,你可以去计算它的时间,绝对跟你实际的1S是对应的
另外你这程序写的。。。问题不少
51是8位机,尽量使用uchar数据类型,你看你用的uint,生成的代码很难计算时间;
C语言追求精确延时的意义不大,因为这受到编译器的限制,如果哪天编译器升级了或者你换了优化登记,可能生成的代码就变了,时间也就变了。
解决这个问题两种方法,一种是C语言调用汇编程序,绝对不会因为编译器的改变而改变,我曾经写过一个汇编的延时,C语言调用,时间范围是1ms到255ms,精度是4us,就是误差是固定的4us,延时1ms误差4us,延时255ms误差还是4另一种方法是生成最精简的汇编指令,让编译器无法钻漏洞,做好的汇编延时指令莫过于DJNZ 这条指令了,
void delayms(unsigned char t){
unsigned char i=250;
while(i!=0);
}参考这段程序,生成的都是DJNZ,不会因为编译器而改变,因为已经是最优化的了,而且很好计算,这个程序的延时时间是(250*2+2)*t个机器周期,通过改变参数或者再加一级延时可以很容易实现ms为单位的延时了
我对这个答案也很有兴趣第五章 单片机的程序设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第五章 单片机的程序设计
上传于||暂无简介
大小:674.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢单片机程序的问题:for(j=110;j&0;j--);_百度知道
单片机程序的问题:for(j=110;j&0;j--);
j&j&0;i--)
for(j=110void delay(unsigned int t){ }以上的for(j=110;0;t& 是什么意思;j--);0;j--); for(i=t,j
知道j=0的时候跳出循环多看看网上的资料,讲得比较详细,有C,循环一次j减1fou循环语句,视频教程都是有的。吴鉴鹰51单片机开发板可以自己弄快练习,视频教程都比较多,理论联系实际,模电
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 单片机循环语句 的文章

 

随机推荐