单片机C语言程序,看不懂,求讲解

单片机C语言程序,看不懂,求讲解,第1张

“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,想请高手讲解下这个程序每个步骤的具体意思,谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9755040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存