|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
誰幫我看看我的串口為啥不能發(fā)送呀?謝謝拉@!!! |
| 作者:qixiboy 欄目:單片機 |
我的程序是這樣地:單片機是AT89S52 uchar msg[10]={1,2,3,4,5,6,7,8,9,0}; uchar t_buf[40]; uchar *inlast_t = t_buf; //最后放進發(fā)送緩沖區(qū)的 uchar *outlast_t = t_buf; //最后從發(fā)送緩沖區(qū)出去的 bit t_empty,t_full; //緩沖區(qū)的狀態(tài)標志位 bit t_finish; //接收完標志和發(fā)送完 void loadmsg(uchar *msg) { while((*msg!=0)&&(!t_full)) //發(fā)送緩沖區(qū)不滿 { *inlast_t = *msg; msg++; inlast_t++; t_empty = 0; if(inlast_t >= (t_buf+40)) inlast_t = t_buf; //地址到頂部回到底部 if(inlast_t == outlast_t) t_full = 1; } if(t_finish) { TI = 1; t_finish = 0; } } void serail(void) interrupt 4 using 1 { if(TI) { TI = 0; if(!t_empty) { SBUF = *outlast_t; outlast_t++; t_full = 0; if(outlast_t >= (t_buf + 40)) outlast_t = t_buf; // 地址到頂部回到底部4 if(outlast_t == inlast_t) t_empty = 1; } else t_finish = 1; } } main() { t_finish = 1; TMOD = 0x21; //timer0 mode 1,timer1 mode 2 TH0 = -(4608/256); TL0 = -(4608%256); //10ms初值 TH1 = 0xfd; //9600 baud rate IE = 0x92; //開中斷 SCON = 0x50; //serail mode 1 TR0 = 1; TR1 = 1; while(1) { loadmsg(&msg); } } 和電腦串口相連時,PC只能收到一次0x01 0x02 0x003 0x04 0x00以后就什么都沒有了 * - 本貼最后修改時間:2006-7-6 12:19:58 修改者:qixiboy |
| 2樓: | >>參與討論 |
| 作者: xwj 于 2006/7/6 12:07:00 發(fā)布:
當然沒有了 你的程序執(zhí)行完 loadmsg(&msg); 還能執(zhí)行什么指令啊? 如要循環(huán)發(fā)送,應該把loadmsg(&msg);這句改為 while(1) { t_finish = 1; loadmsg(&msg); while(!t_finish) //沒發(fā)完一直等待 {}; } 自己仔細想想吧 |
|
| 3樓: | >>參與討論 |
| 作者: qixiboy 于 2006/7/6 12:23:00 發(fā)布:
先謝謝你能有耐心看完我的程序 先謝謝你能有耐心看完我的程序,我燒到片里的程序是: while(1) { loadmsg(&msg); } 剛才是我一時疏刪多了,因為我把其他和發(fā)送無關的函數(shù)刪去了 * - 本貼最后修改時間:2006-7-6 12:30:29 修改者:qixiboy |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |