发布网友 发布时间:2024-10-23 22:08
共4个回答
热心网友 时间:2024-11-06 05:23
那是中断服务程序,看你贴出来那个函数名称貌似是定时器0的中断,定时器你装完初值,开定时器后,定时器就开始计时,定时器有四种工作模式,比如工作方式0,16位定时器,可以定时65536us,当从初值加到65536后,产生溢出,定时器向cpu申请中断,cpu转去执行中断服务程序,执行完后回到main函数,51单片机共有5个中断源,外部中断0,定时器0,外部中断1,定时器1,外加串行口中断、
热心网友 时间:2024-11-06 05:18
这是中断程序啊,就是你单片机的定时时间到了之后,你想让他干嘛就把程序写在这个中断下面。不懂追问。
热心网友 时间:2024-11-06 05:20
void INT0()interrupt 0 using 1
{....
.....
}
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
using 0 是第0组寄存器;
using 1 是第1组寄存器;
using 2 是第2组寄存器;
using 3 是第3组寄存器;
51单片机内的寄存器是R0--R7(不是R0-R3)
R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。
using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H)
using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(08H)....R7(0FH)
using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(10H)....R7(17H)
using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(18H)....R7(1FH)
学单片机一定要对程序执行的过程、步骤分析清楚:什么时候程序运行到哪儿,下一步走向哪儿
热心网友 时间:2024-11-06 05:21
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar time,temp,l;
void delay()
{
uchar h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--)
;
}
void chuzhi()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
temp=0xfe;
P0=temp;
}
void main()
{
chuzhi();
while(1)
{
if(time==100)
{
time=0;
TR0=0;
temp=0xfd;
P0=temp;
}
delay();
P0=0xfe;
TR0=1;
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}
花了我一个小时,程序终于编完了,我试了一下,效果还行!!!编的可能不太完美,毕竟我也开始学,但是功能有了!你说的中断一次中断时P0.0灭,P0.1亮,我又让它在中断完之后,重新让P0.0亮,P0.1灭,然后再过五秒、中断、P0.0灭,P0.1亮。。。一直循环下去。如果需要,你也可以在中间加上中断循环次数。。。