日志档案

发表于 2008-5-22 14:26:49

6

标签: uart  单片机  串口  中断  

单片机串口中断程序,强力推荐!

//=====================================================================================
//  Module Name :  uart.c
//  CreateDate  :  2008-4-1
//  ModifData   :  2008-4-1
//  Description :  串口中断程序,发送接收到的字符,已测试通过。
//  Author      :  LuoWei
//  Version     :  YBD_V1.0
//=====================================================================================
#include "reg51.h"

#define uchar unsigned char
#define uint unsigned int

//--------------------------------------------------------------------------
//函数名称:      UART_Init()
//函数功能:      串口初始化函数,在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//其他说明:      串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------

void UART_Init(void)
{
 SCON = 0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr
 TMOD |= 0x20 ;  //TMOD: timer 1, mode 2, 8-bit reload
 PCON |= 0x80 ;  //SMOD=1;
 TH1 = 0xFA ;  //Baud:9600 fosc="11".0592MHz
 ES=1;
 TR1 = 1 ;   // timer 1 run
 EA=1;
}

 

//--------------------------------------------------------------------------
//函数名称:      main(void)
//函数功能:      主函数
//其他说明:      无
//--------------------------------------------------------------------------

void main(void)
{
 UART_Init();
 while(1);
}


//--------------------------------------------------------------------------
//函数名称:      Uart_SendData()
//函数功能:      串口发送一个字节的数据
//其他说明:      此程序供中断调用
//--------------------------------------------------------------------------

void Uart_SendData(uchar dat)
{
 SBUF=dat;  //写SBUF,开始发送
 while(TI==0); //等待发送
  TI="0";   //清发送标志位
}

 

//--------------------------------------------------------------------------
//函数名称:      INT_UartRcv()
//函数功能:      串口接收中断函数
//其他说明:      无
//--------------------------------------------------------------------------

void INT_UartRcv(void) interrupt 4
{
 uchar Rcv="0";
 if(RI)
 {
  RI="0";     //
  Rcv="SBUF";
  Uart_SendData(Rcv);  //返回接收数据,可以改为其他函数 
 }

 }

系统分类: 单片机   |   用户分类: 单片机技术   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(688)    回复(3)  

投一票您将和博主都有获奖机会!

  • 彩云

    2008-5-29 22:54:55

    感谢楼主分享

  • craftor

    2008-6-1 23:44:02

    顶!

  • zys2008

    2008-6-7 18:50:23

    我正在做这个是个接收的,用汇编的要,自己编的是采用查询的方式,因为要动态显示,其中得用中断定时的,所以还得定优先级就没考率,现在又想用了,虽然是C的但思路很重要的,谢谢分享了