设89C52单片机Fosc=12MHz。试编写一段程序,对定时器T1初始化,使之工作在模式2,产生200us定时,

并用查询T1溢出标志的方法,控制P1.1输出周期为2ms的方波。

用C语言程序清单编写程序。

谢谢哪位好心人帮忙一下, 对我很重要,谢谢、

第1个回答  2013-05-13
楼上用的是查询法,我来个中断函数的 呵呵
#include<reg52.h>
sbit a0=P1^1;//端口定义
int count=0;//计时变量初始化
/*******************************T1中断服务函数*****************/
void T0Int() interrupt 3 using 0 //
{
count++;//200us 加一次
if(count==100)//一百次之后,取反输出端口
{
count=0;//清零计数值
a0=~a0;//端口取反
}
}
void main()
{
TMOD=0X02; //设置T0工作方式与为方式2
TH0=256-200; //设置高位重装的初值
TL0=256-200; //设置低位计数值
TR1=1; //启动定时器0
ET1=1;
EA=1; //开总中断
while(1);//等待中断
}追问

TMOD难道不等于0X08么?

追答

你这是计时,不是计数,所以不用0x80    。看看下面这个寄存器定义就知道了

                                                                                              步行者===电子单片机碳

                                                                                  qq:1320249827

本回答被网友采纳
第2个回答  2013-05-26
;
ORG 0000H
MOV TMOD, #02H
MOV TH0, #56
MOV TL0, #56
SETB TR0
MOV R7, #5
JNB TF0, $
CLR TF0
DJNZ R7, $ - 5
CPL P1.2
JMP $ - 11
END
第3个回答  2013-05-13
#include <reg51.h>
sbit P11=P1^1;
main()
{
unsigned char us200=0;
bit bb;
TMOD=0x20;
TH1=256-200;
TR1=1;
do
{
while(TF1==0);
TF1=0;
us200++;
if(us200>4)
{
us200=0;
P11=bb;
bb=!bb;
}
}
while(1);
}
第4个回答  2018-05-19
各个版本都有啊