Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291511
  • 博文数量: 23
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 662
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-26 13:43
文章分类

全部博文(23)

文章存档

2009年(19)

2008年(4)

我的朋友

分类: C/C++

2009-10-16 23:05:51

8051单片机初始化串口1,使用T1定时器,22.1184M晶振,波特率57600bps


void serial_init(){
    //TMOD = 0x20; //定时器1工作于8位自动重载模式
    TMOD &= 0x0f;
    TMOD |= 0x20;
    TH1 = 0xFF; //波特率
    TL1 = 0xFF;
    SCON = 0xD0; //串口工作方式为MODE1(10位数据,接收), SCON=0x50(10位数据, 接收) SCON = 0xD0 (11位数据,接收)
     // SCON=0xC0 (11位数据,不接收)
}

//注意:当使用仿真器时,需要打开中断!!否则仿真器不能正常停止
void serial_start(){
    EA = 1;                    //所有中断
    ES = 1;                    //串口中断
    TR1 = 1;     //启动定时器1
}

void serial_stop(){
    TR1 = 0;
    ES = 0;                    //关闭串口中断
}

void send_byte(unsigned char b, bit tb8){
    TB8 = tb8;        //第9位
    SBUF = b;
    while(!_testbit_(TI));    //查询发送
    TI = 0;
}

/* 串口0中断服务程序(receive)*/
void serial0_interrupt() interrupt 4
{
    //ES0 = 0;        //关串行中断
    if(_testbit_(RI)){
        RI = 0;
        show(SBUF%10);
    }
}


阅读(4203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~