某温度数据采集系统有主、从机进行串行通讯,假定双机的系统时钟频率fosc=110592MHz,通讯速率9600bps,主机每次将温度数据temperature的值发送给从机,从机则将收到的数据送到显示器上显示,试完成双机通信程序设计。
分析:设定时器1工作于方式2,TMOD=00100000b=0x20。
定时器的初值计算:9600=Kfosc/[3212(256-TH1)],这里设SMOD=0,则K=1。fosc=110592MHz,计算得到:TH1=253=0x0fd。
SCON的确定:串口工作在方式1,允许接收。 所以: SCON=01010000b=0x50。
主机采集数据,并发送给从机的参考程序如下(这里没有考虑通信协议):
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
uchar Temperature;
void InitSystem(void);
void CollectData(void);
void Delay(void);
/系统初始化/
void InitSystem(void)
{
TMOD=0x20; / T1工作于方式2/
TH1=0xfd; / 通信速率2400bps/
TL1=0xfd;
PCON=0x00; / SMOD=0/
SCON=0x50; / 允许接收/
ES=0; / 开串口中断/
ET1=0;
TR1=1; / 启动定时器1/
RI=0;
TI=0;
}
void CollectData(void) /数据采集程序/
{;
// 此程序将采集的温度数据送入Temperature变量,限于篇幅,省去该程序代码。
}
void Delay() /延时子程序/
{
int i;
for(i=0;i<10000;i++);
}
void main(void)
{
InitSystem();
while(1)
{
Delay();
SBUF=Temperature; /发送温度数据/
while(!TI);
TI=0;
CollectData(); / 采集温度数据/
}
}
从机程序如下:
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
uchar Temperature;
void InitSystem(void);
void Comm(void) ;
void Display(void);
void InitSystem(void) /系统初始化程序/
{
TMOD=0x20; / T1工作于方式2/
TH1=0xfd; / 通信速率2400bps/
TL1=0xfd;
PCON=0x00; / SMOD=0/
SCON=0x50; / 允许接收/
EA=1;
ES=1; / 开串口中断/
ET1=0;
TR1=1; / 启动定时器1/
RI=0;
TI=0;
}
void Comm(void) interrupt 4 using 0 /串行中断服务程序/
{
Temperature=SBUF; / 保存数据/
RI=0; /清中断标志/
}
void Display(void) /显示程序/
{
;
/此程序将收到的Temperature 通过显示器显示出来 /
}
void main(void)
{
InitSystem();
while(1)
{
Display();
;
}
}
注意:晶振和波特率一定按照程序中给出的那样设置,否则会有很大的误码率导致通信失败。。。程序中用的是110592你就别用12M的,否则你就等着后悔吧
明明白白地告诉你:你说的C字母的单片机只能用烧写器下载程序,这种烧写器由于商业用途,基本上找不到现成的电路图或者驱动源程序的,都是要钱的,只能买。
你可以换AT89S52,估计比C52还便宜,但是比C52强大,因为C52停产了,物以稀为贵。S52支持ISP功能,可以自己制作编程器,很容易成功。
烧写器很贵,换块单片机几块钱做个编程器几块钱,很显然的成本。
下载器你可以用这个:
>
单片机当然可以控制外部电路,单片机最小系统只是基本应用,要发挥单片机的潜能,需要扩展外部电路。
1、利用光电隔离,可以控制外围电路,并且也将外部电路的干扰屏蔽在外。
2、利用373/245/244等器件,可以扩展并行IO口,从而控制更多的外围设备。
3、利用8255/8155等扩展并口。
等等,还有诸如利用595等串转并扩展,还可以利用CPLD,FPGA等扩展,总之只要深入理解单片机,那么单片机就可以发挥很大的潜力,帮助我们解决实际问题。
单片机控制伺服电机一般是针对伺服电机控制器来控制的,具体功能需根据您的使用要求来接线,比如,你是速度还是位置控制,你是点动还是别的控制方式,你是交流还是直流伺服,另外,伺服控制器上又设置功能与性能的拨码开关,具体需要参考他们的伺服控制器说明手册来设置就可以了, 不需要专门的设定软件,至于单片机控制伺服,只要给伺服控制器以下信息:比如:正传、反转、停止、执行的速度,提供伺服运转的脉冲等控制信号而已。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)