h775533 发表于 2024-10-31 19:47:27

第十一集
定时器/计数器(用T0实现每1ms产生1次中断)
1、软件定时的缺点:占用CPU时间,影响CPU的运行效率和处理速断,有时会造成很大的定时误差。
2、中断的概念:中断请求、中断响应(中断处理程序)、中断返回,本节主要是讲定时器中断。
3、定时器的使用(以T0为例)
   1)设置为定时器/计数器
寄存器TMOD的T0_CT位:0为定时模式,1为计数模式
      2)设置不分频或12分频
      通过设置辅助寄存器AUXR的T0x12:0为12分频(默认为0),1为不分频。
      3)定时器工作模式T0_M1/T0_M0
      16位自动重载模式比较常用。





   4)定时器设置 (定时器 0/1 控制寄存器TCON)
      TF0:T0 溢出中断标志。该位软件清0,也可以不清0。
      TR0:定时器 T0 的运行控制位。该位软件置1,开启定时器。
         5)中断
         IE:中断使能寄存器,EA:总中断允许控制位。EA=1允许中断。
         ET0:定时 / 计数器 T0 的溢出中断允许位。ET0=1允许定时器中断。
4、实现T0定时器中断的主要程序
       T0初始化程序
TMOD =0x00;                // 设置定时器 0 位 16 位自动重载模式
       TL0=0x30;                     // 计算出的 24M 时钟下的 1ms 的定时时间初始值
       TH0=0xF8:
       TR0=1;                        //启动定时器
      ET0 =1;                        // 使能定时器中断
      EA = 1;                        //CPU 开放中断,打开总中

      T0中断响应程序
         void Tim0_Isr() interrupt 1 //1-定时器0中断号
         {
          }
    利用STC-ISP的“定时器计算器”自动生成定时器初始化程序   


5、建议
中断发生的频率越低越好。
中断程序执行的代码越少越好。

h775533 发表于 2024-11-1 10:51:05

第十一集
定时器/计数器(用T0实现每1ms产生1次中断)
1、软件定时的缺点:占用CPU时间,影响CPU的运行效率和处理速断,有时会造成很大的定时误差。
2、中断的概念:中断请求、中断响应(中断处理程序)、中断返回,本节主要是讲定时器中断。
3、定时器的使用(以T0为例)
   1)设置为定时器/计数器
寄存器TMOD的T0_CT位:0为定时模式,1为计数模式
      2)设置不分频或12分频
      通过设置辅助寄存器AUXR的T0x12:0为12分频(默认为0),1为不分频。
      3)定时器工作模式T0_M1/T0_M0
      16位自动重载模式比较常用。

h775533 发表于 2024-11-1 18:23:42

第十一集
定时器/计数器(用T0实现每1ms产生1次中断)
1、软件定时的缺点:占用CPU时间,影响CPU的运行效率和处理速断,有时会造成很大的定时误差。
2、中断的概念:中断请求、中断响应(中断处理程序)、中断返回,本节主要是讲定时器中断。
3、定时器的使用(以T0为例)
   1)设置为定时器/计数器
寄存器TMOD的T0_CT位:0为定时模式,1为计数模式
      2)设置不分频或12分频
      通过设置辅助寄存器AUXR的T0x12:0为12分频(默认为0),1为不分频。
      3)定时器工作模式T0_M1/T0_M0
      16位自动重载模式比较常用。
      4)定时器设置 (定时器 0/1 控制寄存器TCON)
      TF0:T0 溢出中断标志。该位软件清0,也可以不清0。
      TR0:定时器 T0 的运行控制位。该位软件置1,开启定时器。
         5)中断
         IE:中断使能寄存器,EA:总中断允许控制位。EA=1允许中断。
         ET0:定时 / 计数器 T0 的溢出中断允许位。ET0=1允许定时器中断。
4、实现T0定时器中断的主要程序
       T0初始化程序
TMOD =0x00;                // 设置定时器 0 位 16 位自动重载模式
       TL0=0x30;                     // 计算出的 24M 时钟下的 1ms 的定时时间初始值
       TH0=0xF8:
       TR0=1;                        //启动定时器
      ET0 =1;                        // 使能定时器中断
      EA = 1;                        //CPU 开放中断,打开总中

      T0中断响应程序
         void Tim0_Isr() interrupt 1 //1-定时器0中断号
         {
          }

h775533 发表于 2024-11-2 13:45:53

第十一集
1、 定时器的原理
定时器之所以能够定时,就是系统里有个能根据脉冲进行加一的寄存器,每来一个脉冲这个寄存器里的值就能加一,用这个寄存器里的值乘以脉冲频率的倒数就是经过了多长时间,当然这个寄存器加到最大数后又会从0开始增加,而且这个寄存器里的初始值可以设定,从设定值到最大值乘以定时器时钟频率的倒数就是这一段经过的时间,实现定时。到了最大值后,系统会产生一个中断告诉使用者时间到了,你可以处理你想处理的事了。
2、 定时器的配置
手册中虽然有例子来演示如何进行配置,但是你还必须学会设置的这些到底是干啥用的,不然以后自己根本不会变通。
至于先设置哪个寄存器后设置哪个寄存器,可能会有些迷糊,但是手册里有相关的定时器的结构图,根据结构图一步步的设置,你自己也能完成例子里的定时,而且还能据此进行变通,编程设置成自己想要定时的时间。

