⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file2.c

📁 单片机学习系统附的实验源代码
💻 C
字号:
// 这里是延时程序,里面有两种延时方式
//一种是 采用直接c语言编写
//另外一种是采用内嵌汇编代码的方式,也演示了
//如何嵌入汇编代码的方法
//结果为: led 指示灯变化花样显示

#include <8051.h>

void delay(unsigned char times);
void delayf();

void main()
{
    int k;
    P0 = 0;            //关闭数码显示
    P2 = 0;            //
    P3_7 = 0;          //关闭蜂鸣器
    
  while(1)             //设置一个无限制循环
 {  P1 = 254;          //从第一个灯开始显示
    for(k=0;k<8;k++)
    {delay(255);       //左移采用c代码写的延时子程序,(速度比较慢)
      P1 <<= 1;        //表示,p1每次向左一位
    }
    for(k=0;k<8;k++)   //第二次重复
    {delayf();         //右移采用汇编写的代码,(速度比较快)
      P1 >>= 1;        //表示,p1每次向右一位
    }	
  }
}

//下面是延时程序。具体的延时时间不能通过表面程序看出,(为什么?)
//如果我们需要一个精密的延时程序,那么我们可以采用内嵌汇编代码的方式
void delay(unsigned char times)
{
    int t=20000;           //延时倍数
    unsigned char i=times;   
    for(;i!=0;i--)
    {for(;t!=0;t--){}}
}
 
//  这里是一个用内嵌汇编方式的延时代码
//  固定延时时间为 255*128 = 32640 机器周期(理论值)
  void delayf()
 {
   _asm 
      mov R1,#0        //这个是延时常数 R1
  lp: mov R0,#128      //这个延时常数   R2 
  lk: djnz R0,lk
      djnz R1,lp    
   _endasm;            //总延时 T = R1*R2 机器周期
//说明: 在_endasm 后面必需一个 分号 (;),而其他地方不需要
 } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -