首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]请问大家谁有mcs12dp256这个片的SCI串行通讯收发数据的程序呀.我是初学者请求

我发一个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)输出翻转*/
}
}

返回列表