本帖最后由 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;
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit T0_Wave = P1^0; //波形输出
- uint table_T0[5]={0xfa,0xfb,0xfc,0xfd,0xfe}; //TH0查表用数据,不是很精确,你要求的频率太高
- uint table_HZ[5]={20000,30000,40000,50000,60000}; //波形频率列表
- uchar i=0;
- uchar Count=0; //中断次数
- void Timer0_Init() //定时器0初始化函数
- {
- TMOD=0x02; //T0工作方式2,8位自动重装
- TL0=TH0=table_T0[i]; //选择数组中的初值
- TR0=1;
- ET0=1;
- EA=1;
- }
- void main()
- {
- T0_Wave=1; //开始输出高电平
- while(1) //循环输出
- {
- Timer0_Init();
- if(Count>=table_HZ[i]*5) //如果到达5S,则中断的次数为5*波形频率时
- {
- i++; //改变波形的频率
- }
- if(i>4)
- {
- i=0;
- }
- }
- }
- void Timer0_Int() interrupt 1 //中断处理函数
- {
- TL0=TH0=table_T0[i];
- T0_Wave=~T0_Wave; //取反
- Count++;
- }
复制代码一周热门 更多>