标题: [讨论]如何用示波器看s12的SCI串口是否发送数据呢 [打印本页]
作者: lijun2631 时间: 2008-12-4 20:56 标题: [讨论]如何用示波器看s12的SCI串口是否发送数据呢
版主你好..我用mcs12dp256想和电脑连接,通过串口调试助手看到数据的收发,可是一直都连接不成功.请问版主能帮我看看我的程序对吗??
还有就是我想用示波器看一下是否有数据的发送我该怎么看呢,,麻烦你稍微给我说一下..谢谢了
作者: lijun2631 时间: 2008-12-4 20:56
#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
作者: lijun2631 时间: 2008-12-4 21:03
我的外部晶振是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; /*发送完成禁止发送器工作*/
}
}
作者: fjczd 时间: 2008-12-25 09:02
考虑用pe生成一个试试
作者: 康桥人 时间: 2008-12-25 21:23
示波器如果有协议分析的功能,可以看分析其数据的,
如果没有,可以看到电平的变化
作者: kent8411 时间: 2008-12-26 10:15
其实一般对于串口的调试都是,使用示波器看看他的时钟,和数据口你可以在程序中重复发送相同的数中间给上一定的延时,这样在看高低电平时就比较好分析是什么数据,与你发的数据是否相同了!
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |