智能车制作
标题:
求助:串口出现乱码
[打印本页]
作者:
lhqc212
时间:
2009-9-17 14:39
标题:
求助:串口出现乱码
#include <hidef.h> /* common defines and macros */
#include <mc9s12xdg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xdg128"
#include "main.h"
复制代码
void SCI0_Init(void) {
byte iSend;
SCI0BD = (BUS_fr/16/9600);
SCI0CR2 = 0x0C;
SCI0CR2_RIE = 1;
fram_num = 0;
fram_start = 0;
for(iSend=0;iSend<16;iSend++) {
SendBuffer[iSend]=0;
}
}
void SendData(unsigned char ucChar) {
while(!(SCI0SR1&0x80));
SCI0DRL=ucChar;
while(!(SCI0SR1&0x40));
}
unsigned char ReceData(void) {
unsigned char result,temp;
temp = SCI0SR1;
if((temp&0x20)>0)
result=SCI0DRL;
return result;
}
//**************************************************************//
//************************SendCommand***************************//
void SendCommand(void){
byte iSend,csSend = 0;
for(iSend=0;iSend<16;iSend++){
SendData(ReceBuffer[iSend]);
csSend += ReceBuffer[iSend];
ReceBuffer[iSend]=0;
}
SendData(csSend);
}
//**************************************************************//
//**************************string******************************//
void Start(void) {
word a=0;
while(start[a]==ReceBuffer[a]) a++;
if(ReceBuffer[8]==0x0d){
a = 0;
count = 0;
sec = 0;
min = 0;
CRGINT = 0x80;
}
}
void Stop(void) {
word b=0;
while(stop[b]==ReceBuffer[b])b++;
if(ReceBuffer[3]==0x73){
b = 0;
PORTA = 0xFF;
PORTE_PE2 = 0x1;
PORTE_PE3 = 0x1;
setPWM0(160,0);
setPWM1(160,0);
setPWM2(160,0);
CRGINT = 0x00;
}
}
void Standard(void) {
word c=0;
while(standard[c]==ReceBuffer[c])c++;
if(ReceBuffer[11]==0x0d){
c=0;
PTJ_PTJ7=~PTJ_PTJ7;
}
}
void Thinner(void) {
word m=0;
while(thinner[m]==ReceBuffer[m])m++;
if(ReceBuffer[14]==0x0d){
m = 0;
PTJ_PTJ6=~PTJ_PTJ6;
}
}
void Wash(void) {
word n=0;
while(wash[n]==ReceBuffer[n])n++;
if(ReceBuffer[3]==0x77){
n = 0;
PTJ=~PTJ;
}
}
//*************************SCI0_ISR*****************************//
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void SCI0_ISR(void) {
byte iRece,receData;
receData = SCI0SR1;
receData = SCI0DRL;
ReceBuffer[fram_num++] = receData;
if(fram_num == 1){
if(ReceBuffer[0] != 0x26) fram_num = 0;
}
else if(fram_num == 2){
if(ReceBuffer[1] != 0x30) fram_num = 0;
}
if(fram_num == 3){
if(ReceBuffer[2] != 0x31) fram_num = 0;
}
for(iRece = 3;iRece < 16;iRece++){
if(ReceBuffer[iRece] == 0x0d){
fram_num = 0;
Start();
Stop();
Standard();
Thinner();
Wash();
}
}
}
#pragma CODE_SEG DEFAULT
void main(void) {
/* put your own code here */
DisableInterrupts;
PLL_Init();
RTI_Init();
PWM_Init();
/*IOC0_Init();*/
PORT_Init();
SCI0_Init();
count=0x00;
min=0x00;
sec=0x00;
p = 255;
counter = 0;
PTT = 0x0;
DDRJ=0xff; /* PTB as output */
PTJ=0x00; /* LEDs off */
EnableInterrupts;
for(;;) {
ptControl();
vtControl();
SendCommand();
}/* wait forever */
/* please make sure that you never leave this function */
}
复制代码
这部分程序是要识别字符串然后动作控制输出脚,发送部分是把接收来的回发 就出现乱码,而且中间还包括正确的字符串,这样我要的动作可以实现但是有时会不受控制,不知道为什么会有乱码的?我的总线频率是40.96M的 波特率9600,大家帮帮忙给点意见吧~~~已苦恼好久
作者:
cys179
时间:
2009-9-20 13:17
你粘贴的这程序太长了,大家很难看懂的。串口你就看关键的波特率啊,还有初始化之类的对不对!
补充内容 (2015-4-23 09:23):
真人游戏|足球篮球|时时彩| 六合投注|
网络赚钱去SO娱乐城:顶级信用,提现百分百即时到账SO.CC
作者:
gxuyang
时间:
2009-9-20 22:54
说一点,不知道是不是,你自己检查一下
40.96M的频率不知道能不能调得到9600的波特率,如果调不到的话就可能会出现前面数据正确,后面的不对了
作者:
lhqc212
时间:
2009-9-23 16:53
那40.96M该调多少的波特率合适呢 我调过别的也不行
作者:
lhqc212
时间:
2009-9-23 16:53
那40.96M该调多少的波特率合适呢 我调过别的也不行
作者:
仁者
时间:
2010-2-5 12:47
程序一点注释都没有可不是什么好习惯,可读性太差
作者:
XGimi
时间:
2010-2-5 17:44
我的串口发数据时前8个是正确的,接着会有三个是错误的,然后后面的8个又是对的,这是为什么?
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2