|
|||||||||||
| 技術(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 |
51單片機串口調(diào)試程序一列 |
| 作者:scb521 欄目:單片機 |
#define INTERSENDSTR /*不為8032系列芯片 */ //#define CHIP_8032 #include <absacc.h> #include <reg51.h> #include <string.h> #include "err.h" #ifdef INTERSENDSTR unsigned CHAR xdata sSendComBuf[256],sRecComBuf[256]; unsigned CHAR data bOut,bIn,bSout,bSin; #else #define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0; #endif //bps設(shè)置 9600就是 PSetBps(96)(11.0592MHZ) |
| 2樓: | >>參與討論 |
| 作者: scb521 于 2006/10/24 10:41:13 發(fā)布:
unsigned CHAR PSetBps(unsigned int bps) SMALL { unsigned int t1; unsigned CHAR t2; #ifdef INTERSENDSTR /*如果使用中斷方式發(fā)送數(shù)據(jù),必須等待發(fā)送數(shù)據(jù)完畢才能更換波特率 */ while(bSin!=bSout) { ; } ES=0; #endif #ifdef CHIP_8032 if(3456%bps) { return ERR_SET_BPS; } t1=3456/bps; t1--;t1=~t1; RCAP2H=t1/256;RCAP2L=t1; T2MOD=0x00; /*使用定時器2做波特率發(fā)生器 */ T2CON=0x34;/*TF2=0;EXF2=0;RCLK=1;TCLK=1;EXEN2=0;TR2=1;C/T2=0;CP/RL2=0 */ #else t1=576/bps; if((576%bps)||((t1==0))||(t1>=2*256)) { return ERR_SET_BPS; } if(t1>256) { PCON=00; t2=256-(288/bps); } else { PCON=0x80; t2=256-t1; } TH1=t2;TL1=t2; TR1=1; #endif /*模式3*/ SM0=0; RI=0;TI=0; REN=1; SM1=1; SM2=1; #ifdef INTERSENDSTR bOut=bIn; bSout=bSin; ES=1; #endif return OK; } |
|
| 3樓: | >>參與討論 |
| 作者: scb521 于 2006/10/24 10:42:15 發(fā)布:
void PSendChar(unsigned CHAR ch) SMALL { #ifdef INTERSENDSTR unsigned CHAR tch; tch=bSin+1; while(tch==bSout) { ; } sSendComBuf[bSin]=ch; ES=0; if((bSout==bSin)) { SBUF=sSendComBuf[bSin]; bSin++; } else { bSin++; } ES=1; #else ACC=ch; DEFSENDCHAR; #endif } unsigned CHAR PGetChar() SMALL { unsigned CHAR ch; #ifdef INTERSENDSTR ch=sRecComBuf[bOut]; bOut++; return ch; #else ch=SBUF; RI=0; #endif } bit PCharInCom() SMALL { #ifdef INTERSENDSTR if(bIn!=bOut) { return 1; } return 0; #else return RI; #endif } |
|
| 4樓: | >>參與討論 |
| 作者: scb521 于 2006/10/24 10:43:04 發(fā)布:
void PSendString(unsigned CHAR *st) SMALL { while(*st) { PSendChar(*st); st++; } } void PSendArray(unsigned CHAR *st,unsigned int len) SMALL { unsigned int ii; for(ii=0;ii<len;ii++) { PSendChar(st[ii]); } } #ifdef INTERSENDSTR void PSerialInt() interrupt 4 { if(RI) { sRecComBuf[bIn]=SBUF; bIn++; RI=0; } if(TI) { TI=0; if(bSout!=bSin) { bSout++; } if(bSout!=bSin) { SBUF=sSendComBuf[bSout]; } } } #endif |
|
| 5樓: | >>參與討論 |
| 作者: wangyanshuai 于 2006/10/27 16:58:13 發(fā)布:
收藏了 |
|
| 6樓: | >>參與討論 |
| 作者: huxiaoqi 于 2006/12/1 12:24:08 發(fā)布:
能加點詳細(xì)的說明那就更好了 |
|
| 7樓: | >>參與討論 |
| 作者: AVR_AFA 于 2006/12/1 13:29:39 發(fā)布:
代碼怪長的是應(yīng)該多加些注釋。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |