合泰单片机做电压表_IO口模拟串口问题 合泰HT66F70A

/*---------------------------------------------------------------------*/

/* --- STC MCU Limited ------------------------------------------------*/

/* --- STC15Fxx 系列 软件模拟串口举例----------------------------------*/

/* --- Mobile: (86)13922805190 ----------------------------------------*/

/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/

/* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/

/* --- Web: www.STCMCU.com --------------------------------------------*/

/* --- Web: www.GXWMCU.com --------------------------------------------*/

/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */

/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序        */

/*---------------------------------------------------------------------*/

//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译

//若无特别说明,工作频率一般为11.0592MHz

#include "reg51.h"

//-----------------------------------------

//define baudrate const

//BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)

//NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)

//#define BAUD  0xF400                  // 1200bps [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz

//#define BAUD  0xFA00                  // 2400bps [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz

//#define BAUD  0xFD00                  // 4800bps @ 11.0592MHz

//#define BAUD  0xFE80                  // 9600bps @ 11.0592MHz

//#define BAUD  0xFF40                  //19200bps @ 11.0592MHz

#define BAUD  0xFFA0                    //38400bps @ 11.0592MHz

//#define BAUD  0xEC00                  // 1200bps @ 18.432MHz

//#define BAUD  0xF600                  // 2400bps @ 18.432MHz

//#define BAUD  0xFB00                  // 4800bps @ 18.432MHz

//#define BAUD  0xFD80                  // 9600bps @ 18.432MHz

//#define BAUD  0xFEC0                  //19200bps @ 18.432MHz

//#define BAUD    0xFF60                //38400bps @ 18.432MHz

//#define BAUD  0xE800                  // 1200bps @ 22.1184MHz

//#define BAUD  0xF400                  // 2400bps @ 22.1184MHz

//#define BAUD  0xFA00                  // 4800bps @ 22.1184MHz

//#define BAUD  0xFD00                  // 9600bps @ 22.1184MHz

//#define BAUD  0xFE80                  //19200bps @ 22.1184MHz

//#define BAUD  0xFF40                  //38400bps @ 22.1184MHz

//#define BAUD  0xFF80                  //57600bps @ 22.1184MHz

sfr AUXR = 0x8E;

sbit RXB = P3^0;                        //define UART TX/RX port

sbit TXB = P3^1;

typedef bit BOOL;

typedef unsigned char BYTE;

typedef unsigned int WORD;

BYTE TBUF,RBUF;

BYTE TDAT,RDAT;

BYTE TCNT,RCNT;

BYTE TBIT,RBIT;

BOOL TING,RING;

BOOL TEND,REND;

void UART_INIT();

BYTE t, r;

BYTE buf[16];

void main()

{

TMOD = 0x00;                        //timer0 in 16-bit auto reload mode

AUXR = 0x80;                        //timer0 working at 1T mode

TL0 = BAUD;

TH0 = BAUD>>8;                      //initial timer0 and set reload value

TR0 = 1;                            //tiemr0 start running

ET0 = 1;                            //enable timer0 interrupt

PT0 = 1;                            //improve timer0 interrupt priority

EA = 1;                             //open global interrupt switch

UART_INIT();

while (1)

{                                   //user's function

if (REND)

{

REND = 0;

buf[r++ & 0x0f] = RBUF;

}

if (TEND)

{

if (t != r)

{

TEND = 0;

TBUF = buf[t++ & 0x0f];

TING = 1;

}

}

}

}

//-----------------------------------------

//Timer interrupt routine for UART

void tm0() interrupt 1 using 1

{

if (RING)

{

if (--RCNT == 0)

{

RCNT = 3;                   //reset send baudrate counter

if (--RBIT == 0)

{

RBUF = RDAT;            //save the data to RBUF

RING = 0;               //stop receive

REND = 1;               //set receive completed flag

}

else

{

RDAT >>= 1;

if (RXB) RDAT |= 0x80;  //shift RX data to RX buffer

}

}

}

else if (!RXB)

{

RING = 1;                       //set start receive flag

RCNT = 4;                       //initial receive baudrate counter

RBIT = 9;                       //initial receive bit number (8 data bits + 1 stop bit)

}

if (--TCNT == 0)

{

TCNT = 3;                       //reset send baudrate counter

if (TING)                       //judge whether sending

{

if (TBIT == 0)

{

TXB = 0;                //send start bit

TDAT = TBUF;            //load data from TBUF to TDAT

TBIT = 9;               //initial send bit number (8 data bits + 1 stop bit)

}

else

{

TDAT >>= 1;             //shift data to CY

if (--TBIT == 0)

{

TXB = 1;

TING = 0;           //stop send

TEND = 1;           //set send completed flag

}

else

{

TXB = CY;           //write CY to TX port

}

}

}

}

}

//-----------------------------------------

//initial UART module variable

void UART_INIT()

{

TING = 0;

RING = 0;

TEND = 1;

REND = 0;

TCNT = 0;

RCNT = 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值