本帖最后由 benshao 于 2013-1-9 14:05 编辑
我想通过写程序让
单片机定时器0按顺序输出20khz、30khz、40khz、50khz、60khz的高频方波,占空比50%,每个频点持续5秒钟左右,能做到吗?想通过改变定时器初值来做,但这程序该怎么写?用switch 语句么?
大家有没有好的想法?如果能实现这功能?
开始时想改变tc0的值来实现,发现
仿真出来的频率相差几倍,不行!
TH0=(65536-tc0)/256; TL0=(65536-tc0)%256;
T0_out=~T0_out;
请问你那个怎么写呢?我编程很差,搞不清逻辑关系,我写的如下面,但测试不行,不知是哪里出错了?
在方式2下,用下面的那些初始值一个一个测试可以达到那个频率,但加多个if语句就不行了!我的目的就是循环放这几个频率工作,每个频点持续两三秒,该怎么写呢?谢谢回答!
- #include <reg52.H>
- #include <intrins.H>
- #include<math.h>
- #define uint unsigned int
- sbit T0_out = P1^0; //定时器T0输出口
- uint n=0,k=0;
- /**************************************************************
- 函数功能:主函数
- **************************************************************/
- void timer0() interrupt 1
- {
- T0_out=~T0_out;
- n++;
- }
- void main(void)
- {
- EA=1; //开总中断
- TMOD=0x12; //方式2
- ET0=1; //定时器T0中断允许
- TR0=1; //启动定时器0
- while(1)
- {
- if(n>=1000)
- {
- k=k+1;
- n=0;
- }
-
- switch (k)
- {
- case 0:
- TH0=0xf7; //约50khz左右
- TL0=0x7d;
- break;
- case 1:
- TH0=0xff; // 约56khz左右
- TL0=0x4d;
- break;
- case 2:
- TH0=0xf4; // 约40khz左右
- TL0=0xf4;
- break;
- case 3:
- TH0=0xf6; // 约42khz左右
- TL0=0x2c;
- break;
- case 4:
- TH0=0xf2; // 约28khz左右
- TL0=0x30;
- break;
- default:
- TH0=0xee; // 约22khz左右
- TL0=0x48;
- break;
- }
- }
- }
复制代码我写成的代码在10楼,但还是出问题了,求帮忙!
一周热门 更多>