T1外部计数输入

  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义  
  2.   
  3. sbit LED=P1^2;    //定义LED端口  
  4.   
  5.   
  6. void Init_Timer1(void)  
  7. {  
  8.  TMOD |= 0x10 | 0x40;     //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响            
  9.  TH1=0xFF;        //给定初值  
  10.  TL1=245;         //从245计数到255   
  11.  EA=1;            //总中断打开  
  12.  ET1=1;           //定时器中断打开  
  13.  TR1=1;           //定时器开关打开  
  14. }  
  15.   
  16. main()  
  17. {  
  18.  Init_Timer1();  
  19.  while(1);  
  20. }  
  21.   
  22.   
  23. void Timer1_isr(void) interrupt 3   
  24. {  
  25.  TH1=0xFF;        //重新给定初值  
  26.  TL1=245;   
  27.   
  28.  LED=~LED;        //指示灯反相,可以看到闪烁  
  29.   
  30. }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51单片机可以通过外部中断来进行计数,具体步骤如下: 1. 配置中断引脚为外部中断模式,可以使用P3口的INT0和INT1引脚,或者P1口的T0和T1引脚。 2. 初始化中断相关的寄存器,包括IE(中断使能寄存器)、IP(中断优先级寄存器)和TCON(定时器/计数器控制寄存器)等。 3. 编写中断服务程序,当外部中断发生时,会自动跳转到中断服务程序中执行。 4. 在中断服务程序中对计数器进行操作,可以使用一个全局变量来保存计数值。 5. 在主程序中定时读取计数器的值,可以使用定时器或者延时函数来控制读取的时间间隔。 6. 在需要重置计数器时,可以在主程序中设置一个标志位,当标志位被置位时,将计数器清零。 示例代码如下: ```c #include <reg52.h> #include <intrins.h> sbit INT0 = P3^2; // 外部中断0引脚 unsigned int count = 0; // 计数器 void init_interrupt() { EA = 1; // 开启总中断 EX0 = 1; // 开启外部中断0 IT0 = 1; // 配置为下降沿触发 } void isr_int0() interrupt 0 { count++; // 计数器加1 } void main() { init_interrupt(); // 初始化中断 while(1) { // 定时读取计数器的值,可以使用定时器或者延时函数 _nop_(); // 空指令,延时一段时间 _nop_(); _nop_(); _nop_(); printf("count = %d\n", count); // 重置计数器 if(/*条件*/) { count = 0; } } } ``` 注意:在使用P3口的INT0和INT1引脚时,需要将P3口的其他引脚设置为输入模式,否则可能会影响中断的触发。同时,需要注意中断服务程序的执行时间,尽量保持短暂,不要阻塞主程序的执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值