百度圣卡 二期2期啥时间出来?

的时钟频率位12MHz,设定时/计数器0工作在方式0,定时时间为1ms,试计算定时/计数器的初值,即IH0=?,TL0=?.说明:工作方式1是一个16位的计数器。
到下面博客网址( ),下载一个小程序就可搞定了.以后此类问题都可用此程序求解.
其他答案(共1个回答)
单片机内部都是由许多诸如触发器等构成的时序电路组成的,只有通过时钟才能使单片机一步步地工作。
具体工作时,单片机外部接上振荡器(也可以是内...
51单片机只有 T1、T0,没有T2(52才有)。
如果工作在方式0,方式1、方式2 的话,51单片机的T0、T1都可以做波特率发生器(一般是方式2做波特率发...
对于定时器的初值问题,11.0592是始终的晶振,时钟周期就是1/11.0592M
而定时器的周期就是12/11.0592
因为51单片机是12分频的
你也可以把显示数码管的程序放在中断里执行
也可以把显示数码管和键盘扫描放到同一个while(1)里面,显示一个数就扫一下键盘再显示另一个数又扫一下键盘
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区查看: 8422|回复: 6
51单片机的方波的输出频率和占空比
如何改变51单片机输出方波的频率和占空比
 昨天在24小时必答区还讨论了这个问题,楼主你进这个去看一下
 一起研究吧!我也要这信息!
我在网上找到得找个,试试还可以,刚刚学,还有好多地方不懂。
&&//程序功能简介:本程序产生15HZ~~~50KHZ的方波,并且实现频率和脉宽的独立调制,即可
//& & 在改变频率的同时不改变脉宽,再改变脉宽的同时不改变频率;同时设置
//& & 两个调节步长------在KEY键按下时,粗调,没有按下时,细调;
//程序思路: 本程序用到两个定时器------定时器0和定时器1,其中定时器0工作在定时方式下,
//& & 决定方波的频率;定时器1,同样工作在定时方式下,用于设定脉宽;
//制作人:&&陈卓;
//制作人单位: 武汉理工大学 信息工程学院 电信0504班;
//制作时间: 日;
//------------------------------------------------------------------------------------
#include &reg52.h&
#include &math.h&
#define&&uchar unsigned char
#define&&uint unsigned int
#define&&ALL&&65536& &&&//定时器工作方式1时,最大基数长度 65536;
#define&&F_osc & & //晶振频率12M;
//------------------------------------------------------------------------------------
// 各端口定义;
//------------------------------------------------------------------------------------
sbit KEY_F_UP=P0^2;& && &//频率上调按钮;
sbit KEY_F_DOWN=P0^3;& &&&//频率下调按钮;
sbit KEY_W_UP=P0^4;& && &//脉宽上调按钮;
sbit KEY_W_DOWN=P0^5;& &&&//脉宽下调按钮;
sbit KEY=P0^6;& && & //粗细调节按钮-----按下为粗调,否则为细调;
sbit OUTPUT=P1^0;& && &//波形输出;
//------------------------------------------------------------------------------------
//全局变量声明;
//------------------------------------------------------------------------------------
uchar TIMER0_H,TIMER0_L,TIMER1_H,TIMER1_L; //定时器0和定时器1的初值设置;
uchar PERCENT=50;& && &&&//初始占空比;
uchar FLAG_F=0,FLAG_W=0;& && &//频率调节标志和脉宽调制标志;
uint FREQ=50000;& && &&&//初始频率;
& && && &//临时全局变量,用于数据传递;
//-----------------------------------------------------------------------------------
//函数声明;
//-----------------------------------------------------------------------------------
void delay(uchar t);& && & //延时函数,用于按键去抖;
void init();& && && &//初始化函数,用于定时器的初始化;
void calculate_F();& && & //频率计算函数,当频率变化,计算出定时器0初值;
void calculate_W();& && & //脉宽计算函数,脉宽变化时,计算出定时器1初值;
void key_scan();& && &&&//按键扫描函数;
void timer0();& && &&&//定时器0中断函数;
void timer1();& && &&&//定时器1中断函数;
//-----------------------------------------------------------------------------------
//函数名称:delay();
//入口参数:uchar t;
//出口参数:无;
//函数功能:延时;
//------------------------------------------------------------------------------------
void delay(uchar t)
& &uchar i,j;
& &while(t--)
& &&&for(i=0;i&100;i++)
& &&&for(j=0;j&100;j++)
//-----------------------------------------------------------------------------------
//函数名称:calculate_F();
//入口参数:无;
//出口参数:无;
//函数功能:频率计算函数,当频率变化,计算出定时器0初值;
//------------------------------------------------------------------------------------
void calculate_F()
& &temp=ALL-F_osc/12.0/FREQ;
& &TIMER0_H=(uint)temp/256;
& &TIMER0_L=(uint)temp%256;
//-----------------------------------------------------------------------------------
//函数名称:calculate_W();
//入口参数:无;
//出口参数:无;
//函数功能:脉宽计算函数,脉宽变化时,计算出定时器1初值;
//------------------------------------------------------------------------------------&&
void calculate_W()
& &float TEMP;
& &TEMP=(1-PERCENT/100.0)*ALL+temp*PERCENT/100.0;
& &TIMER1_H=(uint)TEMP/256;
& &TIMER1_L=(uint)TEMP%256;
//-----------------------------------------------------------------------------------
//函数名称:key_scan();
//入口参数:无;
//出口参数:无;
//函数功能:按键扫描函数;
//------------------------------------------------------------------------------------
& & void key_scan()
& &delay(4);
& &if(!KEY_F_UP)& &&&//频率上调键按下;
& &&&FLAG_F=1;& & //置标志位;
& &&&if(!KEY)
& && &FREQ+=10;
& && &FREQ++;
& &&&if(FREQ&50000)
& && &FREQ=1;
& &else if(!KEY_F_DOWN)& &//频率下调键按下;
& &&&FLAG_F=1;& & //置标志位;
& &&&if(!KEY)
& && &FREQ-=10;
& && &FREQ--;
& &&&if(FREQ&1)
& && &FREQ=50000;
& & else if(!KEY_W_UP)& & //脉宽上调键按下;
& &&&FLAG_W=1;& & //置标志位;
& &&&if(!KEY)
& && &PERCENT+=5;
& && &PERCENT++;
& &&&if(PERCENT&49)
& && &PERCENT=1;
& & else if(!KEY_W_DOWN)& &//脉宽下调键按下;
& &&&FLAG_W=1;& & //置标志位;
& &&&if(!KEY)
& && &PERCENT-=5;
& && &PERCENT--;
& &&&if(PERCENT&1)
& && &PERCENT=49;
//-----------------------------------------------------------------------------------
//函数名称timer0();
//入口参数:无;
//出口参数:无;
//函数功能:定时器0中断函数;
//------------------------------------------------------------------------------------
&&void timer0() interrupt 1
& & TH0=TIMER0_H;
& & TL0=TIMER0_L;
& & TR1=1;& && &//开定时器1;
& & OUTPUT=1;
//-----------------------------------------------------------------------------------
//函数名称timer1();
//入口参数:无;
//出口参数:无;
//函数功能:定时器1中断函数;
//制作人: 陈卓;
//制作人单位:武汉理工大学 信息工程学院 电信0504班;
//制作时间:日;
//------------------------------------------------------------------------------------
&&void timer1() interrupt 3
& & TH1=TIMER1_H;
& & TL1=TIMER1_L;
& & TR1=0;& && &//关定时器1,一定要这一步,因为定时器1的定时短于定时器0;
& & OUTPUT=0;
//-----------------------------------------------------------------------------------
//函数名称init();
//入口参数:无;
//出口参数:无;
//函数功能:定时器初始化函数;
//------------------------------------------------------------------------------------
& &void init()
& & TMOD=0x11;& & //定时器0和定时器1都工作在方式1,16位计数器;
& & calculate_F();& &//初始为1KHZ,占空比为50%;
& & calculate_W();
& & TH0=TIMER0_H;
& & TL0=TIMER0_L;
& & TH1=TIMER1_H;
& & TL1=TIMER1_L;
& & ET0=1;
& & ET1=1;
& & TR0=1;
& & TR1=1;
//-----------------------------------------------------------------------------------
//函数名称main();
//入口参数:无;
//出口参数:无;
//函数功能:主函数入口;
//------------------------------------------------------------------------------------
& & init();
& & while(1)
& && &key_scan();
& && &if(FLAG_F)& &&&//改变频率时要注意要进行脉宽的重新设置;
& && &&&calculate_F();
& && &&&calculate_W();
& && &&&FLAG_F=0;
& && & if(FLAG_W)& &&&// 脉宽改变,频率不改变;
& && &&&calculate_W();
& && &&&FLAG_W=0;
很好,狠经典!!!&
帮助他人解决问题的 积分奖励!!!
很好呢,学习学习了。有没有PCA模块来改变占空比的例子啊?这个是用定时器中断。只是能单一输出PWM。如果我要输出三路呢,觉得就很麻烦了。最好有PCA模块的那程序,学习学习~~~
建议你看看LED调光(PWM)的程序,细细钻研会有帮助
Powered by如何测试单片机的bus_clock的频率? - 其他MCU产品 - 恩智浦技术社区
后使用快捷导航没有帐号?
查看: 2092|回复: 9
如何测试单片机的bus_clock的频率?
TA的每日心情奋斗 19:14签到天数: 4 天[LV.2]偶尔看看I主题帖子积分
在16位单片机中我通过PLL模块设置的总线时钟如何进行测试呢?我如何才能知道设置的bus_clock频率是否为自己想要得到的频率呢?例外,设置好的频率,我怎么知道此频率下单片机是否运行稳定呢?可以用示波器测吗?如果可以用示波器测,怎么测呢?
该用户从未签到主题帖子积分
高级会员, 积分 690, 距离下一级还需 310 积分
高级会员, 积分 690, 距离下一级还需 310 积分
回复:如何测试单片机的bus_clock的频率?
在Kinetis中有一个引脚叫做CLKOUT,可以选择输出Busclock,在其驱动代码sysinit.c中有定义,只需要在main函数调用即可。
void clk_out_init(void)
// If you are using UART1 for serial communications do not
// initialize the clock out function or you may break the UART!
& & if (TERM_PORT_NUM != 1)
/* Enable the CLKOUT function on PTC3 (alt5 function) */
&&PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
/* Select the CLKOUT in the SMI_SOPT2 mux to be bus clk*/
&&SIM_SOPT2 |= SIM_SOPT2_CLKOUTSEL(2);
TA的每日心情奋斗 19:14签到天数: 4 天[LV.2]偶尔看看I主题帖子积分
回复:如何测试单片机的bus_clock的频率?
回复第 2 楼 于 08:51:48发表:
在Kinetis中有一个引脚叫做CLKOUT,可以选择输出Busclock,在其驱动代码sysinit.c中有定义,只需要在main函数调用即可。
void clk_out_init(void)
// If you are using UART1 for serial communications do not
// initialize the clock out function or you may break the UART!
if (TERM_PORT_NUM != 1)
/* Enable the CLKOUT function on PTC3 (alt5 function) */
PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
/* Select the CLKOUT in the SMI_SOPT2 mux to be bus clk*/
SIM_SOPT2 |= SIM_SOPT2_CLKOUTSEL(2);
那么MC9S12系列单片机,以及MPC56XX系列单片机有类似的引脚吗?如果有,可否具体指出?谢谢斑竹!!
该用户从未签到主题帖子积分
高级会员, 积分 690, 距离下一级还需 310 积分
高级会员, 积分 690, 距离下一级还需 310 积分
回复:如何测试单片机的bus_clock的频率?
刚才查了一下MPC5602DRM也是有这个输出信号的,对应引脚为PA[0],不清楚你具体采用的那款芯片,不过建议你你直接在RM手册里搜索CLKOUT就能找到.
TA的每日心情奋斗 19:14签到天数: 4 天[LV.2]偶尔看看I主题帖子积分
回复:如何测试单片机的bus_clock的频率?
回复第 4 楼 于 13:15:23发表:
刚才查了一下MPC5602DRM也是有这个输出信号的,对应引脚为PA[0],不清楚你具体采用的那款芯片,不过建议你你直接在RM手册里搜索CLKOUT就能找到.
在MPC5604B中已找到此引脚,但在MC9S12XS128和MC9S12G128中均未找到此引脚。是不是在16位单片机中没有类似输出bus_clock的引脚。
在MPC5604B中有bus_clock时钟输出的引脚,那么我就可以通过示波器测试bus_clock的时钟频率了吗?
在MC9S12XS128和MC9S12G128中均未找到此引脚,那怎么知道单片机设置的频率是否为我需要得到的频率呢?
该用户从未签到主题帖子积分
高级会员, 积分 690, 距离下一级还需 310 积分
高级会员, 积分 690, 距离下一级还需 310 积分
回复:如何测试单片机的bus_clock的频率?
建议认真看看Clock的框图,PB0的ECLK就是你想要的时钟!
TA的每日心情奋斗 19:14签到天数: 4 天[LV.2]偶尔看看I主题帖子积分
回复:如何测试单片机的bus_clock的频率?
回复第 6 楼 于 16:06:58发表:
建议认真看看Clock的框图,PB0的ECLK就是你想要的时钟!
谢谢版主的耐心解答!谢谢!
该用户从未签到主题帖子积分
中级会员, 积分 314, 距离下一级还需 186 积分
中级会员, 积分 314, 距离下一级还需 186 积分
在Kinetis中有一个引脚叫做CLKOUT,可以选择输出Busclock,在其驱动代码sysinit.c中有定义,只需要在main函 ...
你的这个sysinit.c能上传一下看看吗,我用的是KSDK,没有找到这个,也一直在为时钟配置头疼
TA的每日心情开心 08:28签到天数: 11 天[LV.3]偶尔看看II主题帖子积分
没理解含义
TA的每日心情开心 15:05签到天数: 22 天[LV.4]偶尔看看III主题帖子积分
中级会员, 积分 330, 距离下一级还需 170 积分
中级会员, 积分 330, 距离下一级还需 170 积分
示波器应该能测吧
站长推荐 /1
官方板卡共享库是恩智浦官方为了方便大家体验官方板卡而开通的服务。多款最新热门官方开发板可申请试用。戳我看看都有哪些开发板。
Tel: 3-8069
版权所有@苏州灵动帧格网络科技有限公司
Powered by}

我要回帖

更多关于 百度圣卡合约期 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信