引用第16楼我说要有光于2011-08-25 19:39发表的 回 15楼(jrcsh) 的帖子 :
不如换成52 用T2来做串口通讯
STC10F08XE
/*
本程序要用到哪些功能了
定时器1 用于 发生频率的时间
定时器2用于 串行通信
中断0 用于key1 的进入
P1要进行IO翻转,传说中使用强推的方式会快点,你信不信,反正我没进行实测不知,反正开了强推也不挨事,开就是了.
接下来~~~找以前写的程序~~~~挖代码过来拼程序
20110817
中断0没有启用,普通IO查询可以满足.
完善按键处理程序
定时器0送入数据处理
下一计划完成手动设置及串口显示状态可工作后在加入通过串口进行数据设置
20110825
下午发呆...又操了操...
加速上数工作了
数据写到定时器有BUG 排除之
*/
#include <REG51.H>
//#include <intrins.h>
//#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
sfr P1M1 = 0x91 ;
sfr P1M0 = 0x92 ;
sbit d2=P2^1;
sbit d1=P2^0;
sbit key1=P3^2;
sbit key2=P3^6;
sbit key3=P3^7;
sbit key4=P3^5;
uint mmm,ccc,ddd,eee,fff,ggg,hhh,iii,lll,ppp;
uchar xxx,yyy,zzz,aaa,bbb,qq123;
uchar code commm[]={'0','1','2','3','4','5','6','7','8','9'};
/*
void delayms(uint z) //ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
*/
void send_char(unsigned char ddat)
// 传送一个字符
{
SBUF = ddat;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
//timer0/counter0 interrupt
void timer0(void) interrupt 1
{
P1=~P1;
TL0=aaa;
TH0=bbb;
TR0=1; //管你有没关了开了在说
}
//int0 interrupt
void main()
{
TMOD=0x21;
TH0=255;
TL0=255;
TR0=1;
ET0=1;
SCON=0x50;
TH1=0xf3;
TL1=0xf3;
TR1=1;
EA=1;
P1M1 = 0x00 ; //P1口设置为强推
P1M0 = 0xff ; //晚些在设置
aaa=128;
bbb=128;
ccc=2;
ddd=0;
fff=6553;
eee=1;
ppp=30000;
ccc=0;//调试
P1=0xff;
d1=1;
d2=1;
while(1)
{
//=== key1=====
if(key1==0)
{
ccc=1;
ddd++;
//TR0=0; //关闭定时器0
//TR1=1;//打开串口通信波特发生
d1=0;
while(key1==0)
{
;
}
mmm=1;
d1=1;
}
//=== key1=====
//===========
if(ccc==1)
{
d2=0;
if(ddd==2)
{
d2=1;
ddd=0; //进入次数记录
ccc=2; // 退出CCC
aaa=(65535-eee)%256;
bbb=(65535-eee)/256;
TL0=aaa;
TH0=bbb;
//TR0=1; //打开定时器0
//TR1=0;//关闭串口通信波特发生
//bbb=TH0=(65535-50000)/256;
//aaa= TL0=(65535-50000)%256;
mmm=1;
}//ddd=2 //二次进入处理
//===========短按、单按响应======
if(fff==1)
{
eee=1;
}
if(fff==2)
{
eee=10;
}
if(fff==3)
{
eee=100;
}
if(fff==4)
{
eee=1000;
}
if(fff==5)
{
eee=10000;
}
if(key4==0)
{
fff++;
mmm=1;
while(key4==0)
{
;
}
}
if(fff>5)
{
fff=1;
}
//==============
if(key2==0)
{
ppp=ppp+eee;
mmm=1;
while(key2==0)
{
;
}
}
if(key3==0)
{
ppp=ppp-eee;
mmm=1;
while(key3==0)
{
;
}
}
if(ppp>65535)
{
ppp=1;
}
if(ppp<1)
{
ppp=65535;
}
//=============数据输出
if(mmm==1)
{
mmm=65530;
eee=1000000/ppp;
bbb=(65535-eee)/256;
aaa=(65535-eee)%256;
TL0=aaa;
TH0=bbb;
send_char('[s:9]');
send_char('1');
send_char('=');
send_char(commm[ppp/100000%10]);
send_char(commm[ppp/10000%10]);
send_char(commm[ppp/1000%10]);
send_char(' ');
send_char(commm[ppp/100%10]);
send_char(commm[ppp/10%10]);
send_char(commm[ppp%10]);
send_char('H');
send_char('z');
send_char(' ');
send_char('E');
send_char('=');
send_char(commm[eee/10000%10]);
send_char(commm[eee/1000%10]);
send_char(' ');
send_char(commm[eee/100%10]);
send_char(commm[eee/10%10]);
send_char(commm[eee%10]);
send_char('u');
send_char('S');
send_char(' ');
send_char(' ');
send_char('H');
send_char('=');
send_char(commm[bbb/100%10]);
send_char(commm[bbb/10%10]);
send_char(commm[bbb%10]);
send_char(' ');
send_char('L');
send_char('=');
send_char(commm[aaa/100%10]);
send_char(commm[aaa/10%10]);
send_char(commm[aaa%10]);
send_char(' ');
send_char(' ');
send_char(commm[fff]);
qq123++;
if(qq123>7)
{
qq123=1;
send_char(' ');
send_char(' ');
send_char('<');
send_char('>');
}
SBUF=0xd;//28;
while(!TI);
TI=0;
SBUF=0xa;//28;
while(!TI);
TI=0;
send_char(' ');
SBUF=0xd;//28;
while(!TI);
TI=0;
SBUF=0xa;//28;
while(!TI);
TI=0;
}
//mmm--;
//=============数据输出
}// ccc=1
//===================
} //w1
}//ma
可以工作了, 可是用示波器和频率记~~~来校对~~~ 设定的和输出的出入偏差很大 当玩具都不行