PIC单片机中(PIC12F5048):
1> goto 语句后面可以加变量吗?如 goto $ + 3; 这里的$ +3 可以改为
变量吗?(不是标号,是变量).
2> 我用循环语句计时:
MOVLW 05H;
MOVWF TEMP1; TEMP1是变量。
LOOP:
DECFSZ TEMP1,1; 此语句1US,
GOTO LOOP; 此语句2US,
这样TEMP1每减少1,时间减少3US,
这里能不能用什么方法,让TEMP1每减少1,时间减少1US。
我不太会用C,问下,你的语句;
for(i;i>0;i--);
每次调用的时候,i可以少一,但是我想问下,这个i少1,时间是少1US吗?
(我这个用的是PIC12F508,最大的数也才能255)
我原来给赋值的命令有问题,不用加全局变量,可以直接输入数字,调用局部变量
#include //选用的是12.0MHz的晶振
void dalay1us (unsigned int k) //晶振选用12.0,最大输出频率为6Hz
{
unsigned char i,j,temp; //局部变量i,j,temp定义
while(k) //k不等于0时候,会一直循环下面的内容
{
for(temp=k;temp>0;temp--)
for(i=4;i>0;i--) //执行周期为4X250=1000
for(j=250;j>0;j--); //如果选用的是12.0MHz的晶振,那1000个周期的时间,刚好是1us
k--; //循环结束后,k=k-1,再进入while(k) ,直至k=0后,结束循环
}
}
void main()
{
dalay1us (3); //调用void dalay1us (unsigned int k) ,并将k=3;
}
以上dalay1us (3); 执行的时间是3us+2us+1us=6us
如果选用的是12.0MHz的晶振,那1000个周期的时间,刚好是1us?
不是一个周期1US吗?1000个周期就是1ms了吧。
哦,对,单位错掉了,呵呵,真不好意思啊,那直接用下面的就可以了
void dalay1us (unsigned int k) //晶振选用12.0,最大输出频率为6Hz
{
unsigned char temp; //局部变量temp定义
while(k) //k不等于0时候,会一直循环下面的内容
{
for(temp=k;temp>0;temp--);
k--; //循环结束后,k=k-1,再进入while(k) ,直至k=0后,结束循环
}
}