|
||||||
| | 首页 | 文章中心 | 下载中心 | 本站商品 | 学习资料 | | ||||||
| 广告载入中... | ||||||
| 您现在的位置: 电子爱好者 >> 文章中心 >> 单片机实战 >> 正文 |
|
|||||
| 51单片机串口调试程序(C语言) | |||||
| 作者:admin 文章来源:本站原创 点击数: 更新时间:2006-1-1 | |||||
| /*定义为中断方式串口处理*/ #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设置 9600就是 PSetBps(96)(11.0592Mhz) unsigned char PSetBps(unsigned int bps) SMALL { unsigned int t1; unsigned char t2; #ifdef INTERSENDSTR /*如果使用中断方式发送数据,必须等待发送数据完毕才能更换波特率 */ 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做波特率发生器 */ 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 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| |
| | 设为首页 | 站点地图|<产品开发服务|光盘刻录服务| 广告合作 | 访问记录 |汇款方法 | 关于VIP会员 | | |
![]() |
|