单片机编程高手请进,用T0的方式1定时,由P1.0引脚输出50Hz方波,晶振频率为12MHz,计算初值并编程,注释

 我来答
妖豆处萱暴19
推荐于2017-09-14 · TA获得超过402个赞
知道小有建树答主
回答量:159
采纳率:100%
帮助的人:194万
展开全部
(1)计算计数初值X
50Hz对应周期为20mS,P1.0需要10mS反相一次。
12MHz晶振对应机器周期 = 1us 
10mS需要机器周期数:10mS/1uS=10000
设需要装入T0的初值为X: X = 65536 − 10000 = 55536。
X 化为十六进制数: 55536 = D8F0H 。
T0的初值为TH0 =0D8H,TL0 = 0F0H。
(2)程序
ORG 0000H ;程序入口
BEGIN: AJMP MAIN ;转主程序
ORG 000BH ;T0中断入口
AJMP IT0P ;转T0中断处理程序IT0P

ORG 0100H ;主程序入口
MAIN: MOV TMOD,#01H ;设置T0为方式1定时
MOV TL0,#0F0H ;T0初始化,装初值的低8位
MOV TH0,#0D8H ;装初值的高8位
SETB ET0 ;允许T0中断
SETB EA ;总中断允许
SETB TR0 ;启动T0

SJMP $ ;原地循环,等待中断

IT0P: MOV TL0,#0F0H ;中断子程序,T0重装初值
MOV TH0,#0D8H
CPL P1.0 ;P1.0的状态取反
RETI
END
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-05-05
展开全部
定时器计数率=f/12,机器周期=12/f=1us,每个机器周期定时器计数加1,20ms=20000us
需计数次数=20000/(12/f)=20000
#include<reg52.h>
sbit p1_0=P1^0;
void main (void)
{
TMOD=0x01;//定时器0,方式1
TR0=1;//开计数器T0
for( ; ; )
{
TH0=-(20000/256);//装载计数初值
TH0=-(20000%256);
do {} while(! TF0);//查询等待TF0复位
p1_0=!p1_0;//定时时间到p1.0反相
TF0=0;//软件清TF0
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-05-06
展开全部
void timer0inpt(void) ;
static unsigned int i = 0 ;
main()
{

P1^0 = 0 ;
P1^1 = 0 ;

TMOD = 0x11;
AUXR = (AUXR|0x80);
TH0 = 0xF8;
TL0 = 0x30;//这个地方,自己仔细算一下。。
TR0 = 1;
ET0 = 1;
EA = 1;

while(1);
}

void timer0inpt() interrupt 1 using 1
{
TH0 = 0xF8;
TL0 = 0x30;

P1^0 =!P1^0;
i++;

if (i==250)
{
i = 0;
P1^1 =!P1^1;
}
}

如果要汇编的,,通知一下,,
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

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

说明

0/200

提交
取消

辅 助

模 式