|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
問(wèn)個(gè)C51串口程序問(wèn)題,多謝看貼 |
| 作者:keven9527 欄目:單片機(jī) |
C程序如下: 問(wèn)題1;編譯后仿真沒(méi)有問(wèn)題,可以看到P1口有變化。但uvision2下編譯出來(lái)只有487字節(jié)的hex代碼,燒到89C2051放到板子上面沒(méi)有任何作用,板子硬件沒(méi)有問(wèn)題。為何? 問(wèn)題2:?jiǎn)尾秸{(diào)試的時(shí)候,在串口中斷程序中的讀取SBUF存到c里面(unsigned CHAR 型),為什么c的值一直都是0? #include <REG51.H> #include <stdio.h> sbit p1_2=P1^2; sbit p1_3=P1^3; sbit p1_4=P1^4; sbit p1_5=P1^5; sbit p1_6=P1^6; void init_serialcom(void); void delay_1s(void); void serial () interrupt 4 using 0 { if (RI) { unsigned CHAR c,ch; ch=SBUF; c=ch; RI = 0; SBUF=ch; while(TI==0); TI=0; if (c!=0) { p1_3=0; c--; delay_1s(); p1_3=1; delay_1s(); } } } void main (void) { P1=0x00; delay_1s(); P1=0xff; delay_1s(); P1=0x00; delay_1s(); P1=0xff; delay_1s(); init_serialcom(); for(;;) { p1_2=1; delay_1s(); p1_2=0; delay_1s(); } } void init_serialcom(void) { SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x00; //SMOD=0; TH1 = 0xFD; //Baud:9600 fosc=11.0592MHZ IE |= 0x90; //Enable Serial Interrupt TR1 = 1; // timer 1 run TI=1; } void delay_1s(void) { unsigned CHAR i,j,k; for(k=100;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); } |
| 2樓: | >>參與討論 |
| 作者: wj8389 于 2005/6/12 23:04:00 發(fā)布:
希望一起交流 我現(xiàn)在也正在做串行口這方面的東西!我用的是485通信協(xié)議! 關(guān)于你的問(wèn)題,我認(rèn)為可能出現(xiàn)在硬件上,如果仿真器里面的數(shù)據(jù)狀態(tài)能夠顯示出正確的接收數(shù)據(jù),那么燒好的片子不工作,你就得檢查是不是,上電復(fù)位電路和振蕩電路的問(wèn)題了。仿真時(shí)你可能沒(méi)有用用戶板上的電源和晶振。再就是保證每一個(gè)元器件都是好的。程序我沒(méi)有看,不知道有無(wú)問(wèn)題,不好意思! 有共同的話題,希望一起交流! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |