“T0中断服务程序不是一个子程序吗?但没看见在主程序中调用这个子程序啊,求讲解这个程序命令的运行过程,定时器怎么中断的?”
该子程序是在硬件产生中断的时候,跳转到相应中断入口后,再跳转到这个中断服务程序的。请注意函数后面的“interrupt x”声明,这是C51的扩展内容。
“用示波器测波形是测p10引脚,为什么是这个引脚,怎么确定的?p1_0不是个变量名吗?”
P1_0这个符号在前面的头文件 t89c51cc02h 中有定义。至于“为什么是这个引脚”,是由硬件设计及本程序共同确定的。P1_0(不是你写的p1_0,C语言要区分大小写哦)代表P1口的第0管脚,在头文件中通过sbit定义。
“为什么T0中断服务程序和主程序中都有T0的初值,设置还是一样,他们有什么关系?”
主程序前面的是对Timer0初始化,赋以初值。执行 TR0 = 1; 这一句以后,Timer0就开始运行了——TL0与TH0组成的13位计数器开始不断递增。当13位全部为1之后,再递增就全部为0,此时溢出事件会触发产生定时器0,同时计数器仍然在继续计数——为了让时间间隔保持一致,就需要再度将计数器赋以初值。
汗前面就你发的把J发成I了
如果是这样的话,那么你那个问题里另外个人说的没错
题目的意思是 检验偶数(比如2)是两个素数(比如1) 的和
如果该偶数能够使两个素数的和,那么输出这条式子
比如8,当j=3的时候8=5+3,3和5都是素数(质数),那么就输出这条式子
public static boolean isPrime(int n){
for(int i=2;i<=n;i++){
if(n%i==0) return false;
}
return true;
}
是判断是否为质数的函数,即对于一个n,从2到n的数一个一个来尝试,来测试n是否是质数,如果对于其中一个数的余数为0的话,他就不是质数,返回false;如果对于每个数取余数都不为0的话,他就是质数,返回true
这个我已经说过了
for(int i=6;i<=100;i+=2){ //这里是对于6到100(包括6和100)的偶数一个一个进行检测(循环)
for(int j=2;j<100;j++){ //这里是对于上面所给的偶数再进行循环测试,其实这里不应该用j<100,而是应该用j<i,这样就是用从2到n的范围内的所有素数来检测这个偶数。
if(isPrime(j)&&isPrime(i-j)) //这里用了一个与运算,isPrime(j)在前,那么如果j为素数它才会进行检测。
这样懂没?
#include<stdioh> //定义头文件
#define TRUE 1 //定义常量TRUE为1
#define FALSE 0 //定义常量FALSE为0
typedef int Bool; //定义int的同义字Bool,此句和上面两句伪造了bool型
main()//主函数
{
Bool digit_seen[10]={0}; //定义一个叫 digit_seen 的Bool型(整数型)数组,并把每个数组元素定义为0(既FALSE)
int digit; //定义一个int(整型)变量,名叫digit
long int n; //定义一个长整型变量叫n
printf("enter a number:"); //在屏幕上打印(输出)"enter a number"(不包括引号)
scanf("%ld",&n); //输入一个长整型变量并传递给n
while(n>0) { //循环开始,在n>0的情况下进行循环
digit=n%10; //把n除以10的余数赋值给digit变量
if(digit_seen[digit]) //如果digit_seen数组的第digit个(从第0个开始)元素不为0(既为TRUE)
break; //那么退出此循环,结合下面来看,如果有两个重复的数字出现在n里面,那么退出循环,因为此时n>0,所以为后面的判断提供条件。
digit_seen[digit]=TRUE; //在循环没有退出的情况下,程序往下运行到句。功能是:把digit_seen数组的第digit(就是当前位的那个数字)记录为TRUE,说明n里面某一位有过digit
n/=10; //这句和n=n/10的效果是一样的,都是把n缩小10倍的整数部分赋值给n(整型除以整型得到的数还是整型)
} //到循环开始进行判断,如果n/10后已经为0,结束循环,此时n=0为后面判断做条件
if(n>0) //如果n>0,就是中途退出循环的情况,说明n里有重复数字
printf("repeated digit\n\n"); //输出"repeated digit"和两个换行(“重复数字”的意思)
else //这里的else只有一种可能,就是n=0说明正常结束循环,n里面没有重复数字
printf("no repeated digit\n\n"); //输出"no repeated digit"(无重复数字)和两个换行。
return 0; //程序正常结束
}
/总结,此程序判断一个数字的所有位数是否有重复,如124571有重复,123456没有重复/
c3=MUL(c0,6)^MUL(c1,4)^MUL(c2,3)
//这里是调用上边定义的函数 int MUL(int a,int b)
其作用是 将 这三组数据 c0和6 , c1和4 ,c2和3 分别作为这个函数的实参然后求出对应的结果,然后将三个结果 做 异或运算( 即 ^ ),
最后将这 经过两次异或运算得到的结果赋值给c3
问题:
1 main()函数是主函数,任何应用程序执行的入口 ;而函数 int MUL(int a, int b)是用户自定义的一个处理某件事情的函数,即实现某个具体的功能的函数; 在这里前者main中调用了函数MUL()的地方就是
c3=MUL(c0,6)^MUL(c1,4)^MUL(c2,3) //这里连着调用了三次MUL(int a, int b)这个函数
2 int MUL(int a, int b) 这里面的return a;实际上就是这个函数的返回值,也就是经过一番处理后得到了数据a的值,然后将其返回
假设
x = MUL(c0,6); //此处将 a = c0, b = 6带入原函数进行一些列 *** 作得到a,然后return a; 这时x等于此时的a;
y = MUL(c1,4);//此处将 a = c1, b = 4带入原函数进行一些列 *** 作得到a,然后return a; 这时y等于此时的a;
z = MUL(c2,3) ; //此处将 a = c2, b = 3带入原函数进行一些列 *** 作得到a,然后return a; 这时y等于此时的a;
那么主函数中调用这个函数的表达式 c3 = MUL(c0,6)^MUL(c1,4)^MUL(c2,3);
就可以 简化为 c3 = x ^ y ^ z;
而这里的x,y,z 都是经过调用这个函数得到的数据(也就是 每次调用这个函数 return a; 中的这个a 的值)
建议楼主去看看C语言的函数这一章节的资料,那样你会更加明白的
以上就是关于单片机C语言程序,看不懂,求讲解全部的内容,包括:单片机C语言程序,看不懂,求讲解、求此java程序的详细讲解、初学C,想请高手讲解下这个程序每个步骤的具体意思,谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)