STC定时器频率占空比程序

//==========================================================
//                一、宏定义区
//==========================================================
              #include       <STC15.H>           //头文件
              #include       <intrins.h>         //库函数文件
              #define        FOSC 12000000L      //IRC频率  
              typedef        unsigned int u16;     //对数据类型进行声明定义
              typedef        unsigned char u8;
//==========================================================
//                二、函数声明区
//==========================================================
              void           UartInit(void);        //9600bps@24MHz
              void           Timer0_Init(void);        //25微秒@24MHz
              void           Timer2_Init(void);        //100微秒@24MHz
              void           Init_IO(void);         //IO初始化
              void           key_san(void);           //按键扫描程序
              void           sedusart(u8 x);      //串口发送测试void sedusart(10)
              void           delayms(u16 c);      //1ms误差 0us
//==========================================================
//                 三、IO定义区
//==========================================================
              sbit           S1 = P5^4;           //按键频率加
              sbit           S2 = P1^6;           //按键频率减
              sbit           S3 = P5^5;           //按键占空比加
              sbit           S4 = P1^7;           //按键占空比减
              sbit           PWM1 = P3^6;         //输出1
              sbit           OUT=  P3^2;          //
              sbit           Led = P3^3;          //LED
//===========================================================
//                  四、变量声明区
//===========================================================
              u8             data recive[10];        //声明数组,接收到的数据缓存
              u8             data recive_1[10];      //声明数组,接收到的数据缓存
              u8             data time;              //软件计时,延时读取通讯数据
              u8             data num;               //通讯字节计数专用
              u8             UART_FIG;               //串口接收标志位
              u16            Time_1US,F_Hz,CT,Step;       //F_HZ=100倍(20000对应200HZ)  CT=50(占空比50%)     Step(步进数)
//===========================================================
//                  五、主函数区
//===========================================================
              main()
              {
               Init_IO();                        //IO初始化
               UartInit();                       //串口初始化
               F_Hz = 55;                         //初始值频率
               CT   =    50;                     //初始值占空比10%
               Step =     5;                     //步进数
               Timer2_Init();                     //定时器2初始化
               while(1)
                {
                key_san();
        //静态数码管显示
//         Pout1 = !Pout1;
                }
              }    
//==========================================================
//           六、子函数区
//==========================================================
// 描述:控制函数
              void key_san(void)
              {
               if(S1 == 0)                         //频率加
               {
               if(++Time_1US>20000)                 //
                if(S1 == 0)
                {
                 Time_1US = 0;
                 F_Hz = F_Hz/100;                 //缩小100倍
                 F_Hz = F_Hz + Step;             //
                 if(F_Hz>=200)                     //
                 {
                 F_Hz=0;                         //
                 }     
                 Timer2_Init();
                 Led = 0;
                }          
               }
              if(S2 == 0)                         //频率减
               {
               if(++Time_1US>20000)                 //
               if(S2 == 0)
                {
                Time_1US = 0;
                F_Hz = F_Hz/100;                 //缩小100倍
                F_Hz = F_Hz - Step;                 //
                if(F_Hz==0)
                 {
                 F_Hz=200;
                 }
                Timer2_Init();                     //
                Led = 0;
                }               
               }
               if(S3 == 0)                         //占空比加
               {
               if(++Time_1US>20000)                 //
               if(S3 == 0)                         //
                {
                Time_1US = 0;                     //
                CT = CT + Step;                     //
                if(CT>=100){CT=0;}                 //
//             Timer2_Init();
                Led = 0;
                }               
               }
               if(S4 == 0)                         //占空比减
               {
               if(++Time_1US>20000)                 //频率
                if(S4 == 0)
                {
                Time_1US = 0;                     //F_HZ
                CT = CT - Step;                     //占空比-步进数
                if(CT==0){CT=100;}                 //占空比
//             Timer2_Init();
                Led = 0;
                }               
               }
              }
//=========================================================
//           七、所有初始化函数
//=========================================================
              void UartInit(void)        //9600bps@12.000MHz
              {
              SCON = 0x50;        //8位数据,可变波特率
              AUXR |= 0x40;        //定时器时钟1T模式
              AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
              TMOD &= 0x0F;        //设置定时器模式
              TL1 = 0xC7;            //设置定时初始值
              TH1 = 0xFE;            //设置定时初始值
              ET1 = 0;            //禁止定时器中断
              TR1 = 1;            //定时器1开始计时
              ES  = 1;            //打开串口中断
              EA  = 1;            //打开总中断
              }
