找回密码
 立即注册
楼主: 飞行者

Ai8051u擎天柱学习冲哥《8051U深度入门到32位51大型实战视频》记录贴

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:118
  • 最近打卡:2025-09-03 06:17:24

2

主题

51

回帖

257

积分

中级会员

积分
257
发表于 6 天前 | 显示全部楼层
15。定时器做计数器

任务一.png 任务二.png
tim.c
  1. #include "tim.h"
  2. u32 Count_T1 = 0;
  3. //void TIM1_Count_Init(void)
  4. //{
  5. //        T1_CT = 1;                //设置外部计数
  6. //        T1_M1 = 0;                //设置模式为16位自动重载
  7. //        T1_M0 = 0;
  8. //        T1_GATE = 0;
  9. //       
  10. //        TH1 = (65536-Count_num)>>8;         //65526
  11. //        TL1 = (65536-Count_num);
  12. //       
  13. //        P3PU |= 0x20;
  14. //       
  15. //        TR1 = 1;
  16. //        ET1 = 1;                //定时器/计数器T1的中断允许位
  17. //}
  18. //void Timer1_Isr(void) interrupt 3
  19. //{
  20. //        Count_T1++;                //T1引脚检测到10个脉冲就会溢出一次
  21. //}
  22. ////定时器1计数
  23. //void T1_RunTask(void)
  24. //{
  25. //        u32 count_th_tl = 0;
  26. //        count_th_tl = ((u16)TH1<<8) + (u16)TL1;
  27. //        count_th_tl -= 65526;
  28. //       
  29. //        SEG7_ShowLong(Count_T1 * Count_num + count_th_tl, 10);
  30. //}
  31. /*
  32. 任务2:编写INT1测量低电平时间
  33. 由按键模拟信号,100us的计数周期计数
  34. */
  35. void Timer1_Isr(void) interrupt 3
  36. {
  37.         static u32 count_p33 = 0;        //p33计数变量初始值为0
  38.        
  39.         if(P33 == 0)                                //按键按下计数
  40.         {
  41.                 count_p33 ++;
  42.         }
  43.         else
  44.         {
  45.                 if(count_p33 > 0)
  46.                 {
  47.                         Count_T1 = count_p33;
  48.                 }
  49.                 count_p33 = 0;
  50.         }
  51.        
  52. }
  53. void Timer1_Init(void)                //100微秒@24.000MHz
  54. {
  55.         AUXR &= 0xBF;                        //定时器时钟12T模式
  56.         TMOD &= 0x0F;                        //设置定时器模式
  57.         TL1 = 0x38;                                //设置定时初始值
  58.         TH1 = 0xFF;                                //设置定时初始值
  59.         TF1 = 0;                                //清除TF1标志
  60.         TR1 = 1;                                //定时器1开始计时
  61.         ET1 = 1;                                //使能定时器1中断
  62. }
  63. //数码管输出Count_T1值
  64. void T1_RunTask(void)
  65. {
  66.         //SEG7_ShowLong(Count_T1 , 10);        //整数输出
  67.         SEG7_ShowString("%07.01f",((float)Count_T1)/10);
  68. }
复制代码

demo1.rar (208.02 KB, 下载次数: 1)
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:118
  • 最近打卡:2025-09-03 06:17:24

2

主题

51

回帖

257

积分

中级会员

积分
257
发表于 6 天前 | 显示全部楼层
15.定时器做计数器 课后小练

借鉴坛友乐高的课后作业
课后小练   
编译器一直有一个警告,消不掉。
CT计数器:
在设备的出料端口有一个感应器,每次有成品出来就会有一个低电平出来,计算相邻的两个产品出来的时间差来计算CT时间。
     1.计算P33引脚的相邻两次按下的时间,精确到100ms(即单个时间)
     2.计算按下P33的次数(即总产量)
3.数码管前四位显示单个时间 ,后四位显示次数

tim.c

  1. #include "tim.h"
  2. #include "io.h"
  3. extern u32 Count_INT1;           // 从io.c外部引用,用于存储总产量计数
  4. u32  Count_T1 = 0;               // 定时器1计数值(每10ms加1)
  5. u32  Count1 = 0;                 // 暂存的时间计数值
  6. extern u32 Count;                // 从io.c外部引用,用于存储CT时间(100ms单位)
  7. void INT1_Isr(void) interrupt 2
  8. {
  9.         Count1 = Count_T1;
  10.         if(Count1 >5)
  11.         {
  12.                 Count = Count1/10;
  13.                 Count_INT1++;
  14.         }
  15.         Count_T1 = 0;
  16.        
  17.        
  18. }
  19. void Ext_Init(void)
  20. {
  21.         IT1 = 1;                        //INT1(P3.3)下降沿中断
  22.         EX1 = 1;                        //使能INT1中断
  23. }
  24. void Timer1_Isr(void) interrupt 3
  25. {
  26.         Count_T1++;
  27. }
  28. void Timer1_Init(void)                //100微秒@24.000MHz
  29. {
  30.         AUXR |= 0x40;                        //定时器时钟1T模式
  31.         TMOD &= 0x0F;                        //设置定时器模式
  32.         TL1 = 0xA0;                                //设置定时初始值
  33.         TH1 = 0xF6;                                //设置定时初始值
  34.         TF1 = 0;                                //清除TF1标志
  35.         TR1 = 1;                                //定时器1开始计时
  36.         ET1 = 1;                                //使能定时器1中断
  37. }
复制代码

demo1.rar (207.61 KB, 下载次数: 1)

回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-9-4 04:57 , Processed in 0.888109 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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