找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5616|回复: 1
收起左侧

单片机试验数码管上显示定时器中断计数

[复制链接]
ID:180782 发表于 2018-5-28 19:26 | 显示全部楼层 |阅读模式
部分程序,内含原理,原理图,接线图,源程序,需要修改里面的断码。网上有。

单片机定时器的应用

1、单片机定时器的工原理

MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。它们即可用作定时器方式,又可用作计数器方式。其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。

工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。

工作于计数器方式时,对P3.4 或P3.5 管脚的负跳变(1→0)计数。它在每个机器周期的S5P2 时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。

特殊功能寄存器TMOD 用于定时器/计数器的方式控制。高4 位用于设置T1,低4 位用于设置T0。如图1所示。



图1 定时器模式控制字格式


TCON 寄存器用于定时器的计数控制和中断标志。如图4-8所示。





图2 定时控制寄存器数据格式

编写程序控制这两个寄存器就可以控制定时器的运行方式。

2、单片机内部定时器/计数器的使用

(1)根据需要设置工作方式,即对TMOD设置;

(2)定时/计数初值的设定;

(3)然后启动计数,即对TR0或TR1置1。

(5)如需用中断,则将EA和相关中断控制位置1;则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。

1、实验开发板连接图

2、实验源程序

/*******************************************************************************

*  标题:试验数码管上显示定时器中断计数                       *

*  连接方法:参照接线图                               *

******************************************************************************/


  1. #include < reg51.h >
  2. #include <intrins.h>

  3. sbit LS138A=P2^2;  //定义 138管脚
  4. sbit LS138B=P2^3;
  5. sbit LS138C=P2^4;



  6. unsigned int LedNumVal,LedOut[8];



  7. // 此表为 LED 的字模  //

  8. unsigned char code Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,

  9. 0xbf,0xc7,0x8c,0xc1,0xff,0xf7 };



  10. /***********************************************************

  11. purpose: 系统初始化

  12. /**********************************************************/

  13. void system_Ini()

  14. {

  15.      TMOD = 0x00; //选择模式0  13位计数 最大计数8192

  16.     TH0 = (8192 - 1000)/32; // TH0=0x1C;  12.000M  预装初值

  17. TL0 = (8192 - 1000)%32              ; //TL0=0x18;            

  18.      IE = 0x8A;   //中断            

  19.      TR0  = 1;    //开启T0定时器

  20. }



  21. void delay(unsigned int i)

  22. {

  23.     char j;

  24.     for(i; i > 0; i--)

  25.         for(j = 200; j > 0; j--);

  26. }



  27. /********主函数****/

  28. main()

  29. {

  30.    system_Ini()              ;

  31.    while(1)

  32.    {

  33.     unsigned char i;

  34.      LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

  35.      LedOut[1]=Disp_Tab[LedNumVal%1000/100];

  36.      LedOut[2]=Disp_Tab[LedNumVal%100/10];

  37.      LedOut[3]=Disp_Tab[LedNumVal%10];

  38.                 for( i=0; i<8; i++)

  39.                  { P0 = LedOut[i];

  40.                                          

  41.                 switch(i)                                                                       

  42.                    {                 

  43.                                           case 0:LS138A=0; LS138B=0; LS138C=0; break;        

  44.                       case 1:LS138A=1; LS138B=0; LS138C=0; break;                          

  45.                       case 2:LS138A=0; LS138B=1; LS138C=0; break;

  46.                       case 3:LS138A=1; LS138B=1; LS138C=0; break;

  47.                                           case 4:LS138A=0; LS138B=0; LS138C=1; break;

  48.                                           case 5:LS138A=1; LS138B=0; LS138C=1; break;

  49.                                           case 6:LS138A=0; LS138B=1; LS138C=1; break;

  50.                                           case 7:LS138A=1; LS138B=1; LS138C=1; break;            

  51.                    }

  52.                             delay(150);

  53.               }



  54.   }



  55. }



  56. /*************************************

  57. [ T0 (1ms)中断] 中断

  58. *************************************/

  59. void T0zd(void) interrupt 1   //3定时器1的中断号 ;1定时器0的中断号,

  60. // 0外部中断1; 2外部中断2 ; 4串口中断

  61. {

  62.               TH0 = (8192 - 1000)/32              ; //TH0 = 0xFc,12.000

  63.               TL0 = (8192 - 1000)%32; //TL0 = 0x18;

  64.               LedNumVal++;

  65. }
复制代码


思考题:

1、标注程序,画出流程图
2、给出定时器定时一秒的计算过程。


完整的Word格式文档51黑下载地址:

3单片机定时器的应用.docx (192.92 KB, 下载次数: 14)

回复

使用道具 举报

ID:370231 发表于 2018-7-26 14:52 | 显示全部楼层
为什么我把程序输到板子上,显示乱码的,没有数字出来的??
是要把哪个短接片拔掉吗????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表