打印
[51单片机]

51单片机中断和定时的问题

[复制链接]
1447|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
Easy_Deng|  楼主 | 2014-3-21 21:43 | 只看该作者
时序如下

MediaLib_Camera Roll_WP_20140321_004.jpg (82.62 KB )

MediaLib_Camera Roll_WP_20140321_004.jpg

使用特权

评论回复
板凳
df_flying| | 2014-3-21 21:54 | 只看该作者
加个定时器,下降沿中断触发定时器,定个几百us什么的,用定时器中断产生所需电平...

使用特权

评论回复
地板
ningling_21| | 2014-3-21 22:18 | 只看该作者
在外部中断中启动定时器2毫秒的,2毫秒定时中断后把管脚置1同时关闭定时器,同时启动另一个定时器1毫秒的,中断后关闭定时器,等下一个下降沿信号...

使用特权

评论回复
5
弹弓| | 2014-3-21 22:50 | 只看该作者
楼上方法可行。

使用特权

评论回复
6
Easy_Deng|  楼主 | 2014-3-22 08:48 | 只看该作者
ningling_21 发表于 2014-3-21 22:18
在外部中断中启动定时器2毫秒的,2毫秒定时中断后把管脚置1同时关闭定时器,同时启动另一个定时器1毫秒的, ...

好的,我试试,谢谢哦

使用特权

评论回复
7
651927693| | 2014-3-22 08:55 | 只看该作者
你的描述和最后的解决方案也只有一步之遥,自己稍微思考下就出来了呀。

使用特权

评论回复
8
ayb_ice| | 2014-3-22 09:10 | 只看该作者
产生外部中断后,直接在中断延时产生信号就搞定了

使用特权

评论回复
9
Easy_Deng|  楼主 | 2014-3-22 15:05 | 只看该作者
ningling_21 发表于 2014-3-21 22:18
在外部中断中启动定时器2毫秒的,2毫秒定时中断后把管脚置1同时关闭定时器,同时启动另一个定时器1毫秒的, ...

我不知道问题出在哪里了,仿真一直为高电平,程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit shuchu=P0^0;

//*********主函数*********//
void main()
{
TMOD=0x11;                                         //定时器T0模式1,定时T1模式1
EA=1;                                                 //总中断开
TH0=(65536-2000)/256;                 //12Mhz定时2MS
TL0=(65536-2000)%256;
TH1=(65536-1000)/256;                 //12Mhz定时1MS
TL1=(65536-1000)%256;
EX0=1;                                                 //允许外中断0
IT0=1;                                                 //下降沿触发
}

//**********外中断0中断函数*********//
void EX0_time() interrupt 0
{
     EX0=0;                                                //关闭外中断0
     ET0=1;                                                 //定时器T0中断开
     TR0=1;                                                 //定时器T0开
}

//**********定时器T0中断函数*********//
void T0_time() interrupt 1
{
shuchu=1;                                         //2毫秒后输出高电平
ET1=1;                                                 //定时器T1中断开
TR1=1;                                                 //定时器T1开
TR0=0;                                                 //定时器T0关
TH0=(65536-2000)/256;                 
TL0=(65536-2000)%256;
}

//**********定时器T1中断函数*********//
void T1_time() interrupt 3
{
TR1=0;                                       //定时器1关闭
shuchu=0;                                   //1毫秒后输出拉低                    
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EX0=1;                                      //允许外中断0
}

QQ截图20140322150356.jpg (709.81 KB )

QQ截图20140322150356.jpg

使用特权

评论回复
10
ningling_21| | 2014-3-22 15:30 | 只看该作者
Easy_Deng 发表于 2014-3-22 15:05
我不知道问题出在哪里了,仿真一直为高电平,程序如下:
#include
#define uchar unsigned char

主程序怎么连个 while(1); 都没有...

使用特权

评论回复
11
lkl0305| | 2014-3-22 18:15 | 只看该作者
如上,主函数必须设置成死循环(while(1)),不然你的主函数执行完后,单片机执行哪里的程序了?

使用特权

评论回复
12
天风立马| | 2014-3-22 20:37 | 只看该作者
遇到问题先自己想,实在想不通再问。多查资料。问、答、用。你却不能融汇贯通,再遇到问题,你还得问,没有自己的解决思路。当然某些时候还是拿来主义优先,不造车轮。起步阶段还是自己明白为主。

使用特权

评论回复
13
张_彦雷| | 2014-3-22 22:26 | 只看该作者
ningling_21 发表于 2014-3-22 15:30
主程序怎么连个 while(1); 都没有...

一个定时器就行,每一毫秒计数加一初始为零,等于三时清零,等于零时设为低电平在等于2时取反,再等于零时取反就行了。

使用特权

评论回复
14
Easy_Deng|  楼主 | 2014-3-23 21:02 | 只看该作者
ningling_21 发表于 2014-3-22 15:30
主程序怎么连个 while(1); 都没有...

谢谢哦,问题解决了,自己不小心忘了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

27

帖子

1

粉丝