51单片机 计时器0产生PWM波 计时器1用作串口通信 两个计时器互相影响。。。该怎么处理

[复制链接]
查看11 | 回复2 | 2011-7-23 03:36:43 | 显示全部楼层 |阅读模式
#include
#define uint unsigned int
#define uchar unsigned char
uint t=0,f=39,w=2;//t为单位计时数 500次为0.5ms f+1 为周期 (39+1)*0.5=20ms w 为占空比 1w=0.5ms
sbit P10=P1^0; // 输出端
void init()
{
TMOD=0x21;
SM0=0;
SM1=1;
REN=1;
PCON=0;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
ET0=1;
TR0=1;
EA=1;
ES=1;
ET1=1;

TH1=0xFD;
TL1=0xF9;
TR1=1;//计时器互相影响 一个用于传输数据 一个用于产生pwm波
}
void time0() interrupt 1
{
TH0=(65536-500)/256;

TL0=(65536-500)%256;
t++; //t为0.5ms
if(t>=f)
t=0;
}
// void         getspeed0() //interrupt 4 using 1
//{
//P0=SBUF;while(!RI);RI=0;//接收数据
//SBUF=P0;while(!TI);TI=0;//发送数据
                       
//}
void main()
{
init();
while(1)
{
if(t<w)P10=1;//单个周期
else P10=0;
}
}

回复

使用道具 举报

千问 | 2011-7-23 03:36:43 | 显示全部楼层
串口和定时器的中断是有优先级的,这两个中断首先不可能同时响应,默认必须是先执行完定时器的中断服务程序后才会去执行串口的中断服务程序,当然当串口中断服务程序执行到一半的时候出现了定时器中断,就会对串口有一定的影响,想避免最好就是在执行串口中断服务程序之前关定时器0中断,等串口中断服务程序执行完毕在开定时器0中断。...
回复

使用道具 举报

千问 | 2011-7-23 03:36:43 | 显示全部楼层
这个实际上是不会影响的,因为默认的是定时器0的中断优先级比较高,如果对串口有影响的话,请你试试用定时器1产生PWM,而定时器0产生串口的波特率····...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行