Zach_菠萝侠 2021-06-25 09:53 采纳率: 42.9%
浏览 51

单片机+汇编语言问题,问题如图?

img

请根据要求写出完整程序。谢谢啦!

  • 写回答

1条回答 默认 最新

  • 包子资源站 2024-03-15 16:32
    关注
      
    void Timer0_Init() {  
        TMOD &= 0xF0; // 清除T0模式位  
        TMOD |= 0x02; // 设置T0为模式2 (8位自动重装载)  
        TH0 = 0xFF; // 设置定时器的初值(取决于晶振频率)  
        TL0 = 0xFF;  
        ET0 = 1;    // 允许T0中断  
        TR0 = 1;    // 启动T0  
    }  
      
    void ExternalEvent_Init() {  
        IT0 = 1;    // 设置外部中断0为下降沿触发  
        EX0 = 1;    // 允许外部中断0  
    }  
      
    void Timer0_ISR() interrupt 1 {  
        TR0 = 0;    // 停止T0  
        P1_0 = 1;   // 输出高电平,结束脉冲  
        // 将T0重新设置回外部事件计数模式  
        TMOD &= 0xF0;  
        TMOD |= 0x02;  
        TR0 = 1;    // 重新启动T0进行外部事件计数  
    }  
      
    void ExternalEvent_ISR() interrupt 0 {  
        // 当P3.4发生负跳变时  
        TR0 = 0;    // 停止T0(如果正在运行)  
        TMOD &= 0xF0;  
        TMOD |= 0x01; // 设置T0为模式1 (16位定时/计数器模式)  
        TH0 = (65536 - 500) / 256; // 加载定时初值,假设晶振为12MHz  
        TL0 = (65536 - 500) % 256; // 500us定时  
        ET0 = 1;    // 允许T0中断  
        TR0 = 1;    // 启动T0进行定时  
    }  
      
    void main() {  
        Timer0_Init();  
        ExternalEvent_Init();  
        while(1) {  
            // 主循环保持空闲,等待中断  
        }  
    }
    
    评论

报告相同问题?