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

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

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

请问大家谁有mcs12dp256这个片的SCI串行通讯收发数据的程序呀.想用串口调试助手实现数据的收发.并且能在调试助手上显示出来效果.我是初学者请大家帮帮助吧.我弄了好几天都没弄好好郁闷呀..谢谢
可以用CodeWarrior的PE功能生成参考代码。
海纳百川  有容乃大

版主你好 我有PE的一个BDM,,请问怎么用它生成参考代码呢。麻烦你和我说下吧,我还是收发不成功。我上午用示波器看了,电脑有信号发出来可是开发板就是收不到呢。开发板用sci也发不出来。

我不是说P&E公司的BDM,我是说用CodeWarrior里的PE(处理器专家)功能来生成参考代码。
海纳百川  有容乃大

我用的是mc9s12xdt512,你参考一下吧

/*************************************************
串口0初始化程序

BaudRate0:要设置的串口波特率
*************************************************/
void sci0_init(void)
{
//SCI0BD=(Clk_Frequece*1000000/BaudRate0/16); // 计算波特率寄存器的值
SCI0BD= 260; // 设置波特率为9600bps,4M晶振,所以总线时钟频率为40M
SCI0CR1=0; // 正常8位模式,无奇偶校验
SCI0CR2=0x2c; // 使能接收中断,使能发送、接收
}

/*************************************************
串口0发送一个字节程序

SendChar:要发送的数据
*************************************************/
void sci0_send(uchar SendChar)
{
while(!SCI0SR1_TDRE); // 等待发送缓冲区空
SCI0SR1_TDRE=1; // 写1清标志位
SCI0DRL = SendChar; // 写SCI数据寄存器
}

/*************************************************

串口0接收中断程序

*************************************************/
#pragma CODE_SEG NON_BANKED
interrupt void SCI0Recive_ISR(void)
{
SCI0SR1_RDRF=1; // 写1清标志位
SCI0RxData=SCI0DRL; // 读SCI数据寄存器
RxFlag0=1;
sci0_send(SCI0RxData); // 将接收到的数据回送
}
#pragma CODE_SEG DEFAULT

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

真好找,谢谢!
返回列表