//=========================================================
//             定时器2初始化
//=========================================================
              void Timer2_Init(void)        //1000微秒@12.000MHz
              {  
              AUXR |= 0x04;                      //定时器2为1T模式
              F_Hz = F_Hz*100;                   //*100 总分频20000HZ
              T2L = (65536-FOSC/2/F_Hz);         //初始化计时值
              T2H = (65536-FOSC/2/F_Hz) >> 8;            
              AUXR |= 0x10;                      //定时器2开始计时

//    INT_CLKO = 0x04;                 //使能定时器2的时钟输出功能
              IE2 |= 0x04;                       //开定时器2中断
              EA  = 1;                           //打开总中断
              if(F_Hz == 0||F_Hz == 20000)       //当频率值为0或200Hz关闭输出
               {
                  IE2 &= ~0x04;                   //关闭中断
               AUXR &= ~0x10;                  //定时器2停止计时
               PWM1 = 0;
               }
              }
//=========================================================
//             初始化IO口函数
//=========================================================
              void Init_IO(void)        //IO初始化
              {
              P1M0 = 0x00;
              P1M1 = 0x00;
              P3M0 = 0x01;
              P3M1 = 0x00;
              S1 = S2 = S3 = S4 = 1;
              PWM1 = 0;
              Led = 1;
              }    
//=========================================================
//             八、所有中断函数
//=========================================================
// 描述:定时器0中断函数,1毫秒进入一次中断
void time0() interrupt 1     //定时器0中断程序
{

}
//=========================================================
//            定时器2中断程序
//=========================================================
              void t2int() interrupt 12           //定时器2中断程序,
              {      
              u16 CT1,CT2;                         //    CT=占空比
              u8 ss;
              CT2++;                             //
              if(CT2>=2)                         //CT2为占空比计数器0-100
               {
               CT2 = 0;
               CT1++;
               if(CT1>=CT)
                {
                PWM1 = 0;                         //
                }
                 else
                {
                PWM1=1;
                }
                if(CT1>=100)
                {
                CT1 = 0;
                }
                }
               ss++;
               if(ss>50)
               {
                ss=0;
                   OUT=~OUT;
               }
              }
//=========================================================
//            串口中断通信
//=========================================================
              void exter0() interrupt 4       //串口中断通信
              {
               if(RI==1)
               {
               recive[num++]=SBUF;//接收一个字节
               if(num>=2)
                {
                F_Hz = recive[0];
                CT   =    recive[1];
//                 F_Hz = F_Hz*100;
//                 T2L = (65536-FOSC/2/F_Hz);                 //初始化计时值
//                 T2H = (65536-FOSC/2/F_Hz) >> 8;    
                Timer2_Init();
                Led = 0;
                num=0;                                 
                }  //防止缓存数据超限             
                RI=0;
               }
               time=10;             //数据延时读取时间
               if(num>=2)
               {
               num=0;
               }         
              }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库服务器架构

ORM ORM&#xff08;Object Relational Mapping&#xff09;&#xff1a;对象与关系数据之间的映射 映射关系表&#xff1a; 类&#xff08;class&#xff09;—— 数据库的表&#xff08;table&#xff09; 对象&#xff08;object&#xff09;——记录&#xff08;record…

【论文速递】2025年04周 (Robotics/Embodied AI/LLM)

目录 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning摘要 Evolving Deeper LLM Thinking摘要 Kimi k1.5: Scaling Reinforcement Learning with LLMs摘要 Agent-R: Training Language Model Agents to Reflect via Iterative Self-Train…

FortiAI 重塑Fortinet Security Fabric全面智能化进阶

专注推动网络与安全融合的全球性综合网络安全解决方案供应商 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;&#xff0c;近日宣布&#xff0c;旗下 Fortinet Security Fabric 安全平台成功嵌入了 FortiAI 关键创新功能。这一举措将有效增强用户对各类新兴威胁的防护…

汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作

故障现象 一辆2019款大众途观L车&#xff0c;搭载DKV发动机和0DE双离合变速器&#xff0c;累计行驶里程约为8万km。车主进厂反映&#xff0c;鼓风机偶尔不工作。 故障诊断  接车后试车&#xff0c;鼓风机各挡位均工作正常。用故障检测仪检测&#xff0c;空调控制单元&#x…

MySQL为什么默认使用RR隔离级别?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助&#xff1b; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR&#xff08;Repeatable Read&#xff09;…

目标检测篇---R-CNN梳理

目标检测系列文章 第一章 R-CNN 目录 目标检测系列文章&#x1f4c4; 论文标题&#x1f9e0; 论文逻辑梳理1. 引言部分梳理 (动机与思想) &#x1f4dd; 三句话总结&#x1f50d; 方法逻辑梳理&#x1f680; 关键创新点&#x1f517; 方法流程图补充边界框回归 (BBR)1. BBR 的…

Java技术栈 —— 基本规范

Java技术栈 —— 基本规范 一、接口文档生成工具二、接口设计2.1 开发顺序2.2 接口规范 三、数据类封装 一、接口文档生成工具 有很多jar包都支持swagger的接口文档&#xff0c;这样方便了接口测试&#xff0c;不需要用apifox自己写接口&#xff0c;直接调用文档里的swagger接…

Django ORM 定义模型

