啊!@_#%* 2022-11-13 16:49 采纳率: 0%
浏览 83
已结题

C语言怎么编可中断取反流水灯

用P1口做输出口,接八只发光二极管。编写程序,使发光二极管循环点亮,循环点亮时间间隔为1秒,该时间间隔用定时器中断实现。/ INT0 接单次脉冲输出,每当有外部中断信号时,发光二极管循环方向取反。 请问用C语言怎么编?

  • 写回答

4条回答 默认 最新

  • fengyuzhe13 优质创作者: 嵌入式与硬件开发技术领域 2022-11-13 17:23
    关注
    获得2.70元问题酬金

    仿真如下:

    img


    上传不了仿真动图,直接看代码吧

    // 12MHz晶振
    #include "reg52.h"
    #include "intrins.h"
    
    #define time (65536-50000) // 单次定时50ms
    unsigned char cn;
    unsigned char temp;
    unsigned char dir;
    
    void main(void)
    {
          cn=20; //20*50ms=1s
          temp=0x80;
          dir=0;
        TMOD = 0x10;                    //set timer1 as mode1 (16-bit)
        TL1 = time;                     //initial timer1 low byte
        TH1 = time >> 8;                //initial timer1 high byte
        TR1 = 1;                        //timer1 start running
        ET1 = 1;                        //enable timer1 interrupt
          IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
        EX0 = 1;                        //enable INT0 interrupt
        EA = 1;                         //open global interrupt switch
        
          while(1);// xunhuan
    
    }
    
    /* Timer0 interrupt routine */
    void tm1_isr() interrupt 3
    {
        TL1 = time;                    
        TH1 = time >> 8;               
        if (cn-- == 0)               
        {
            cn = 20;  
                  P1=temp;
                  if(dir==0)
              temp=_cror_(temp,1);    
            else
                        temp=_crol_(temp,1);    
        }
    }
    
    //External interrupt0 service routine
    void exint0() interrupt 0           //(location at 0003H)
    {
        dir=~dir;
    }
    
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 创建了问题 11月13日