51单片机中断 C语言?请教!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机中断 C语言?请教!相关的知识,希望对你有一定的参考价值。

时间长了没接触C51 我想问下C51里的中断是怎么写的好像什么interrupt using 什么的 能介绍下一一对应关系吗?特别是那个using后面的0,1,2,什么的 是怎么确定的?有没有什么规则?
"n是中断号,范围是0-31"而51一般就五六个中断 为什么会有0-31这么多的中断号。

格式是:函数类型 函数名(形式参数表) [interrupt n][using n]
interrupt是中断函数类型关键字,其后面的n是中断号,范围是0-31
51单片机内可以在片内RAM中使用4个不同的工作寄存器组,每个寄存器组中包含8个工作寄存器(R0-R7)。而using就是用来选择不同的工作寄存器组的,其后面的n是一个0-3的正整数,分别选中4个不同的工作寄存器组。using是一个选项,如果不用则由编译器自动选择一个寄存器组作为绝对寄存器组访问。
注意:关键字using和interrupt的后面都不允许跟带运算符的表达式,只能是一个在一定范围内的常数!

这个我就不太清楚了,可能是为了扩展使用,一般51单片机的接口多
参考技术A TS

请教一个 C语言 字符串数组之间比较的算法,谢谢

我把10个ip地址,赋值给了10个字符串数组,现在想比较它们之间的异同,相同的删除,重重复的优先级+1,想请您帮助的是,者10个字符串数组应该用什么办法进行比较呢,如果一一比较的话得40多次,太麻烦,请问有好的算法吗,谢谢

这种时候当然是使用标准容器拉
std::map可以满足你的需要

10个ip 地址 复制给10个std::string. 然后构造一个 std::map<std::string, int> 再逐个使用insert方法插入, 如果插入成功(通过检查insert的返回值, 具体请搜索msdn,这里篇幅有限。)

如果插入成功, 继续; 不成功,就表示有重复,将返回的那个已经存在的ip对应的优先级++, 再继续。

map的特点就是不重复,你省去了自己去写比较,去优化的繁琐,而且一般stl实现的效率都是很高的绝对不是你这种40多次的O(N)的,应该至少都是o(ln N)
参考技术A 定义一个二维数组char str[10][20];
然后把str[0]~str[9]看成10个字符串数组名就可以用循环了,再用一个数组int a[10]来记录优先级(a[]不要忘了初始化)
如:
n=9//用来保存还剩几个字符串
for(i=0;i<=n;i++)

for(j=i+1;j<=n;j++)//为什么这么循环就不用说了吧

if(strcmp(str[i],str[j]==0))

for(k=j+1;k<=n;k++)

strcpy(str[k-1],str[k]);
a[k-1]=a[k];

n--;
a[i]++;
//整个if就是从与前面相同的那个开始整体往前移一位达到删除的效果当然a[]也要移来保持一一对应,然后a[i]自加一表示优第i个的优先级加一


输出时str[0][20]~str[n][20]就是剩下的ip地址a[0]~a[n]就是ip地址所对应的优先级
代码没编译过,可能有些小问题,主要是说说方法

以上是关于51单片机中断 C语言?请教!的主要内容,如果未能解决你的问题,请参考以下文章

请教一个关于51单片机外部中断的问题

请教C51单片机,C语言编程,怎样把一个四位数存入(读取)外部数据存储器?请举例说明。

求一个51单片机简单的中断C语言程序

51单片机c语言中断函数不能进行参数传递,是啥意思,谁能解释一下

求51单片机中,用C语言写的五个中断源的中断函数的书写规则,就是进入中断函数时的那个函数名,并说明...

交通灯 C语言 单片机。中断函数问题