提示&#xff1a;定义模型字段的类型 文章目录 一、字段类型二、字段属性三、元信息 一、字段类型 常用字段 字段名描述备注AutoFieldint 自增必填参数 primary_keyTrue&#xff0c;无该字段时&#xff0c;django自动创建一个 BigAutoField&#xff0c;一个model不能有两个Au…

[密码学基础]GB与GM国密标准深度解析:定位、差异与协同发展

[密码学基础]GB与GM国密标准深度解析&#xff1a;定位、差异与协同发展 导语 在国产密码技术自主可控的浪潮下&#xff0c;GB&#xff08;国家标准&#xff09;与GM&#xff08;密码行业标准&#xff09;共同构建了我国商用密码的技术规范体系。二者在制定主体、法律效力、技术…

Day-1 漏洞攻击实战

实训任务1 漏洞攻击实战一 使用 御剑 得到网站后台地址 数据库登录与日志配置​​ 使用默认密码 root:root 登录phpMyAdmin&#xff0c;执行 SHOW VARIABLES LIKE general% 查看日志状态。 开启日志功能&#xff1a;set global general_log "ON";&#xff08;配图&…

leetcode 2563. 统计公平数对的数目 中等

给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c;返回 公平数对的数目 。 如果 (i, j) 数对满足以下情况&#xff0c;则认为它是一个 公平数对 &#xff1a; 0 < i < j < n&#xff0c;且lower < nums[i] …

011数论——算法备赛

素数筛 给定n, 求2~n内的所有素数 埃氏筛 利用素数的定义&#xff0c; 输出素数2&#xff0c;然后筛掉2的倍数&#xff0c;得 {2,3,5,7,9,11,13&#xff0c;…}输出素数3&#xff0c;然后筛掉3的倍数&#xff0c;得 {2,3,5,7,11,13&#xff0c;…} 继续上述步骤&#xff0…

算法之贪心算法

贪心算法 贪心算法核心思想常见应用场景典型案例案例一&#xff1a;找零问题案例二&#xff1a;活动选择问题案例三&#xff1a;货仓选址问题 贪心算法的应用详解霍夫曼编码最小生成树Dijkstra最短路径算法 总结 贪心算法 核心思想 贪心算法&#xff08;Greedy Algorithm&…

英码科技与泊川软件,携手加速AI与嵌入式系统融合创新

2025年4月15日&#xff0c;广州英码信息科技有限公司&#xff08;以下简称“英码科技”&#xff09;与广州泊川软件技术有限公司&#xff08;以下简称“泊川软件”&#xff09; 正式签署战略合作框架协议。此次合作将充分发挥双方在AI计算硬件与嵌入式操作系统领域的技术优势&a…

Flowable7.x学习笔记(九)部署 BPMN XML 流程

前言 到本篇为止&#xff0c;我们已经完成了流程定义以及其 BPMN XML 本身的查询和新增功能&#xff0c;那我们有有了XML之后就可以开始着手研究实现 Flowable7对流程的各种操作了&#xff0c;比如部署&#xff0c;挂起&#xff0c;发起等等。 首先第一步&#xff0c;我们本篇文…

electron 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;

在 Electron 中&#xff0c;有主进程和渲染进程 主进程&#xff1a;在Node.js环境中运行—意味着能够使用require模块并使用所有Node.js API 渲染进程&#xff1a;每个electron应用都会为每个打开的BrowserWindow&#xff08;与每个网页嵌入&#xff09;生成一个单独的渲染器进…

深入规划 Elasticsearch 索引:策略与实践

一、Elasticsearch 索引概述 &#xff08;一&#xff09;索引基本概念 Elasticsearch 是一个分布式、高性能的全文搜索引擎&#xff0c;其核心概念之一便是索引。索引本质上是一个存储文档的逻辑容器&#xff0c;它使得数据能够在高效的检索机制下被查询到。当我们对文档进行…

llamafactory的包安装

cuda版本12.1&#xff0c;python版本3.10&#xff0c;torch版本2.4.0&#xff0c;几个关键包版本如下&#xff1a; torch2.4.0cu121 transformers4.48.3 triton3.0.0 flash-attn2.7.1.post4 xformers0.0.27.post2 vllm0.6.3.post1 vllm-flash-attn2.6.1 unsloth2025.3.18 unsl…

Redis专题

前言 Redis的各种思想跟机组Cache和操作系统对进程的管理非常类似&#xff01; 一&#xff1a;看到你的简历上写了你的项目里面用到了redis&#xff0c;为啥用redis&#xff1f; 因为传统的关系型数据库如Mysql,已经不能适用所有的场景&#xff0c;比如秒杀的库存扣减&#xff…

【Rust 精进之路之第7篇-函数之道】定义、调用与参数传递:构建代码的基本单元

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:封装逻辑,代码复用的基石 在之前的文章中,我们已经探索了 Rust 如何处理数据(变量、标量类型、复合类型)以及如何控制程序的执行流程(if/else、循环)。这些构成了编写简…