如何设置定时器T1初值以产生频率为5KHz的方波。(假设晶振频率为12MHz,定时器工作在方式2)

1个回答
展开全部
摘要 亲,假设单片机的晶振频率为12MHz,使用T1,在方式1下控制P1.0输出1ms的等宽方波信号
咨询记录 · 回答于2022-06-15
如何设置定时器T1初值以产生频率为5KHz的方波。(假设晶振频率为12MHz,定时器工作在方式2)
亲,假设单片机的晶振频率为12MHz,使用T1,在方式1下控制P1.0输出1ms的等宽方波信号
频率测量如何实现。
先布线
时间常数TC=65536-12000000*0.001/12=65536-1000。
这是代码:sbit K=P1^0;void init_T1() interrupt 3{ TH1=(65536-1000)/256; TL1=(65536-1000)%256; K=~K;} void init(){ TMOD=0x01;//工作方式1 TH1=(65536-1000)/256; TL1=(65536-1000)%256; ET1=1; TR1=1; TF1=0; EA=1;}int main(){ init(); while(1); return 0;}
要先将KEIL中的单片机晶振频率设置为12MHz。
这样我们的方波就产生啦:
以上即可解决你的问题呢
频率测量如何实现。
首先我们选择内部时钟(PCLK)作为定时器的时钟源,PHB总线时钟的频率配置为170MHZ,在不采用预分频的情况下计数加一的时间即为1/(170M)秒。
频率测量不准确的原因及提高测量精度的方法。
预分频系数(Prescaler)为1(0+1),向上计数模式,计数溢出值为65535(16位),若需要出发定时器中断(计数溢出中断)就要在NVIC Setting中勾选对应的中断,此外在CUBEMX生成的代码中还需要添加额外的启动定时器函数。
若需要使用定时器中断,则需要在主函数中重新定义定时中断回调函数void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)需要执行的内容。这里用到了两个宏用来读取和写入计数器的计数值,__HAL_TIM_SET_COUNTER(&htim4,0); //计数清零,__HAL_TIM_GET_COUNTER(&htim4); //读取当前计数值。
通过读取两次定时中断内的计数差值推算出实际的外部输入脉冲频率。优点是可检测的频率范围可以到达几十兆,但是与之而来的是测量精度和响应速度间的权衡,如果定时的时间过长每次测频率的时间就会影响整个系统的响应速度,反之测评的时间如果过短就会但来的是精度的等比例较少。比如频率变化了100HZ,你的采样间隔为1S得到的改变量100,而你采样时间缩短为10ms(缩小100倍)后频率的变化只有1也会缩小100倍。
如何由ADC0809输出的数字量得到对应的模拟量。
这种资料的花钱购买给你附带链接如下:https://download.csdn.net/download/SKCQTGZX/22004380?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165523210916781432961523%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165523210916781432961523&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-22004380-null-null.142^v14^control,157^v14^control&utm_term=定时器对应的模拟量。&spm=1018.2226.3001.4187.2
乙机能产生的方波频率范围是多少并说明原因。
乙机能产生的方波频率范围:一个频率为10kHz的方波信号
已赞过
你对这个回答的评价是?
评论 收起
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消