|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教串口通訊問題 |
| 作者:莊莊 欄目:單片機 |
本人編寫了一段單片機和計算機串口通訊程序,單獨這段程序調(diào)試正常,計算機接收數(shù)據(jù)正確,加上液晶顯示程序后,接收到的數(shù)據(jù)全都不正確,而且有時接收不到數(shù)據(jù)。請問這是為什么? 請高手指教,謝謝 |
| 2樓: | >>參與討論 |
| 作者: javie 于 2005/12/14 16:27:00 發(fā)布:
你確認? 是不是你的LCD顯示程序有問題呢? |
|
| 3樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/14 17:09:00 發(fā)布:
謝謝,液晶程序? 液晶程序在51上運行很正常,但是我換了MSC1210后就不行了,程序有時不執(zhí)行,有時執(zhí)行,不知道為什么,我查不出液晶程序有什么毛病,我現(xiàn)在用的就是MSC1210單片機,串口通訊正常,加上液晶后就不行,MSC1210單片機和51單片機我應(yīng)該注意什么? |
|
| 4樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/12/14 19:17:00 發(fā)布:
你顯示用到中斷了沒? ?? |
|
| 5樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/12/14 19:21:00 發(fā)布:
要是用到中斷就看看優(yōu)先級之類的 呵呵 |
|
| 6樓: | >>參與討論 |
| 作者: 夏蟲 于 2005/12/15 8:40:00 發(fā)布:
同意樓上說的 要是你的串口數(shù)據(jù)重要,你就把串口中斷的優(yōu)先級設(shè)為最高 |
|
| 7樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/15 10:21:00 發(fā)布:
謝謝大家,我的液晶程序沒有中斷 我觀察液晶顯示情況,好像是中斷沒有返回,或是一直在處理中斷,我該怎么做? |
|
| 8樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/15 11:44:00 發(fā)布:
大家?guī)蛶兔ρ?br> |
|
| 9樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/15 12:55:00 發(fā)布:
我的串口程序為: #include <\ti\reg1210.h> #include <string.h> #define INBUF_LEN 4 //數(shù)據(jù)長度 #pragma asm CSEG AT 0807EH DB 11111100b //HCR1 Enable external MEMORY DB 11111110b //HCR0 1K data FLASH #pragma endasm unsigned CHAR inbuf1[INBUF_LEN]; unsigned CHAR count3; bit read_flag=0; void init_serialcomm(void) { SCON0= 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON = 0x80; //SMOD=1; TH1 = 0xEC; //Baud:9600 fosc=11.0592MHZ IE = 0x90; //Enable Serial Interrupt TR1 = 1; //timer 1 run // TI=1; } //向串口發(fā)送一個字符 void send_CHAR_com(unsigned CHAR ch) { SBUF0=ch; while(TI==0); TI=0; } //向串口發(fā)送一個字符串,strlen為該字符串長度 void send_string_com(unsigned CHAR *str,unsigned int strlen) { unsigned int k=0; do { send_CHAR_com(*(str + k)); k++; } while(k < strlen); } //串口接收中斷函數(shù) void serial () interrupt 4 using 3 { EA=0; if(RI) { unsigned CHAR ch; RI = 0; ch=SBUF0; if(ch>127) { count3=0; inbuf1[count3]=ch; } else { count3++; inbuf1[count3]=ch; if(count3==(INBUF_LEN-1)) { read_flag=1; //如果串口接收的數(shù)據(jù)達到INBUF_LEN個,且校驗沒錯, //就置位取數(shù)標志 } } } EA=1; } main() { init_serialcomm(); //初始化串口 CKCON=0x17; while(1) { if(read_flag) //如果取數(shù)標志已置位,就將讀到的數(shù)從串口發(fā)出 { read_flag=0; //取數(shù)標志清0 send_string_com(inbuf1,INBUF_LEN); } } } |
|
| 10樓: | >>參與討論 |
| 作者: yjs1314 于 2005/12/15 12:57:00 發(fā)布:
你試試看在串口中斷中屏蔽其他的中斷 在主程序中只開放串口中斷! |
|
| 11樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/15 13:57:00 發(fā)布:
我在程序中寫了 IE = 0x90; 只開放串口中斷 但是還不行。 |
|
| 12樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/15 16:36:00 發(fā)布:
自己頂 大家?guī)蛶兔ρ?br> |
|
| 13樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/12/15 20:04:00 發(fā)布:
你把串行中斷程序優(yōu)先級設(shè)置為高試一下 呵呵 原來我業(yè)碰到過單獨可以放在一塊就不行了,不過我那個不是顯示程序 請問你那顯示程序多大啊 我現(xiàn)在用的20K的程序存儲器也用到夜晶了 不知道空間夠不夠 |
|
| 14樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/16 8:39:00 發(fā)布:
優(yōu)先級設(shè)置過了,不行 液晶顯示程序和字庫大概10K,字庫自己定義,根據(jù)需要自己定義。 |
|
| 15樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/12/18 22:12:00 發(fā)布:
謝謝 10K是不是編譯后的啊? 中斷的問題俺也不知道,解決了沒? |
|
| 16樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/19 8:54:00 發(fā)布:
是編譯后的 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |