zhliao2

风雨兼程,一路向北-------fpga (Keep a quiet heart study)
MCU发送一个字符串后(复位有效),后等待PC发送并又返回给PC显示

晶振11.0592MHz,发送和接收使用的格式相同,如都使用字符型格式,按下复位键,则PC显示Crazy_Didong!,在单子串发送去填入相应的字符串/字符,则PC显示相应的字符串/字符。

#include<reg52.h>                        

//串口初始化
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 SendByte(unsigned char dat)
{
    SBUF = dat;
    while(!TI);
    TI = 0;         //这条语句不可以注释掉,因为当TI = 1时候,又因为ES = 0,所以就不会直接跳到中断服务子程序里面了,所以就必须清零
}

//发送一个字符串
void SendStr(unsigned char *s)
{
    while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
    {
    SendByte(*s);
    s++;
    }
}                   

//主函数
void main (void)
{

    InitUART();
    
    SendStr("Crazy_Didong!");
    ES = 1;            //如果上面的加了ES = 1后,则PC只显示一个C而已

    while (1)                       
    {
        
    }
}

//串口中断程序
void UART_SER (void) interrupt 4 
{
   unsigned char Temp;          //定义临时变量 
   
   if(RI)                        //判断是接收中断产生
   {
      RI=0;                      //标志位清零
      Temp=SBUF;                 //读入缓冲区的值
      P1=Temp;                   //把值输出到P1口,用于观察
      SBUF=Temp;                 //把接收到的值再发回PC
   }

   if(TI)                        //如果是发送标志位,清零
     TI=0;
} 

posted on 2012-07-08 14:26  zhliao  阅读(521)  评论(0)    收藏  举报