我发一个DP256的SCI程序,你参考一下吧: #include <hidef.h> /* common defines and macros */ #include <mc9s12dp256.h> /* derivative information */ #define SCIRE PTM_PTM7 //87 pin 串口接收控制 输出 #define SCITE PTM_PTM6 //88 pin 串口发送控制 输出 #define SCIRxE SCI0CR2_RE //SCI 接收控制位 #define SCITxE SCI0CR2_TE //SCI 发送控制位 /* ************************************************************************ 函数声明 ************************************************************************ */
#pragma CODE_SEG DEFAULT void SCIInit(void); void SCI_TX(unsigned char *data,unsigned char num); //串口发送 void SCI_RX(unsigned char *data,unsigned char num); //串口接受
void PORTSInit(void) { DDRS=0xff; /*PORTS定义为输出*/ PTS=0xff; /*初始化为低*/ } /* ***************************SCIInit***************************
************************************************************* */ void SCIInit(void) {
SCI0BDH=0x00; /*波特率设为9600*/ SCI0BDL=0x34; SCI0CR1=0x00; /*选择normal模式,数据位8bit,起始位1bit, 停止位1bit,无校验位*/ SCIRxE=0; /*接收中断不使能*/ SCITxE=0; /*发送中断不使能*/ } /* ************************************************************************ 串口发送程序 data 发送数据的地址 num 发送数据的长度 ************************************************************************ */ void SCI_TX(unsigned char *data,unsigned char num) { unsigned char i; SCIRxE=0; /*接受不使能 */ SCITxE=1; /*发送使能 */ for(i=0;i<num;i++) { while((SCI0SR1_TDRE==0)) ; /*等待发送缓冲区空 */ SCI0DRL=*(data+i); /*向发送缓冲区写入待发送数据 */ } while(SCI0SR1_TC==0){} /*等待发送结束 */ SCIRxE=0; /*接收禁止*/ SCITxE=0; /*发送禁止*/ } /* ************************************************************************ 串口接受程序 data 接受数据的地址 num 发送数据的长度 ************************************************************************ */ void SCI_RX(unsigned char *data,unsigned char num) { unsigned char i; SCIRxE=1; /*发送不使能 */ SCITxE=0; for(i=0;i<num;i++) {
while((SCI0SR1_RDRF==0)); /*等待接受缓冲区满标志 */ *(data+i)=SCI0DRL; } PTS_PTS6=~PTS_PTS6; /*翻转PTS_PTS6 */ SCIRxE=0; SCITxE=0; }
void main(void) { unsigned char temp_s[10]={"wukaikun"}; DisableInterrupts; /*关全局中断*/ PORTSInit(); SCIInit(); EnableInterrupts; /*开全局中断*/
for(;;) { SCI_TX(temp_s,10); /*第一次发送字符wukaikun,此后发送接收的10个字符*/ SCI_RX(temp_s,10); /*接收到10个字符后驱动PTS_PTS6(D8)输出翻转*/ } }
|