导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求教]一段中断程序

* 96453: [求教]一段中断程序

   qingyu 
qingyu发表的帖子 

 [求教]一段中断程序
我要用单片机输出占空比可变的20k的pwm,pwm用两个定时器采用工作方式二产生,P2—7输出pwm,外部中断产生时,P1—0~P1—5,P2—6七个口并行送入pwm占空比的值,大约几百ms送一次,由另一个单片机与此单片机直接相连,产生中断并送数,现在问题是pwm能输出,外部中断0有下降沿跳变,但输出的pwm占空比始终不变为什么?
#include    <reg51.h>  

sbit  P1_0=P1^0;      //并行输入口
sbit  P1_1=P1^1;      //并行输入口
sbit  P1_2=P1^2;     //并行输入口
sbit  P1_3=P1^3;    //并行输入口
sbit  P1_4=P1^4;   //并行输入口
sbit  P1_5=P1^5;   //并行输入口
sbit  P2_6=P2^6;   //并行输入口
sbit  P2_7=P2^7;   //并行输入口

unsigned int   t=30;

void timer0(void) interrupt 1 using 1     //定时器0中断服务程序
{  
   TR0=0;  
   P2_7=1;
   TR1=1;   
}

void timer1(void) interrupt 3 using 2     //定时器1中断服务程序
{        
 TR1=0;
 P2_7=0;
 TR0=1; 
}

void service_int1(void) interrupt 0 using 3  //外部中断服务程序
{     
     EA=1;       //实现中断嵌套
     t=0;
     if(P2_6)  t=64;    //接收数据
     if(P1_5)  t=t+32;
     if(P1_4)  t=t+16;
     if(P1_3)  t=t+8;
     if(P1_2)  t=t+4;
     if(P1_1)  t=t+2;
     if(P1_0)  t=t+1;
     t=t/2;                   //送入t的范围是2=  <t  <=80
}     

void main(void)                            
{                      
        IP=0x0a;          //优先级设定,定时器高,外部中断低
        IT0=1;           //下降沿触发
        TMOD=0x22;         //工作方式二
        TH1=256-t;          //装载初值
        TL1=TH1;
        TH0=256-(41-t);
        TL0=TH0;
        IE=0x8b;    //开中断
        TR0=1;           //开定时器
        while(1);
}

发表时间:2006年8月7日19:10:18

  
回复该帖

本主题共有 9 帖,分页:>>>>>该主题的所有内容[9]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  96454.[详细]huifu
摘要:我看了看你的程序 我觉得你利用外部中断来进行时间的设置有点不妥 因为你的定时中断的优先级总是最高的  一但定时器的中断响应后就会无限的对定时器产生中断 你的外部中断跟本就不能响应 ......(246字)
- [wangxueyou][902次] 2006年8月7日

  96455.[详细]回复
摘要:void main(void)                &nbs......(1025字)
- [wangxueyou][840次] 2006年8月7日

  96458.[详细]我试了,确实好使了,非常感谢!!!
摘要:我试了,确实好使了,非常感谢!!!......(34字)
- [qingyu][741次] 2006年8月7日

[上一篇帖子]:huifu我看了看你的程序 我觉得你利用外部中断来进行时间的设置有点不妥 因为你
[下一篇帖子]:能说的具体些吗从你所说的可能是程序存储空间太小,能把你的程序和硬件电路发过来吗? 我试一试吧