作者karate362 (最近腰不痛的卡拉特)
看板Electronics
标题[问题] 求救 8051串列通讯
时间Fri Jul 18 13:15:30 2008
我是用8051接rs232
使用comdebug来收讯息
现在发生的状况是
电脑传讯息给8051是对的
但是8051回传却是错的
错的方式是 例如 我明明是让它回传1个byte 0xAC
comdebug显示却变成2个byte A0 00
我换过好几次8051 换过好几次面包板
MAX232从自己接的 换到别人接的...
全部都是一样的问题
更糟糕的是 一个月前我用同样的东西做
它是正常的...
所以问题在哪里 根本完全不知道...
在此附程式码如下 要注意的主要只有main()里的东西
其他部份是我用来送一个PWM wave的
恳求高人指点
因为这个问题我耗了几个星期却毫无进展
这样下去真的会很惨...
#include <REGX52.H>
#include <stdio.h>
#define XTAL 11059200
#define baudrate 9600
unsigned char i;
unsigned char mode;
unsigned char temp;
unsigned char PWMcount1;
unsigned char PWMcount2;
unsigned char PWMcount3;
unsigned char l1;
unsigned char l2;
unsigned char l3;
static void timer0_isr(void) interrupt TF0_VECTOR using 1//Timer中断 送PWM wave使用
{
TL0 = 0xF0;
TR0=0;
if(i>PWMcount1)
P1_0 = 1;
else
P1_0 = 0;
if(i>PWMcount2)
P1_1 = 1;
else
P1_1 = 0;
if(i>PWMcount3)
P1_2 = 1;
else
P1_2 = 0;
++i;
//P1 = l1|l2|l3;
TR0=1;
}
static void com_isr(void) interrupt SIO_VECTOR using 1
{
if(RI) {
temp=SBUF;
P2 = temp;
switch(mode) {
case 0x00 ://要知道调哪个输出
mode = temp;
RI=0;
break;
case 0x01 ://P1
PWMcount1 = temp;
mode = 0x00;
RI = 0;
break;
case 0x02 ://P2
PWMcount2 = temp;
mode = 0x00;
RI = 0;
break;
case 0x03 ://P3
PWMcount3 = temp;
mode = 0x00;
RI = 0;
break;
default:
mode = 0x00;
RI = 0;
break;
}
RI=0;
return;
}
if(TI)
TI = 0;//test
}
void com_init(void)
{
PWMcount1 = 0x00;
PWMcount2 = 0x00;
PWMcount3 = 0x00;
mode = 0x00;
PCON |= 0x80;
TMOD = 0x22;
TH1 = (unsigned char)(256 - (XTAL/(16L*12L*baudrate)));
SCON = 0x50;
ES = 1;
TR1 = 1;
ET0 = 1;
TL0 = 0;
TR0 = 1;
//PS=1;
EA=1;
}
void delay(void)
{
unsigned char i,j;
for(i=0;i<255;++i)
for(j=0;j<255;++j)
;
}
void main(void){
// unsigned char j = 0xFE;
com_init();
SBUF = 0xCC;//连线完成
while(1)
{
delay();
SBUF = 0xAC;//测试回传讯号
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.175.39
1F:→ narcissusli:先用示波器看EIA232上面跑的讯号是什麽 07/19 11:25