[讨论]如何用示波器看s12的SCI串口是否发送数据呢
- UID
- 530771
- 性别
- 男
|
[讨论]如何用示波器看s12的SCI串口是否发送数据呢
版主你好..我用mcs12dp256想和电脑连接,通过串口调试助手看到数据的收发,可是一直都连接不成功.请问版主能帮我看看我的程序对吗?? 还有就是我想用示波器看一下是否有数据的发送我该怎么看呢,,麻烦你稍微给我说一下..谢谢了
|
|
|
|
|
|
- UID
- 530771
- 性别
- 男
|
#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 |
|
|
|
|
|
- UID
- 530771
- 性别
- 男
|
我的外部晶振是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; /*发送完成禁止发送器工作*/
}
}
|
|
|
|
|
|
- UID
- 529491
- 性别
- 男
|
|
|
|
|
|
- UID
- 187580
- 性别
- 男
|
示波器如果有协议分析的功能,可以看分析其数据的, 如果没有,可以看到电平的变化 |
个人BLOG:http://blog.eccn.com/u/107300/index.htm |
|
|
|
|
|
- UID
- 522053
- 性别
- 男
|
其实一般对于串口的调试都是,使用示波器看看他的时钟,和数据口你可以在程序中重复发送相同的数中间给上一定的延时,这样在看高低电平时就比较好分析是什么数据,与你发的数据是否相同了! |
|
|
|
|
|