我要发布
仪器网/ 仪器社区/ 振荡器/圆周振荡器/涡旋振荡器/ 假设单片机的晶体振荡器的频率是12MHz,利用定时器1采用方...

假设单片机的晶体振荡器的频率是12MHz,利用定时器1采用方式1定时20ms,

魔方☆小孑    2017-12-15    振荡器/圆周振荡器/涡旋振荡器    浏览 1274 次

假设单片机的晶体振荡器的频率是12MHz,利用定时器1采用方式1定时20ms,写出初值的计算过程和整个定时器初始化程序,同时写出在P1.7脚上输出0.2秒的方波的完整程序... 假设单片机的晶体振荡器的频率是12MHz,利用定时器1采用方式1定时20ms,写出初值的计算过程和整个定时器初始化程序,同时写出在P1.7脚上输出0.2秒的方波的完整程序

精彩问答
zhangqi0929 发布日期:2017-12-16
12MHz晶振,单片机机械周期 T=12/Fosc=12/12MHz=1us;
T1定时器工作模式1 为 16位定时器,定时计算公式为:t=
(2^16-)×机械周期 T,
将T=1us,t=20ms 代入公式得:
(65536-)×1us=20ms,得:
TH1:TL1=65536-20ms×1000us/ms÷1us=45536=0xB1E0,得:
TH1=0xB1,TL0=0xE0;
定时器初始化函数:
void TimerInit()
{
TMOD &=0x0F;
TMOD |=0x10;
TH1=0xB1;
TL1=0xE0;//建议将 0xB1、0xE0宏定义为th1、tl1;
EA=1;
ET1=1;
TR1=1;
}

0.2秒方波,未说明是脉宽还是周期,只能认为是周期。则脉宽为0.2s÷2=100ms;
#define T100msAt20msCount 5
sbit WaveOut=P1^7;
void Timer1()interrupt 3
{
static unsigned char t20ms=0;
TL1=tl1;//
TH1=th1;//按前面说的宏定义
if(++t20ms>=T100msAt20msCount)
{
t20ms-=T100msAt20msCount;
WaveOut=~WaveOut;
}
}
void main()
{
TimerInit();
while(1);
}
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控