单片机中的Timer0Interrupt(void) interrupt 1下的程序是用来做什么的?
定义好了中断,后面的中断子程序是Timer0Interrupt(void)interrupt1?然后这下面的程序是用来做什么的?希望有达人对中断了解的为我详细说明中断的一...
定义好了中断,后面的中断子程序是Timer0Interrupt(void) interrupt 1?
然后这下面的程序是用来做什么的?
希望有达人对中断了解的为我详细说明中断的一些知识,谢谢了!!
可以帮写一个程序吗?主程序是P0.0亮,每过5秒,中断一次中断时P0.0灭,P0.1亮。
写出程序的话再加30分。 展开
然后这下面的程序是用来做什么的?
希望有达人对中断了解的为我详细说明中断的一些知识,谢谢了!!
可以帮写一个程序吗?主程序是P0.0亮,每过5秒,中断一次中断时P0.0灭,P0.1亮。
写出程序的话再加30分。 展开
4个回答
展开全部
#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亮。。。一直循环下去。如果需要,你也可以在中间加上中断循环次数。。。
#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亮。。。一直循环下去。如果需要,你也可以在中间加上中断循环次数。。。
更多追问追答
追问
我要的其实不是程序,我要的是让我能看明白,能学懂。
程序是最直接的方法,但你写的程序中有太多疑问,能写简单点吗?或者你把这整个程序给我讲一下?
不胜感激!
追答
你试了么,是不是和你的要求一样啊,如果一样我在讲,不一样也没讲的必要了 你想理解的话,可以一个子程序一个子程序的理解。像void delay()这其实就是一个1s延时函数;而void chuzhi()呢,就是设置一些初值,TH0、TL0是定时计数,EA、ET、TR0是开启定时中断T0;void time()interrupt 1是中断计时的,剩下的主函数就是实现你的功能的。。。。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)
学单片机一定要对程序执行的过程、步骤分析清楚:什么时候程序运行到哪儿,下一步走向哪儿
{....
.....
}
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)
学单片机一定要对程序执行的过程、步骤分析清楚:什么时候程序运行到哪儿,下一步走向哪儿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是中断程序啊,就是你单片机的定时时间到了之后,你想让他干嘛就把程序写在这个中断下面。不懂追问。
追问
你可以帮写一个程序吗?主程序是P0.0亮,每过5秒,中断一次中断时P0.0灭,P0.1亮。
写出程序的话再加30分。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询