
uint8_t ptr uint8_t len 这是传入参数。 len可能是长度,ptr可能指向的是一个数组。
^= 按位异或后赋值。
crc ^= ptr++; //首先将数组第一位异或后复制给Crc。之后ptr再向前一步,简单理解就是指向数组的下一位。
for(i = 0;i < 8;i++) { if(crc & 0x01) crc = (crc >> 1) ^ 0x8C; else crc >>= 1; }
//将取到数组第一位值,与0x01上。如果非零,crc就需要右移一位,再与0x8C异或。否则右移1位。每位数组值要做8次。
while(len--) //表示要判断数组内len个值。或则说是取得数组内len长度的元素个数。
return crc; //len个数组值都作完以后,将Crc返回。
我想你需要了解一下 0x01的意义,0x8C的意义。
0x01 = 0000 0001
0x8c = 1000 1100
没看到啊,已经有人答完了。哎,早知道就不写这么多字了。
明白你的意思,执行顺序是,while(1)循环中,当中断返回flag1s=1时,此时不会发生跳转,将继续执行完以前的程序部分,直到循环的边界,再返回到while(1)首部开始。
while(1)
{
if(flag1s == 1)
{
flag1s = 0;
sec++;
LedBuff[0] = LedChar[sec%10];
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10]; //比如此时flag1s=1,则继续往下执行
LedBuff[3] = LedChar[sec/1000%10];
LedBuff[4] = LedChar[sec/10000%10];
LedBuff[5] = LedChar[sec/100000%10];
} //到此返回从头开始,因此这段时间显示的还是之前的数据。
}
#include<reg51h>
unsigned char t=0;
void main()
{
TMOD=0x02;//定时器0,初值自动重新装入的8位工作方式
TH0=6;
TL0=6;//写入定时器初值,每250us中断
TR0=1;//启动定时器0
ET0=1;//打开定时器中断
EA=1;//开总中断
while(1)//程序循环
{if(t==20) //当t=20,即20x250us=0005s时执行 *** 作,同时置零t
{
t=0;
/////////////////////////////////// *** 作
///////////////////////////////////
}
}
}
void timer0() interrupt 1//中断函数,每250us中断,t的值加1
{
t++;
}
#include <reg52h>
sbit sw1=P3^0;
sbit sw2=P3^1;
sbit sw3=P3^2;
sbit sw4=P3^3;
sbit led2=P1^1;
void main()
{
while(1)
{
if(sw1==0)
P1=~P1;
while(sw1==0);
if(sw2==0)
led2=~led2;
while(sw2==0);
if(sw3==0)
P1=0x00;
while(sw3==0);
if(sw4==0)
P1=0xff;
while(sw4==0);
}
}
以上就是关于单片机C语言程序分析全部的内容,包括:单片机C语言程序分析、单片机C语言程序执行顺序问题,求解,、单片机C语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)