注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
zhoouauruheng的个人空间 https://home.eeworld.com.cn/space-uid-454668.html [收藏] [复制] [分享] [RSS]
日志

ADuC7061中断方式实现串口通信

已有 864 次阅读2012-10-26 16:31

/*******************************
* name:
* function:
* return:
********************************/
#include \"string.h\"
#include \"global.h\"
#include \"function.h\"
#include
#include
unsigned char UartDataRecevice;
unsigned char UartDataTransfer;
unsigned char ucTxBufferEmpty  = 0;
unsigned char ucRxBufferFull  = 0;
volatile unsigned char bSendResultToUART = 0;
void UartSendData(unsigned char uchar);
unsigned char UartReceviceData(void);
int main(void)
{
/********
使用到的变量
  *********/
bSendResultToUART = 0;

/********
配置内部时钟10.24mhz
*********/
POWKEY1 = 0x1;
POWCON0 = 0x78;
POWKEY2 = 0xF4;

/********
配置GPIO管脚输出模式
*********/
GP2CON = 0x00;
GP2DAT = BIT24;

/********
串口的初始化
  *********/
GP1CON = BIT0 + BIT4;
COMCON0 = BIT7;
COMDIV0 = 0x21;
COMDIV1 = 0x00;
COMCON0 = BIT0 + BIT1 + BIT2;
COMIEN0 = BIT0 + BIT1; //使能接收缓冲满中断和发送缓冲空中断

/*使能串口中断*/
IRQEN |= BIT11;

while (1)
{
  if (bSendResultToUART == 1)
  {  
   printf(\"Received Charachter was : %x\\r\\n\\n\",UartDataRecevice);
   bSendResultToUART = 0;
   //UartSendData(UartDataRecevice);   使用这程序卡死了,不知道为什么
  }
}
}
/*****************************************
* IRQ_Handler
******************************************/
void IRQ_Handler(void) __irq
{
unsigned long IRQSTATUS = 0;
unsigned char ucCOMIID0 = 0;
IRQSTATUS = IRQSTA;

if ((IRQSTATUS&BIT11) == BIT11)   //UART中断源
{
  ucCOMIID0 = COMIID0;      
  if ((ucCOMIID0&BIT2) == BIT2)  // 接收缓冲区满中断
  {   
   UartDataRecevice = COMRX; // 读数据
   bSendResultToUART = 1; //置位
  }
  if ((ucCOMIID0&BIT1) == BIT1)
  {
   ucTxBufferEmpty = 1;
  }
}
}
void UartSendData(unsigned char ucTxChar)
{
COMTX = ucTxChar;
while ((COMSTA0&0x40) == 0x00)
{
}
}
今天自己测试的中断方式串口通讯,欢迎正在使用ADuC706x或使用过的朋友一起交流学习!
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章