按照AN2883 想学习一下SCI的中断接收,可是不能实现。代码如下。
请问是什么原因,通过串口调测助手接收到的一直是'F',通过串口调测助手发送'L',还是只收到'F'。
#include <hidef.h> /* common defines and macros */ #include <mc9s12dp256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
unsigned char Stringcase;
#pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt 20 void sci0_rx(void) { SCI0SR1_RDRF=0; if (SCI0DRL=='U' || SCI0DRL=='u') { Stringcase=0x00; } else if (SCI0DRL=='L' || SCI0DRL=='l') { Stringcase=0x20; } } //***************************************************************************** // SCI参数设置 //***************************************************************************** void Init_SCI(void) { SCI0BDL=6; SCI0BDH=0; //CLOCK=7.3728MHz, bps=38400 SCI0CR1=0x00; SCI0CR2=0x2c; }
//************************************************************************** // 串口0发送 //**************************************************************************
void send(unsigned char data) { unsigned char c; while(!SCI0SR1_TDRE) {}; //数据仍在发送寄存器中,等待 c=SCI0SR1; //读SCI0SR1,清TDRE标志 SCI0DRL=data; //写SCI数据寄存器 }
void main(void) { /* put your own code here */ Init_SCI(); EnableInterrupts; // Stringcase=0x20; for(;;) { send('F'+Stringcase); } /* wait forever */ }
|