串口显示

来源:互联网 发布:php网站提权 编辑:程序博客网 时间:2024/06/04 09:41
#include<reg52.h>#include "delay.h"#include "1602.h"unsigned char str[10];unsigned char Temp;          //定义临时变量unsigned char i = 0; void uart_init() {    SCON = 0x50;//设置串口方式1,打开允许接受    //SMO = 0; SM1 = 1;REN = 1;    TMOD |= 0x20;//设置定时器1为工作方式2    TH1 = 0xfd;//9600    //ET1 = 1;   //打开定时器中断    TR1 = 1; //打开定时器    EA = 1; }  void uart_send_byte(unsigned char byte) {    SBUF = byte;    //TI位自动置1,手动清0    while(!TI);//while(TI != 1);    TI = 0; } void uart_send_string(unsigned char *str) {    while(*str != '\0')    {        SBUF = *str;        str++;        while(!TI);        TI = 0;    } }/* char * uart_rec_string(unsigned char *str) { // unsigned char str[10];    unsigned char i;    for(i = 0; i < 3; i++)    {        str[i] = SBUF;    }    str[i] = '\0';    return str; }  */ void main() {      //unsigned char temp;    uart_init();    LCD_Init();    ES = 1;                  //打开串口中断    while(1)    {    /*  //uart_send_byte(0x61);        //delay_ms(5);        if(RI)        {            if(SBUF)            {            //  uart_send_string("i recevied is:");                uart_send_byte(SBUF);            //  uart_send_string("\r\n");            }            RI = 0;        }        if(TI)        {            TI = 0;        } */    } }void UART_SER (void) interrupt 4 //串行中断服务程序{   if(RI)                        //判断是接收中断产生     {      RI=0;                      //标志位清零      Temp=SBUF;                 //读入缓冲区的值      P1=Temp;      if(i < 10)      {        str[i] = Temp;        i++;      }      if(i == 9)      {         str[i] = '\0';         LCD_Write_String(0,0,str);      }                   //把值输出到P1口,用于观察      SBUF=Temp;                 //把接收到的值再发回电脑端     }   if(TI)                        //如果是发送标志位,清零     TI=0;} 
0 0