/*
C语言编程:8051单片机系统的时钟为11.0592MHz,把0~99从串行口输出。
每个数据之间时间间隔10ms,波特率为9600,8位数据位,1位停止位,无奇偶校验位。
悬赏分:30 | 解决时间:2011-6-30 18:55
===============================================
最佳答案:
控制 51 单片机进行串口通信,编程是很简单的。
在 PROTEUS 中,有多种仿真调试串口的方法,采用虚拟终端,则最为简便。
仿真截图如下:
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/3217548780d3d95f65096e63.html#
程序如下所示:
*/
#include <reg51.h>
#define XTAL 11059200 // 晶振频率
#define baudrate 9600 // 通信波特率
#define uchar unsigned char
#define uint unsigned int
char aa, bb = 0;
//-----------------------------------------------------------
void main(void)
{
PCON = 0x00; // 波特率不倍增.
SCON = 0x50; // 串行口工作方式.
TMOD = 0x21; // T1定时方式2, 产生波特率.
// T0定时方式1, 定时 5ms.
TL1 = (uchar)(256 - (XTAL / (384L * baudrate))); //T1初值.
TH1 = (uchar)(256 - (XTAL / (384L * baudrate)));
TR1 = 1; // 启动T1
TL0 = (65536 - 4608) % 256; //5ms@11.0592MHz
TH0 = (65536 - 4608) / 256;
TR0 = 1; // 启动T0
ET0 = 1;
EA = 1; // 中断总允许.
while(1);
}
//-----------------------------------------------------------
void T0_INT() interrupt 1
{
TL0 = (65536 - 9216) % 256; //5ms@11.0592MHz
TH0 = (65536 - 9216) / 256;
aa++;
aa %= 20; //2 代表 10ms
if (aa == 0) {
SBUF = (bb / 10) * 16 + (bb % 10);
bb++;
bb %= 100;
}
}
//===============================================
//回答时间:2011-6-30 18:06
//回答者: 做而论道 | 十五级采纳率:43%
//提问者对于答案的评价:非常感谢
//原题网址:http://zhidao.baidu.com/question/286274710.html
//===============================================