资源简介
本文是关于52单片机定时器计数器2做为串行口波特率发生器使用的例子,类似于定时器1作为波特率发生器工作在模式1下,但是不同的是:定时器2作为波特率发生器是16位自动重装的,位数比定时器1作为波特率发生器要高(定时器1作为串口波特率发生器是8位自动重装的),所以可以支持更高的传输速度,性能也比定时器1要好。程序在Keil 2和Keil 3下调试通过,下载在实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。
代码片段和文件信息
/*
程序功能:52系列单片机定时器计数器2作为串行口波特率发生器使用
程序设计:燕山大学 鲁信琼
晶振选择:24MHz 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位;
本实验注意事项:
1. 定时器2作为波特率发生器是16位自动重装,而定时器1作为波特率发生器是8位自动重装,定时器2使用RCAP2H去重装TH2,用RCAP2L去重装TL2;定时器1是使用TH2去重装TL2。
2. 定时器2作为波特率发生器,工作在模式1和模式3,波特率=振荡期频率/[32×(0xFFFF-)] 指RCAP2H作为高8位、RCAP2L作为低8位构成的16位无符号整数。
承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作
EMail: xqlu@ysu.net.cn QQ: 9790335
*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit DULA=P2^6;
sbit WELA=P2^7;
uchar str[]=“Yanshan university!“;
uchar i;
//24MHz晶振下延时x毫秒函数
void delay_ms(uint xms)
{
uint xy;
for(x=xms; x>0; x--)
for(y=248; y>0; y--);
}
// 主函数初始化24MHz晶振 28800bps波特率,有误差,建议大家使用11.0592MHz或者22.1184MHz
// 使用11.0592MHz时使用9600bps无误差; 22.1184MHz使用19200、14400、28800bps无误差,参数请大家按照上面的公式自己算。
void main_init()
{
DULA=0;
WELA=0;
delay_ms(1);
SCON=0x50; //SM0 SM1 SM2 REN TB8 RB8 TI RI
RCAP2H=(65536-26)/256;
RCAP2L=(65536-26)%256;
TH2=RCAP2H;
TL2=RCAP2L;
T2CON=0x34; //TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2
delay_ms(1);
}
void main()
{
main_init();
i=0;
while(str[i]!=‘\0‘)
{
TI=0;
SBUF=str[i];
while(!TI);
TI=0;
i++;
}
while(1);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-09-05 00:50 T2_COM_CLK\
文件 1577 2010-09-05 00:49 T2_COM_CLK\main.c
文件 3994 2010-09-05 00:38 T2_COM_CLK\main.LST
文件 4522 2010-09-05 00:38 T2_COM_CLK\main.OBJ
文件 4430 2010-09-05 00:38 T2_COM_CLK\T2_COM_CLK
文件 812 2010-09-05 00:38 T2_COM_CLK\T2_COM_CLK.hex
文件 46 2010-09-05 00:38 T2_COM_CLK\T2_COM_CLK.lnp
文件 4392 2010-09-05 00:38 T2_COM_CLK\T2_COM_CLK.M51
文件 960 2010-09-05 00:50 T2_COM_CLK\T2_COM_CLK.Opt
文件 188 2010-09-05 00:50 T2_COM_CLK\T2_COM_CLK.plg
文件 2107 2010-09-05 00:49 T2_COM_CLK\T2_COM_CLK.uv2
文件 832 2010-09-05 00:49 T2_COM_CLK\T2_COM_CLK_Opt.Bak
- 上一篇:C++仿QQ界面
- 下一篇:VC 6.0快速修改工程名工具
评论
共有 条评论