51单片机串口调试程序C语言

发布者:chinapxf最新更新时间:2015-03-13 来源: dqjsw关键字:51单片机  串口调试  C语言 手机看文章 扫描二维码
随时随地手机看文章
/*定义为中断方式串口处理*/
#define INTERSENDSTR
/*不为8032系列芯片 */ 
//#define CHIP_8032 

#include
#include
#include
#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 {
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
关键字:51单片机  串口调试  C语言 引用地址:51单片机串口调试程序C语言

上一篇:51单片机最小系统的制作
下一篇:51单片机选择模拟(AD)量输入接口

推荐阅读最新更新时间:2024-03-16 13:54

51单片机蜂鸣器演奏《我和我的祖国》
由于同学的需要,于是用51单片机的蜂鸣器功能谱了一首《我和我的祖国》,下面是全部的代码: #include reg52.h sbit beep = P1^5; unsigned char timer0H, timer0L, time; //单片机晶振采用11.0592MHz // 频率-半周期数据表 高八位 本软件共保存了四个八度的28个频率数据 code unsigned char FREQH = { 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//
[单片机]
<font color='red'>51单片机</font>蜂鸣器演奏《我和我的祖国》
51单片机串口配置
1.配置串口工作模式为模式1。即设置SCON寄存器(SM0,SM1,REN位),SCON |= 0X50;(SM0 = 0,SM1 = 1,REN =1). SM0 = 0,SM1 = 0 方式0:同步移位串行方式:波特率= SYSclk / 12. SM0 = 0,SM1 = 1 方式1:8位UART,波特率可变: 波特率 = (2^SMOD / 32) * (定时器1的溢出率) SM0 = 1,SM1 = 0 方式2:9位UART: 波特率 = (2^SMOD / 64) * (SYSclk系统工作时钟频率) SM0 = 1,SM1 = 1 方式3: 8位UART,波特率可变: 波特率 = (2^SMOD /
[单片机]
51单片机教程ADC0809模数转换
//MCU:AT89S51 //晶振:12M //采用查询方式读AD转换后的值 #include reg52.h #include math.h #include intrins.h unsigned char code numcode ={ 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0xC1,0XB7,0xFF };//数字0~9及 U= 共阳数码管代码 unsigned char code dot_numcode ={0X40,0X79,0X24,0X30,0X19, 0X12,0X02,0X78,0X00,0X10 };//带数点的0~9共阳
[单片机]
PIC单片机CCS之C语言(#TYPE的用法)
#TYPE 语法: #type standard-type=size #type default=area standard-type是short,int,long或用户定义尺寸中的之一; size是1,8,16或32; area是#TYPE使用typemod命令定义的存储区. 目的:编译器默认将short看作1位, 将int看作8位, 将long看作16位.传统的C习惯为目标处理器而将INT定义成更高效率的尺寸.在PIC中,INT是8位.为了有助于代码兼容,#type命令允许改变这些关键字. #TYPE能重新定义这些关键字. 注意:逗号是可选项.当然#TYPE可能使一些尺寸得不到4种关键字的描绘(如上面的1位整型),下
[单片机]
89C51单片机按键控制数码管动态显示0~9
1.preteus仿真图 2.keli代码 #include reg51.h sbit key1=P3^0; int CC_num ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay_ms(int ms) { int i,j; for(i=0;i ms;i++) for(j=0;j 110;j++); } void key1_exam() { if(key1 == 0) { //按钮延时去抖动 delay_ms(20); if(key1 =
[单片机]
89C<font color='red'>51单片机</font>按键控制数码管动态显示0~9
51单片机对SAA7113初始化和控制的程序
  用51单片机对7113初始化和控制   SAA7113的初始化就是对寄存器配置合适的参数,使其能够有符合要求的输出。寄存器配置通过I2C总线来进行,很多可以控制I2C总线的器件都可以作为主器件对7113进行初始化,这里介绍用51单片机初始化7113的例子。   51单片机和7113的硬件连接非常简单,只要把单片机的两个I/O口(如P1.0、P1.0)直接和7113的SCL、SDA管脚相连,再加上上拉电阻即可。   用单片机初始化7113的主要任务是程序的编写,首先要熟悉I2C总线协议,根据I2C总线的原理写出启动、停止、应答信号等的子程序,由子程序再写出发送、接收1个字节的程序,然后根据7113的寄存器操作格式写出读写寄
[单片机]
MCS51单片机的排序程序(ASM源代码)
MCS51单片机的排序程序(ASM源代码) ;内部RAM数据排序程序(升序) ;入口 :R0(起始地址),N(数据个数) ;占用资源:ACC,B,R5,R6,R7 ;堆栈需求:2字节 ;出口 :R0 ISELSORT :MOV R7,N DEC R7 ISST1 :MOV A,R7 MOV R6,A MOV A,R0 MOV R1,A MOV R2,A MOV B,@R1 ISST2 :INC R1 MOV A,@R1 CLR C SUBB A,B JC ISST3 MOV A,R
[单片机]
51单片机“积木式”实验板的制作
这套实验板每块板上的元件数不多,采用万能板和敷铜板丙种方法制作均可,上图中的实物就是用l5xLOCm万能板制作的。主控板的制作要注意的是PO口的引出端,从主控板原理下图可以看到,PO口引出端接线柱的排列方向和51 芯片 的PO口引脚的排列方向正好相反,所以要接跳线,别的三个 端口 的对外接线柱排列方向和51芯片的端口引脚方向一致。这样安排主要是保证不管主板怎样摆放,板上边两个端口各自的8个接线柱排列从左到右分别按PX.7、PX.6、...、PX.1、PX.0(X为0、1、2、3)的顺序,这样容易记忆,特别是外接数码管驱动时尤为方便。 另外要注意各元件的安装高度,保证40脚锁紧式插座装上芯片后,锁紧柄按下不被板上所装的元件挡住。
[单片机]
<font color='red'>51单片机</font>“积木式”实验板的制作
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved