单片机C语言怎样编程才可也使两个不用的I/O口同时执行程序

打个比方P0口的蜂鸣器奏乐,P2口的流水灯不停从左往右闪,这两个程序要同时执行,怎样才能办到
最好举些例子

理论上的同时执行是不可能的,单片机运行程序的有顺序的,顺序执行每一条指令,同一个时间只能执行一条指令。
但是单片机速度比较快,执行起来给人感觉就是同时执行。
可以尝试一下用中断方式吧,主程序里面控制流水灯,中断程序里面控制蜂鸣器。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-15
给个思路吧,理论上单片机是不可以同时执行的,楼下说的很对!你可以利用单片机的定时器中断试试。因为定时器计数计数时不影响程序的执行只有计数计满时才去响应中断。先设置定时器,在中断函数服务里将蜂鸣器i o 口设置个取反,再写流水灯程序。理论上这样的程序当然是有延迟的偏差。但人眼是感觉不到微妙级的时间的,看上去就是同时执行一样!
第2个回答  2010-08-16
楼上讲得非常好。
第3个回答  2010-08-16
单片机只能执行一条指令。同时执行的就是嵌入式了。
所以用定时器中断吧。
楼上的说的已经很对了。
我也来凑哈热闹。
我就来给个例子吧。
比如我们的课程设计时用51的做个北京时间显示调整和秒表,倒计时,闹钟,整点报时的功能。
我做个定时器,然后北京时间就一直走,相当于你的流水灯原理,然后在我规定的时间到了,闹钟也就是蜂鸣器嘛,也开始响,这个时候我的北京时间也是在走的。应该就相当于你那个。

如果你觉得可以,我的程序可以给你。357541640。
第4个回答  2012-09-08
下面是一个大概的例子,由主程序mian和两个中断程序组成。

mian()
{
TL0=0XXX;
TH0=0XXX;
TR0=1;
EX0=1;
EA=1; //初始化程序
while(1) //等待键盘中断或者定时器中断结果
{
p0=0xXX:
p2=0xXX;
}
}

time0 interuper() //定时器中断程序
{
}

extr0 interuper() //键盘中断程序

51单片机两个I\/O口分别接ds18b20程序
uchar dis1[16]={76,45,84,'0','0','.','0',32,32,72,45,84,'0','0','.','0'};uchar dis2[16]={48,49,32,'0','0','.','0',32,32,48,50,32,'0','0','.','0'};uchar code tab[] = {'0','1','2','3','4','5','6','7','8','9'};uchar...

单片机如何用c语言来设置I\/O口,使I\/O口进入到输入或输出模式?
单片机的IO口缺省时一般都是双向,既可以是输入又可以是输出,C语言中判断这个口是输入还是输出要看表达式的形式,比如:sbit key=P1^0;if(key==1)...这里是作为输入的,因为是读入,再判断值 key=1;这里是作为输出,因为直接给其赋值。

单片机怎么用c语言设置I\/O口输入或输出
P1M1=255; \/\/all 推挽输出 而51单片机的所有IO引脚,在启动后默认都是1。因此,如之前没有对此引脚进行过置0操作的话,可以直接读该引脚。但为了保险起见,也为了使程序通用、可移植,最好在读取之前对此引脚置1。

用两组I\/O口控制16个流水灯的C51程序
数组可以,直接也可以 数组的话,比如定义个数组,uchar led[]={0xfe,0xfd,0xfb,0x07………};for(i=0;i<8;i++){ P0=led[i];delayms(1000)} 直接的话,同样的道理,只是代码比较多一些,每次重新赋值一次P0都需要延时一下。更简单的程序如下:include<reg51.h> \/\/包含单片机寄存器的头...

单片机的I\/O口可以同时作为输入和输出使用吗?
不可以同时使用,但可以在一个口上同时实现两种不同功能。举例:1S的工作周期,其中990ms做输出用来点亮指示灯,10ms做输入检测外围信号,灯灭10ms人眼是分辨不了的,这样就实现了一个口同时支持两种不同的功能。

51单片机的准双向I\/O口在使用前必须进行写1操作,但上电时,单片机默认为...
51单片机的准双向I\/O口在使用前必须进行写1操作,--只是在《读》IO口之前,需要写1。但上电时,单片机默认为高电平,即还需要进行写1操作不?--不用了。只是当做输入接口来用,才有写 1 这个说法。写过一次 1 (或复位后自动置 1),就可以正确输入数据了。但是,如果写了 0,那么,接着...

单片机P3口第二功能与普通I\/O口可以同时使用吗
是怎么个“同时”使用,是一些口使用第一功能,另外一些口使用第二功能,这是可以的 ,对于同一IO口,要么使用第一功能,要么使用第二功能,怎么能同时呢?虽不能同时,但用第一功能和第二功能转换无需特别设置 如串口,只要你设置了定时器波特率,启动发送指令,在发送端上就有串行数据输出 ...

单片机的I\/O口可以同时作为输入和输出使用吗?
不可以同时使用,但可以在一个口上同时实现两种不同功能。举例:1S的工作周期,其中990ms做输出用来点亮指示灯,10ms做输入检测外围信号,灯灭10ms人眼是分辨不了的,这样就实现了一个口同时支持两种不同的功能。

单片机编程中怎么将一个I\/O端口拆分成两个可以分开控制?
你是想只通过一个端口引脚的输出,来得到两个以上功能的实现??那么就给这个端口输出串行数据,然后通过端口外部电路对串行数据进行解码来分别获得不同的功能控制了;最好是你把具体问题说清楚来;

一个单片机的两个I\/O口可以直接相连吗?
不可以直接相连。当两个I\/O口直接相连时,会导致短路或干扰等问题。为了避免这种情况发生,通常需要通过中间的电路元件(如电阻、二极管等)来进行隔离或限制电流。这样可以保证电路的正常工作和信号的稳定传输。

相似回答