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

求助版主一下s12串口通讯的问题.谢谢了.

求助版主一下s12串口通讯的问题.谢谢了.

版主你好..我用mcs12dp256想和电脑连接,通过串口调试助手看到数据的收发,可是一直都连接不成功.请问版主能帮我看看我的程序对吗??
还有就是我想用示波器看一下是否有数据的发送我该怎么看呢,,麻烦你稍微给我说一下好吗..谢谢了


#include <hidef.h> /* common defines and macros */
#include <mc9s12dp256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"


/*-------串口初始化----------------------*/
void Sci0Init()
{
//设置波特率,波特率=MCLK/(16*BR)
SCI0BDH = 0x00; //关闭红外,IREN=0
SCI0BDL = 0x34; //9600波特率//81,19.2Kbps
//控制寄存器,设置回送,单线等方式选择,帧格式,唤醒,空闲检测类型以及奇偶校验
SCI0CR1=0; /*normal,no parity*///0x13:11位奇校验,0x12:11位偶校验
SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/
}

/*-------发射端程序----------------------*/
void Sci0Tx(unsigned char text)
{
unsigned char temp;
temp=SCI0SR1; /*clear flag*/
//发送前判断SC0DR是否处于忙状态。SC0DR.7=0:处于忙状态
while (!SCI0SR1_TDRE); /* wait for output buffer empty */
while(!SCI0SR1_TC); //等待数据发送结束
SCI0DRH=0;
SCI0DRL=text;
}

/*-------接受端程序----------------------*/
byte Sci0Rx(void)
{
byte result,temp;
temp=SCI0SR1; /*clear flag*/
if((temp&0x20)>0)
result=SCI0DRL;
return result;
}


/******************************************************************
*函数名:PLLINIT
*入口参数SNNR寄存器值,REFDV0寄存器值
*出口参数: 无
*功能描述:使用PLLCLK,时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1)
*******************************************************************/
void PLLINIT(byte SYNR0,byte REFDV0)
{
CLKSEL=0x00; //disable pll;
CLKSEL_PLLSEL = 0;
PLLCTL_PLLON = 0;
SYNR = SYNR0; //
REFDV = REFDV0;
PLLCTL = 0xc0; //0xC0 CME=1,PLLON=1
PLLCTL_PLLON = 1;
while(!CRGFLG_LOCK);
CLKSEL_PLLSEL = 1;
return;
}
byte data=0;
void main(void) {
/* put your own code here */
byte i=0;
EnableInterrupts;
PLLINIT(24,9);
Sci0Init();
for(;;)
{
Sci0Tx(i++);
}
}


/*--------中断程序-----------------------*/
#pragma CODE_SEG NON_BANKED //中断函数必须定义在0x4000--0xFEFF区间内
void interrupt SCI0_Irp(void)
{
data=Sci0Rx();
Sci0Tx(data);
}
#pragma CODE_SEG DEFAULT
我的外部晶振是16MHz的....下边这个只是一个发送程序,麻烦你给看看对吗??谢谢了



#include <hidef.h> /* common defines and macros */
#include <mc9s12dp256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"

int i,j,k,m=0;char t[]={0xf1,0xf2,0xf3,0xf4};
void main()
{DisableInterrupts; /*禁止中断*/
//初始化SCI
SCI0BDL=0x34; /*波特率常数为52,设置波特率为9600*/
SCI0BDH=0x00;
SCI0CR1=0x00;
SCI0CR2=0x0c;
i=SCI0SR1;
i=SCI0DRL; /*清除标志位*/

while(1)
{if(SCI0SR1_TDRE==1)
{SCI0DRL=t[m]; /*发送字符串*
m++;
}
if(m==4)SCI0CR2_TE=0; /*发送完成禁止发送器工作*/

}

}

先用示波器看看SCI输出管脚是否有信号产生,再看看信号的周期和数据是否正确。

海纳百川  有容乃大

版主你好,我用示波器看了开发板的sci没有信号输出来的。这是为什么呢?你看我后边发的这个单独的发送程序对吗

i=SCI0SR1;
i=SCI0DRL;

还有我想问一下这两句程序是什么作用呢,我单步调试后SR1和DRL的值都没有清零的。这样正常吗??谢谢版主了

单步跟一下程序是否走到SCI发送数据这里了?
海纳百川  有容乃大

请老大帮忙看看

我用示波器看管教也没输出,是不是不正确啊

这是我用PE生产的程序

不知道对不对

for(;;){

if(AS1_GetCharsInRxBuf()!=0)
{
AS1_RecvChar(&data);
AS1_SendChar(data);
}
}

返回列表