单片机晶振频率6MHz,使用定时器1以方式0和1,产生周期为1ms的等宽正方波脉冲,并由P1.0输出

如题,以中断方式编写

//计时器,使用四位一体数码管,前两位显示分钟,后两位显示秒。
//晶振频率:12M
//单片机型号:STC89C52RC
//定时器方式1
//这是我写的,运行过没问题,你自己改吧。
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit qian =P1^0; //千位
sbit bai =P1^1; //百位
sbit shi =P1^2; //十位
sbit ge =P1^3; //个位
uchar min=0,s=0,count=0;
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99, //sbit a P0^0;sbit dp P0^7;
0x92,0x82,0xf8,0x80,0x90};
void delay();
void display();
void init();
void main()
{
init();
while(1)
display();
}
void init()
{
TMOD=0x01; //设置定时器为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开启总中断
ET0=1; //开启定时器0中断
TR0=1; //开启计时器
qian=bai=shi=ge=1; //给位选赋值
}
void display()
{
uchar i1,i2,i3,i4;
i1=min/10;
i2=min%10;
i3=s/10;
i4=s%10;
qian=0;
P0=table[i1];
delay();
qian=1;
bai=0;
P0=table[i2];
delay();
bai=1;
shi=0;
P0=table[i3];
delay();
shi=1;
ge=0;
P0=table[i4];
delay();
ge=1;
}
void delay()
{
uint t=50;
while(t--);
}
void inter() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
++count;
if(count==20)
{
count=0;
++s;
if(s==60)
{
s=0;
++min;
if(min==60)
min=0;
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-23
给你一个模板吧,,,这里选择定时器1的方式1 采用汇编 中断方式编写
T(周)=12/6 =2us, N=65536-(1/2 ms)/(2us)=65286

ORG 0000H
LJMP START;
ORG 001bH
LJMP TT1

START: mov TMOD ,#10H
mov DPTR ,#65286
mov TH1,DPH
mov TL1,DPL
SETB TR1
SJMP $
TT1:
mov TH1,DPH
mov TL1,DPL
CPL P1.0
RETI

给你参考一下,,有啥不懂得,,可以随时连线本回答被提问者和网友采纳
第2个回答  推荐于2018-03-01
方式0:
#include <reg51.h>
sbit pluse=P1^0;
void time1() interrupt 3
{
TH1=(8192-250)/32;
TL1=(8192-250)%32;
pluse=~pluse;
}
main()
{
TMOD=0x00;
TH1=(8192-250)/32;
TL1=(8192-250)%32;
TR1=1;
ET1=1;
EA=1;
while(1);
}
方式1:
#include <reg51.h>
sbit pluse=P1^0;
void time1() interrupt 3
{
TH1=(65536-250)/256;
TL1=(65536-250)%256;
pluse=~pluse;
}
main()
{
TMOD=0x00;
TH1=(65536-250)/256;
TL1=(65536-250)%256;
TR1=1;

ET1=1;
EA=1;
while(1);
}本回答被网友采纳
相似回答