合泰单片机做电压表

阅读: 评论:0

合泰单片机做电压表

合泰单片机做电压表

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

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

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

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

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

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

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

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

/* 如果要在程序中使用此代码,请在程序中注明使用了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;

}

本文发布于:2024-02-02 13:13:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170685078644034.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:电压表   单片机
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23