学单片机不容易呀,自己写的串口程序
时间:10-02
整理:3721RD
点击:
/*
主要功能
1 按键,串口发出字符串
2 通过调试助手给单片机发字符,单片机将每个字符处理后,返回给调试助手
*/
芯片: AT89C52给大家分享
/*
1?¢°′?ücj1£??μí3í¨1y′??ú·¢3?×?·?′??áμ÷ê??úê?
2?¢í¨1y232??μ¥???ú·¢?í×?·?′?£?μ¥???ú?-1y′|àí£¨?ó0x01£?oó£?·¢?í?áμ÷ê??úê?
3?¢2014-7-9íê3é
*/
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define water_h 1
#define water_l 0
#define buf_length 7
sbit cj1=P3^5;
sbit sp=P1^5;
sbit led1=P2^1;
uchar txd_buf[buf_length];
uchar rxd_buf[buf_length];
uchar flag_rxd;
uchar rx_num,tx_num;
uchar num_uart=0;
void delayms(uint);
void delayus(uint);
void txd();
void int_int();
void sendrxd();
void main()
{
int_int();
cj1=1;
while(1)
{
if(cj1==0)
{
delayms(500);
txd();
}
if(flag_rxd==1)
{
flag_rxd=0;
sendrxd();
}
}
}
void int_int(void)
{
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
REN=1;
}
void delayms(uint i)
{
uint x,y;
for(x=i;x>0;x--)
{
for(y=112;y>0;y--);
}
}
void delayus(uint i)
{
while(i--);
}
void txd()
{
uint num;
txd_buf[0]=0x7b;//?eê???
txd_buf[1]=0x00;//?¤á?
txd_buf[2]=0x01;//óD??
txd_buf[3]=0x00;//ID
txd_buf[4]=0x00;//ID
txd_buf[5]=0x00;//?¤á???
txd_buf[6]=0x7d;//???1??
SBUF=txd_buf[0];
ES=0; //·¢?íμ?ê±oò±?D??è1?±??D??£?·¢?ííê3éoó′ò?a?D??
for(num=0;num<buf_length;num++)
{
SBUF=txd_buf[num];
delayus(1);
while(!TI);
TI=0;
}
ES=1;
}
void uart() interrupt 4
{
// RI=0;
uchar temp;
if(RI) //?aê??óê?êy?Y
{
RI=0;
temp=SBUF;
if(temp==0x7b)
{
rxd_buf[0]=temp;
}
else
{
rx_num++;
rxd_buf[rx_num]=temp;
// rx_num++;
if(rx_num>=6&&temp==0x7d)
{
rx_num=0;
flag_rxd=1;
return;
}
}
}
/*
if(TI)
{
TI=0;
tx_num++;
ES=0;
SBUF=txd_buf[tx_num];
ES=1;
if(tx_num>7&&SBUF==0x7d)
{
tx_num=0;
}
}
*/
}
void sendrxd()
{
uint num;
/*
for(num=0;num<buf_length;num++)
{
txd_buf[num]=0x00;
}
*/
txd_buf[0]=rxd_buf[0]+0x01;
txd_buf[1]=rxd_buf[1]+0x01;
txd_buf[2]=rxd_buf[2]+0x01;
txd_buf[3]=rxd_buf[3]+0x01;
txd_buf[4]=rxd_buf[4]+0x01;
txd_buf[5]=rxd_buf[5]+0x01;
txd_buf[6]=rxd_buf[6]+0x01;
ES=0; //·¢?íμ?ê±oò±?D??è1?±??D??£?·¢?ííê3éoó′ò?a?D??
for(num=0;num<buf_length;num++)
{
SBUF=txd_buf[num];
delayus(1);
while(!TI);
TI=0;
}
ES=1;
}
主要功能
1 按键,串口发出字符串
2 通过调试助手给单片机发字符,单片机将每个字符处理后,返回给调试助手
*/
芯片: AT89C52给大家分享
/*
1?¢°′?ücj1£??μí3í¨1y′??ú·¢3?×?·?′??áμ÷ê??úê?
2?¢í¨1y232??μ¥???ú·¢?í×?·?′?£?μ¥???ú?-1y′|àí£¨?ó0x01£?oó£?·¢?í?áμ÷ê??úê?
3?¢2014-7-9íê3é
*/
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define water_h 1
#define water_l 0
#define buf_length 7
sbit cj1=P3^5;
sbit sp=P1^5;
sbit led1=P2^1;
uchar txd_buf[buf_length];
uchar rxd_buf[buf_length];
uchar flag_rxd;
uchar rx_num,tx_num;
uchar num_uart=0;
void delayms(uint);
void delayus(uint);
void txd();
void int_int();
void sendrxd();
void main()
{
int_int();
cj1=1;
while(1)
{
if(cj1==0)
{
delayms(500);
txd();
}
if(flag_rxd==1)
{
flag_rxd=0;
sendrxd();
}
}
}
void int_int(void)
{
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
REN=1;
}
void delayms(uint i)
{
uint x,y;
for(x=i;x>0;x--)
{
for(y=112;y>0;y--);
}
}
void delayus(uint i)
{
while(i--);
}
void txd()
{
uint num;
txd_buf[0]=0x7b;//?eê???
txd_buf[1]=0x00;//?¤á?
txd_buf[2]=0x01;//óD??
txd_buf[3]=0x00;//ID
txd_buf[4]=0x00;//ID
txd_buf[5]=0x00;//?¤á???
txd_buf[6]=0x7d;//???1??
SBUF=txd_buf[0];
ES=0; //·¢?íμ?ê±oò±?D??è1?±??D??£?·¢?ííê3éoó′ò?a?D??
for(num=0;num<buf_length;num++)
{
SBUF=txd_buf[num];
delayus(1);
while(!TI);
TI=0;
}
ES=1;
}
void uart() interrupt 4
{
// RI=0;
uchar temp;
if(RI) //?aê??óê?êy?Y
{
RI=0;
temp=SBUF;
if(temp==0x7b)
{
rxd_buf[0]=temp;
}
else
{
rx_num++;
rxd_buf[rx_num]=temp;
// rx_num++;
if(rx_num>=6&&temp==0x7d)
{
rx_num=0;
flag_rxd=1;
return;
}
}
}
/*
if(TI)
{
TI=0;
tx_num++;
ES=0;
SBUF=txd_buf[tx_num];
ES=1;
if(tx_num>7&&SBUF==0x7d)
{
tx_num=0;
}
}
*/
}
void sendrxd()
{
uint num;
/*
for(num=0;num<buf_length;num++)
{
txd_buf[num]=0x00;
}
*/
txd_buf[0]=rxd_buf[0]+0x01;
txd_buf[1]=rxd_buf[1]+0x01;
txd_buf[2]=rxd_buf[2]+0x01;
txd_buf[3]=rxd_buf[3]+0x01;
txd_buf[4]=rxd_buf[4]+0x01;
txd_buf[5]=rxd_buf[5]+0x01;
txd_buf[6]=rxd_buf[6]+0x01;
ES=0; //·¢?íμ?ê±oò±?D??è1?±??D??£?·¢?ííê3éoó′ò?a?D??
for(num=0;num<buf_length;num++)
{
SBUF=txd_buf[num];
delayus(1);
while(!TI);
TI=0;
}
ES=1;
}
顶一个