C51单片机外部中断,定时中断,串口中断同时使用的问题

外部中断测脉冲数,当触发了外部中断后,定时器0开始计时2秒,2s完成后将脉冲数通过串口发送电脑。那三个中断程序该怎么写?用的是STC89C52#include<reg52... 外部中断测脉冲数,当触发了外部中断后,定时器0开始计时2秒,2s完成后将脉冲数通过串口发送电脑。那三个中断程序该怎么写?用的是STC89C52
#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 getdat;
uint16 time,counter=0;
void init()
{
TMOD = 0x21;
TH1 = 0xfd;
TL1 = 0xfd;
SCON=0x50;
TR1 = 1;
EA=1;
ES=1;
TH0=0xfc;
TL0=0x67;
TR0=1;
ET0=1;
EX1=1;
IT1=1;

}

main()
{
init();
while (1);
}
void ex1_interrupt() interrupt 2
{
counter++;
}
void t0_interrupt() interrupt 1
{
TH0=0xfc;
TL0=0x67;
time++;
if(time==2000)
{
time=0;
ES=0;
SBUF=counter;
while(!TI);
TI=0;
ES=1;
counter=0;
}
}
void UART_interrupt() interrupt 4
{
if(RI)
{
RI=0;
getdat=SBUF;
}
}
这个是我编的,请问有没有问题?旋转编码器的A相接外部中断1,测出的数据是否准确?我的旋转编码器有点问题。测不了
展开
 我来答
wenfeng223
2012-07-25 · 超过10用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:44.2万
展开全部
应该一个定时器,一个计算器,一个外部中断。定时器中断设高。不要用外部中断计数,有可能会漏掉脉冲。开一个计数器就行,外部中断来了就开定时器和计数器。定时器到2S直接关计数器,并将计数值用串口发送。注意计数器满了之后会由FF变为00然后继续计数。
duyin2011
2012-07-26 · TA获得超过2398个赞
知道大有可为答主
回答量:1723
采纳率:100%
帮助的人:659万
展开全部
1整体思路是没问题的,2秒计算一次,采集响应太慢,现实使用中基本不适用。
2你的counter,这样发到串口,只能是低8位,根本不是实际的数据,应该将其分解开,2次发送.
追问
那在我的程序上应如何修改?
追答
1如果想采集快些,将你的编码器倍频,然后采集时可以用100ms采集,这样一般工业上要求采集响应还是够的,这个你要作下硬件处理,软件将定时改为100ms,进行数据分析发送。
2发送可以做个子程序。然后分解发送。
void send_data(uint8 ch)
{
ES=0;
TI=0;
SBUF=ch;
while(!TI);
TI=0;
ES=1;
}
这里改成
if(time==100)//100ms采集,1秒10次,你现在可以用2000实验。因为硬件问题。
{
time=0;
send_data(counter/256);//发送高位
send_data(counter%256);//发送低位
counter=0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
94107066
2012-07-25 · TA获得超过167个赞
知道小有建树答主
回答量:605
采纳率:0%
帮助的人:236万
展开全部
尝试一下自己写,先整理好逻辑,理顺了,用语言描述出来就是。自己想提高,就必要要尝试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
原野yxivy
2012-07-24 · TA获得超过138个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:136万
展开全部
这个10分不够
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花海在那
2012-07-25
知道答主
回答量:20
采纳率:0%
帮助的人:7.8万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式