[問題] 求救 8051串列通訊
我是用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
→
07/19 11:25, , 1F
07/19 11:25, 1F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 5 篇):
問題
0
1