汇编语言/C语言实现流水灯控制系统

汇编语言/C语言实现流水灯控制系统仿真实验

话不多说,上干货!

proteus仿真原理图

在这里插入图片描述

汇编语言代码(Keil uVision5)

       ORG 0000H             //程序的开始地址0000H(LJMP)
       LJMP MAIN             //无条件转移指令,跳转到MAIN函数位置   	   
       ORG 0030H             //以下程序(MAIN)从0030H开始保存(未用中断,可从0003H开始)  
  MAIN:MOV A,#0FEH           // A=1111 1110B(0FEH)
LIGHT0:MOV P2,A              //P2=1111 1110       
       RL A                  // A=1111 1101(左移指令)	   
       LCALL DELAY0          //调用子程序DELAY0	   
       CJNE A,#0FEH,LIGHT0   //A=?1111 1110,判断不相等跳转指令	   
       MOV A,#0BFH           // A=1011 1111
LIGHT1:MOV P2,A              //P2=1011 1111       
       RR A                  // A=1011 1111(右移指令)	   
       LCALL DELAY0          //调用子程序DELAY0	   
       CJNE A,#7FH,LIGHT1    //A=?0111 1111,判断不相等跳转指令	   
       MOV A,#0FDH           // A=1111 1101	   
       SJMP LIGHT0           //跳转到LIGHT0
DELAY0:MOV R7,#240           //R7=240(设置外循环次数)
DELAY1:MOV R6,#240           //R6=240(设置内循环次数)       
       DJNZ R6,$             //R6=R6-1≠0,原地跳,延时240*2us=480us	   
       DJNZ R7,DELAY1        //R7-1≠0,跳DELAY1,延时2+240*(1+480+2)=115.922ms	   
       RET                   //子程序返回	   
       END                   //程序结束

C语言代码(Keil uVision5)

#include<reg51.h>
sbit LED=P2^0;
void delay(unsigned int t)
{
    unsigned int i=0,j=0;    
    for(i=0;i<t;i++)
    	{
    		for(j=0;j<200;j++);	
        }
}

void led()
{
	  int m=0,n=0;
	  for(m=0;m<8;m++)
	  	  {		
	  	      P2=~(0x01<<m);//0000 0001_>0000 0010			
	  	      delay(50);
	  	   }
	  for(n=0;n<8;n++)
	  	  {	  P2=~(0x80>>n);//1000 0000_>0100 0000			
	  	      delay(50);
	  	   }
}

void main()
{ 
   while(1)
   	{	
   	led();
   	}
}

又菜又爱玩,话不多说,赞

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
交通灯控制是一个非常典型的实时控制系统,通过使用C语言汇编语言混合编程可以更好地实现实时性和可靠性。下面我简单介绍一下如何使用C语言汇编语言混合编程实现交通灯控制。 首先,我们需要了解汇编语言中如何实现控制输出端口,这是实现交通灯控制的关键。在汇编语言中,我们可以通过OUT指令将数据输出到指定的端口,例如: ``` MOV AL, 0x01 ; 将0x01存储到AL寄存器 OUT 0x80, AL ; 将AL寄存器中的数据输出到0x80端口 ``` 在这个例子中,我们将0x01输出到0x80端口,实现了控制输出端口的目的。 接下来,我们可以使用C语言调用汇编语言实现的控制输出端口的函数,从而实现交通灯控制。下面是一个简单的示例代码: ```c #include <stdio.h> void control_port(unsigned char data); int main() { while (1) { control_port(0x01); // 绿灯亮 delay(5000); // 延时5秒 control_port(0x02); // 黄灯亮 delay(2000); // 延时2秒 control_port(0x04); // 红灯亮 delay(5000); // 延时5秒 control_port(0x02); // 黄灯亮 delay(2000); // 延时2秒 } return 0; } void control_port(unsigned char data) { __asm { MOV AL, data ; 将data存储到AL寄存器中 OUT 0x80, AL ; 将AL寄存器中的数据输出到0x80端口 } } ``` 在这个示例代码中,我们定义了一个`control_port`函数,该函数调用了汇编语言实现的控制输出端口的函数。在主函数中,我们实现了交通灯的循环控制逻辑,通过调用`control_port`函数实现对输出端口的控制。 需要注意的是,上面的示例代码中使用了`delay`函数来实现延时,该函数需要根据具体的系统平台和编译器进行实现。在实际应用中,我们需要根据实际情况进行调整和优化,以满足实时性和可靠性的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿离不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值