51之串口环回测试

来源:互联网 发布:b2b 快速 建站 编辑:程序博客网 时间:2024/06/05 06:46
/* file name: uart.c * author: yilonglucky#gmail.com * description: loopback of uart for 51, and duplicate to P1 * NOTE: 波特率设置为9600. 无奇偶校验. 晶振11.0592MHz */#include<reg52.h>void SendByte(unsigned char c){    SBUF = c;    while(!TI)    {        /* do nothing */;    }        TI = 0;}void SendStr(unsigned char *s){    while('\0' != *s)    {        SendByte(*s);        s++;    }        /* add a new line after the string */    SendByte(13); /* 0x0D: CR (carriage return) */    SendByte(10); /* 0x0A: LF (NL linefeed, new line) */    }void InitUART(void){    SCON  = 0x50;    // SCON: 模式 1, 8-bit UART, 使能接收      TMOD |= 0x20;    // TMOD: timer 1, mode 2, 8-bit 重装    TH1   = 0xFD;    // TH1:  重装值 9600 波特率 晶振 11.0592MHz      TR1   = 1;    // TR1:  timer 1 打开                             EA    = 1;    //打开总中断    //ES    = 1;    //打开串口中断}void main(void){    InitUART();    SendStr("UART Loopback Test: You can input anything to test!");    ES = 1;    /* 打开串口中断 */    while (1)    {        /* trap here */;    }}void uart_routine(void) interrupt 4 //串行中断服务程序{    unsigned char temp;        if(RI)    //判断是接收中断产生    {        RI = 0;    //标志位清零        temp = SBUF;    //读入缓冲区的值        SBUF=temp;    //把接收到的值再发回电脑端            P1 = temp;    //把值输出到P1口,用于观察    }    if(TI)    //如果是发送标志位,清零    {        TI = 0;    }}

0 0
原创粉丝点击