51单片机不用定时器延时1ms
时间: 2023-07-02 18:04:44 浏览: 140
51单片机不用定时器延时1ms的方法有多种,其中一个简单的方法是使用nop指令(空操作指令)。nop指令的执行时间为一个机器周期,即12个晶振周期。因此,可以通过多次执行nop指令来实现延时。例如,在使用12MHz晶振的情况下,延时1ms可以使用以下代码:
```
void delay() {
unsigned char i, j;
for (i = 0; i < 110; i++) {
for (j = 0; j < 2; j++) {
_nop_();
}
}
}
```
其中,循环嵌套了110次,每次内部循环执行两次nop指令,总共延时了110*2*12=2640个晶振周期,即1.1ms左右。根据实际需要,可以根据晶振频率和需要延时的时间调整循环次数。
相关问题
51单片机定时器延时750ms
根据引用[1]中的代码,可以使用以下函数来实现51单片机定时器延时功能:
```c
void delay_ms(uint16_t t) {
uint16_t count = 0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while (1) {
if (TF0 == 1) {
count++;
TF0 = 0;
TH0 = 0xFC;
TL0 = 0x66;
}
if (count >= t) {
break;
}
}
}
```
根据引用[3]中的代码,可以使用以下代码来实现延时750ms:
```c
#include <REGX51.H>
void main() {
unsigned int a = 0;
unsigned code led[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // 低电平发光
TMOD &= 0xf0;
TMOD |= 0x01; // 定时器配置
TL0 = 0x18;
TH0 = 0XFC; // 初值1ms
TR0 = 1;
P1 = led[0];
while (1) {
static unsigned int T0count;
if (TF0 == 1) // 中断溢出
{
TF0 = 0;
TL0 = 0x18;
TH0 = 0xfc;
T0count++;
if (T0count >= 750) {
T0count = 0;
a++;
if (a >= 8)
a = 0;
P1 = led[a];
break;
}
}
}
}
```
这段代码会在P1口上循环显示led数组中的元素,每个元素显示750ms。
用51单片机定时器实现延时1ms函数
可以使用以下代码实现:
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<110;j++);
}
其中,n表示需要延时的毫秒数,i和j是循环计数器,通过嵌套循环实现延时。
阅读全文