编写51单片机程序,方波程序,at89s52的单片机

以下是我的程序,基准方波(在定时器T0里的方波,还行)仿真还行,但后面的分频的就差很远//晶振为12M,可以输出p1.0=1.25kHZ,p1.1=2.5kHZ,p1.3... 以下是我的程序,基准方波(在定时器T0里的方波,还行)仿真还行,但后面的分频的就差很远
//晶振为12M,可以输出p1.0=1.25kHZ,p1.1=2.5kHZ,p1.3=5khz,1.3=10KHZ五种方波,用T0做定时器, p1.6,p1.7做四选一数据选择器的选择位
#include <reg52.h>
#define uchar unsigned char
#define TL_0SET (256-25)

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;

sbit P1_6=P1^6;
sbit P1_7=P1^7;

bdata uchar x=0;
sbit p16=x^0;
sbit p17=x^1;
sbit flag=x^2;

uchar i,j;

void e0int() interrupt 0 //用外部中断0作控制开关,控制四选一数据选择器的输出
{
x++;
if(x==4)x=0;

P1_7=p16;
P1_6=p17;

}

void time0() interrupt 1
{
//T0定时25us,T0的中断服务程序

TL0=TL_0SET+8;//加8,是对程序做一个误差补偿,因为从进入定时中断,到执行中断里的第一句程序,是有时间间隔的,在此做一个误差补偿

P1_0=~P1_0;

//for(i=2;i>0;i--);

//flag=P1_0;

}

void main()
{
TR0=0;
TMOD=0x02;
EA=1;

ET0=1;
EX0=1;//外部中断0允许
IT0=1;//外部中断0由下降沿触发
TL0=TL_0SET;
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;
flag=0;

TR0=1; //T0定时器开始工作

while(1)
{

while(P1_0==flag)
{
flag=P1_0;

}

if(P1_0==1)
{

P1_1=~P1_1;
if(P1_1==0)
{ P1_2=~P1_2;
if(P1_2==0) P1_3=~P1_3;

}
}

}

}
请教各路大侠,希望给我些点拨,最好能自己仿真一下
展开
 我来答
做而论道
高能答主

2009-12-02 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
以下程序仿真成功,你试试看。

#include <reg52.h>
#define uchar unsigned char
#define TL_0SET (256 - 25)

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;

sbit P1_6=P1^6;
sbit P1_7=P1^7;

bdata uchar x=0;
sbit p16=x^0;
sbit p17=x^1;
sbit flag=x^2;

uchar i, j;

void e0int() interrupt 0 //用外部中断0作控制开关,控制四选一数据选择器的输出
{
x++;
if(x == 4) x = 0;
P1_7 = p16;
P1_6 = p17;
}

void time0() interrupt 1
{
//T0定时25us,T0的中断服务程序
TL0 = TL_0SET + 8;//加8,是对程序做一个误差补偿,因为从进入定时中断,到执行中断里的第一句程序,是有时间间隔的,在此做一个误差补偿
i++;
P1 = i;
P1_7 = p16;
P1_6 = p17;
}

void main()
{
TR0 = 0;
TMOD = 0x02;
TL0 = TL_0SET;
TR0 = 1; //T0定时器开始工作
ET0 = 1;
EX0 = 1;//外部中断0允许
IT0 = 1;//外部中断0由下降沿触发
EA = 1;

P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
flag = 0;

while(1) {;}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2e3ab4f62d
2009-12-02 · TA获得超过2132个赞
知道小有建树答主
回答量:1280
采纳率:0%
帮助的人:1231万
展开全部
你把产生的程序放到中断里面,看看效果如何

//晶振为12M,可以输出p1.0=1.25kHZ,p1.1=2.5kHZ,p1.3=5khz,1.3=10KHZ五种方波,用T0做定时器, p1.6,p1.7做四选一数据选择器的选择位
#include <reg52.h>
#define uchar unsigned char
#define TL_0SET (256-25)

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;

sbit P1_6=P1^6;
sbit P1_7=P1^7;

bdata uchar x=0;
sbit p16=x^0;
sbit p17=x^1;
sbit flag=x^2;

uchar i,j;

void e0int() interrupt 0 //用外部中断0作控制开关,控制四选一数据选择器的输出
{
x++;
if(x==4)x=0;

P1_7=p16;
P1_6=p17;

}

void time0() interrupt 1
{
//T0定时25us,T0的中断服务程序

TL0=TL_0SET+8;//加8,是对程序做一个误差补偿,因为从进入定时中断,到执行中断里的第一句程序,是有时间间隔的,在此做一个误差补偿

P1_0=~P1_0;

flag=P1_0;

if(P1_0==1)
{

P1_1=~P1_1;

if(P1_1==0)

{ P1_2=~P1_2;
if(P1_2==0) P1_3=~P1_3;

}
}

//for(i=2;i>0;i--);

//flag=P1_0;

}

void main()
{
TR0=0;
TMOD=0x02;
EA=1;

ET0=1;
EX0=1;//外部中断0允许
IT0=1;//外部中断0由下降沿触发
TL0=TL_0SET;
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;
flag=0;

TR0=1; //T0定时器开始工作

while(1);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式