|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
[建議]51單片機(jī)串口調(diào)試程序一列(不錯)很實(shí)用 |
| 作者:liuli9230 欄目:單片機(jī) |
#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) 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; } 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 } 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 |
| 2樓: | >>參與討論 |
| 作者: liuli9230 于 2007/5/15 12:31:20 發(fā)布:
大家都來看看,,有什么不對的地方,請多我提出來 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |