目的:在采用飞思卡尔的MC9S12XS128单片机与电脑通信时,串口调试助手向单片机发送数据,单片机通过查询接收数据,当单片机接收到串口调试助手发送过来的数据后返回一个相应的值,很基础的串口通信调试。
问题:现在串口调试助手发送给单片机的数据,单片机能接收到,但是接收到的数据与串口调试助手发送的数据并不一致,而一致时单片机返回过来的数据在串口调试助手中显示的是乱码,求解原因?
(求赐教,急求!感谢各位!!!)
这是串口助手的显示
附上代码:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <MC9S12XS128.h>
#include <math.h>
#include <stdio.h>
uint synr=0;
long BUS_CLOCK=0; //总线频率
#define BAUD 9600 //串口波特率
void INIT_PLL()
{
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=0; //PLLCTL.6(pllon)设为0;先关闭PLL
BUS_CLOCK=64000000;
SYNR=0xc0|0x07;
REFDV=0x80 | 0x01;
POSTDIV=0x00;
PLLCTL_PLLON=1; //PLLCTL.6(pllon)设为1;打开PLL
_asm(nop);
_asm(nop);
while(CRG**_LOCK==0); //根据CRG**寄存器的LOCK位,确定PLL是否稳定 LOCK==1 稳定,==0 不稳定
CLKSEL_PLLSEL =1; //选择PLL作为时钟源
}
void INIT_SCI(void)
{
SCI0BD = BUS_CLOCK/16/BAUD; //设置SCI0波特率为9600
SCI0CR1 = 0x00;
SCI0CR2 = 0x0C;
}
void SCI_send(unsigned char data)
{
while(!SCI0SR1_TDRE); //等待发送数据寄存器(缓冲器)为空
SCI0DRL = data; //把数据放入SCI数据存储器
}
void send_string(unsigned char *putchar)
{
while(*putchar!=0x00) //判断字符串是否发送完毕
{
SCI_send(*putchar++); //发送字符串
}
}
unsigned char SCI_receive(void)
{
while(!SCI0SR1_RDRF); //等待发送数据寄存器满
return(SCI0DRL); //返回接受的数据
}
void delayms(int ms) //延时函数
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<60000;j++);
}
unsigned char data_receive;
void main(void)
{
int flag=0;
char txtbuf[22];
INIT_PLL() ; //
DDRB=0xff;
ATD_Init();
INIT_SCI();
EnableInterrupts; //使能中断
for(;;)
{
data_receive = SCI_receive(); //将SCI接收的数据传送给data_receive变量
if(data_receive == 'O') //如果接受的数据时'O'
{
SCI_send('Y'); //SCI 发送'Y'
PORTB=0x00; //LED点亮
}
if(data_receive == 'C') ////如果接受的数据时'C'
{
SCI_send('V'); //SCI 发送'V'
PORTB=0xff; //LED熄灭
flag=1;
}
delayms(2000);
}
}
|