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

[讨论]如何用示波器看s12的SCI串口是否发送数据呢

[讨论]如何用示波器看s12的SCI串口是否发送数据呢

版主你好..我用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; /*发送完成禁止发送器工作*/

}

}


考虑用pe生成一个试试

示波器如果有协议分析的功能,可以看分析其数据的,

如果没有,可以看到电平的变化

个人BLOG:http://blog.eccn.com/u/107300/index.htm

其实一般对于串口的调试都是,使用示波器看看他的时钟,和数据口你可以在程序中重复发送相同的数中间给上一定的延时,这样在看高低电平时就比较好分析是什么数据,与你发的数据是否相同了!

返回列表