📄 file2.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 + -