C语言编程:8051单片机系统的时钟为11.0592MHz,把0~99从串行口输出

来源:互联网 发布:mac的桌面 编辑:程序博客网 时间:2024/05/01 18:01

/*
C语言编程:8051单片机系统的时钟为11.0592MHz,把0~99从串行口输出。
每个数据之间时间间隔10ms,波特率为9600,8位数据位,1位停止位,无奇偶校验位。
悬赏分:30 | 解决时间:2011-6-30 18:55
===============================================
最佳答案:

控制 51 单片机进行串口通信,编程是很简单的。
在 PROTEUS 中,有多种仿真调试串口的方法,采用虚拟终端,则最为简便。
仿真截图如下:C语言编程:8051单片机系统的时钟为11.0592MHz,把0~99从串行口输出 - 非著名博主 - 电子信息角落
图片链接: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
//===============================================

0 0
原创粉丝点击