[問題] 求救 8051串列通訊

看板Electronics作者 (最近腰不痛的卡拉特)時間17年前 (2008/07/18 13:15), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/5 (看更多)
我是用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
先用示波器看EIA232上面跑的訊號是什麼
07/19 11:25, 1F
文章代碼(AID): #18W2RqFz (Electronics)
文章代碼(AID): #18W2RqFz (Electronics)