守804 2024-11-03 13:32 采纳率: 0%
浏览 25

计算题 设fosc=12MHz,编写一段程序,对定时器/计数器T0进行初始化,使之工作在方式2,产生100μs定时,控制P1.1引脚输出频率为5KHz的方波。

设fosc=12MHz,编写一段程序,对定时器/计数器T0进行初始化,使之工作在方式2,产生100μs定时,控制P1.1引脚输出频率为5KHz的方波。

  • 写回答

1条回答 默认 最新

  • 越重天 新星创作者: Java技术领域 2024-11-04 11:21
    关注

    本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢

    1. 计算初值
      • 已知晶振频率$ f_{osc}=12MHz $,机器周期$ T = 1\mu s $。
      • 对于定时器/计数器$ T0 $工作在方式$ 2 $(8位自动重装初值定时器),定时时间$ t = 100\mu s $。
      • 根据定时时间公式$ t=(256 - X)\times T $($ X $为初值),可得$ 100=(256 - X)\times1 $,解得$ X = 256 - 100=156 = 9CH $。
      • 要产生频率为$ 5KHz $的方波,其周期$ T_w=\frac{1}{5000}=200\mu s $,高电平和低电平各占$ 100\mu s $。
    2. 编写程序
      • 以下是使用51单片机汇编语言编写的程序:
        ORG 0000H
        AJMP MAIN
        ORG 000BH
        AJMP T0_ISR
    MAIN:
        MOV TMOD, #02H   ;设置T0为方式2
        MOV TL0, #9CH    ;装入初值
        MOV TH0, #9CH
        SETB EA          ;开总中断
        SETB ET0         ;开T0中断
        SETB TR0         ;启动T0
        SJMP $
    T0_ISR:
        CPL P1.1         ;取反P1.1引脚电平
        RETI
    
    • 以下是使用C语言编写的程序:
    #include <reg51.h>
    
    sbit P1_1 = P1^1;
    
    void main()
    {
        TMOD = 0x02;   //设置T0为方式2
        TL0 = 0x9C;    //装入初值
        TH0 = 0x9C;
        EA = 1;        //开总中断
        ET0 = 1;       //开T0中断
        TR0 = 1;       //启动T0
        while (1);
    }
    
    void T0_ISR() interrupt 1
    {
        P1_1 = ~P1_1;  //取反P1.1引脚电平
    }
    

    在上述程序中,首先对定时器$ T0 $进行初始化,设置其工作方式为方式$ 2 $,并装入初值。然后开启总中断、$ T0 $中断并启动$ T0 $。在定时器$ T0 $中断服务程序中,对$ P1.1 $引脚电平取反,从而输出频率为$ 5KHz $的方波。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月3日