h775533 发表于 2024-11-4 10:30:57

第十一集
定时器/计数器(用T0实现每1ms产生1次中断)
1、软件定时的缺点:占用CPU时间,影响CPU的运行效率和处理速断,有时会造成很大的定时误差。
2、中断的概念:中断请求、中断响应(中断处理程序)、中断返回,本节主要是讲定时器中断。
3、定时器的使用(以T0为例)
   1)设置为定时器/计数器
寄存器TMOD的T0_CT位:0为定时模式,1为计数模式
      2)设置不分频或12分频
      通过设置辅助寄存器AUXR的T0x12:0为12分频(默认为0),1为不分频。
      3)定时器工作模式T0_M1/T0_M0
      16位自动重载模式比较常用。

h775533 发表于 2024-11-4 10:59:29

第十一集
定时器/计数器(用T0实现每1ms产生1次中断)
1、软件定时的缺点:占用CPU时间,影响CPU的运行效率和处理速断,有时会造成很大的定时误差。
2、中断的概念:中断请求、中断响应(中断处理程序)、中断返回,本节主要是讲定时器中断。
3、定时器的使用(以T0为例)
   1)设置为定时器/计数器
寄存器TMOD的T0_CT位:0为定时模式,1为计数模式
      2)设置不分频或12分频
      通过设置辅助寄存器AUXR的T0x12:0为12分频(默认为0),1为不分频。
      3)定时器工作模式T0_M1/T0_M0
      16位自动重载模式比较常用。

h775533 发表于 2024-11-4 11:05:54

第十二集   
计数器的使用(以定时器1为例)
   1、计数器的用途   
    只要输出信号带高低电平变化,想要计算个数的就可以用计数器的功能。
   2、计数器的配置
   T1_C/T:控制定时器1用作定时器或计数器。T1_C/T=1为计数器
   T1_GATE:控制定时器 1,置 1 时只有在 INT1 脚为高及 TR1 控制位置 1 时才可打开定时器 / 计数器 1。此例将T1_GATE清零。
计数器应用实例
关键代码
数码管不显示的段码:0xFF
void Timer0_Isr(void) interrupt 1
{
      TinCount++;                // 每隔 1ms+1,计数到 2000=2s
      if(TimCount>=2000) //2 秒定时时间到了
   {
            TinCount = 0;
            Count_T1=(TH1 *256)+ TL1;   //读取计数器的值,
            TH1=0;
            TL1=0;
            Show_Tab= Count T1/1000%10;
            Show_Tab=Count_T1/100%10;
            Show_Tab=Count_T1/10%10;
            Show_Tab=Count_T1/1%10:// 取 10 位
            SEG_Fre();      // 数码管刷新的
      }
}

h775533 发表于 2024-11-4 15:12:02

第十二集   
计数器的使用(以定时器1为例)
   1、计数器的用途   
    只要输出信号带高低电平变化,想要计算个数的就可以用计数器的功能。
   2、计数器的配置
   T1_C/T:控制定时器1用作定时器或计数器。T1_C/T=1为计数器
   T1_GATE:控制定时器 1,置 1 时只有在 INT1 脚为高及 TR1 控制位置 1 时才可打开定时器 / 计数器 1。此例将T1_GATE清零。
   3、计数器应用实例
关键代码
数码管不显示的段码:0xFF
void Timer0_Isr(void) interrupt 1
{
      TinCount++;                // 每隔 1ms+1,计数到 2000=2s
      if(TimCount>=2000) //2 秒定时时间到了
   {
            TinCount = 0;
            Count_T1=(TH1 *256)+ TL1;   //读取计数器的值,
            TH1=0;
            TL1=0;
            Show_Tab= Count T1/1000%10;
            Show_Tab=Count_T1/100%10;
            Show_Tab=Count_T1/10%10;
            Show_Tab=Count_T1/1%10:// 取 10 位
            SEG_Fre();      // 数码管刷新的
      }
}

h775533 发表于 2024-11-4 21:36:51

第十二集学习笔记:1、计数器用途 马达计数 咖啡机编码器 脉冲计数 2、配置 T1-C/T为1 T1-GATE为0 TR1为1 查手册 STC-ISP软件中I/O口配置工具 3、应用 直流电动机测速装置 M法测速 频率测量法 n=M0/CT0。

h775533 发表于 2024-11-4 21:38:25

第十三集学习笔记:1、回顾前面讲过的内容,写工程师级别的代码 2、应用模块化编程(.c .h)LED数码管 按键 蜂鸣器 定时器的.c.h文件,重要的函数添加说明,添加函数头。extern修饰的变量不能赋初值 bdata位寻址变量的使用 static静态变量赋值一次,for循环
页: 1 [2] 3
查看完整版本: 跟着冲哥学习32位8051单片机原理及C语言程序设计