STC89C52单片机——串口发送程序1

来源:互联网 发布:知乎更新图标 编辑:程序博客网 时间:2024/05/18 19:20
 /*-----------------------------------------------  名称:串口通信  编写:LZM  日期:2015.05  修改:无  内容:连接好串口波特率设置为9600,无奇偶校验        晶振11.0592MHz接上串口,可以接收到自己发送的字符------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        /*******************************************************************请提前计算一下所选晶振能达到的最高速度,波特率不能超过最高速度(1) 波特率加倍(SMOD=1):  Max_Baud = FOSC/12/16(2) 波特率不加倍(SMOD=0):Max_Baud = FOSC/12/32例如:22.1184MHz晶振,波特率加倍时,最大波特率=22118400/12/16=115200*******************************************************************/#define FOSC11059200//振荡频率#define BAUD9600//波特率#define SMOD1//是否波特率加倍#if SMOD#define TC_VAL(256-FOSC/16/12/BAUD)#else#define TC_VAL(256-FOSC/32/12/BAUD)#endiftypedef unsigned char uint8;typedef unsigned int uint16;code const char str1[] = "The string is 来自单片机!\r\n";code const char str2[] = "Author: louis \r\n";//const  限定一个变量不允许被改变。在一定程度上提高程序安全性和可靠性//code 存储区间为 程序存储区/***************函数声明*******************/void InitUART(void);void SendOneByte(uint8);void SendrStr(const uint8 *ptr);/****************主函数********************/void main(void){    uint8 i=0;    InitUART();    while(str2[i]!='\0')    {SendOneByte(str2[i++]);    }    SendrStr(str1);    while(1);}/****************中断服务函数***************/void UART_ISR(void) interrupt 4{    uint8 RX_Data;    //只响应"接收"中断,"发送"中断来了就直接抹掉    if(RI)   {     RI = 0;//串口中断标志不能自己清除,需要手动清除     RX_Data=SBUF;     SendOneByte(RX_Data);   }   else     TI = 0;//串口发中断是发送完缓冲区数据之后产生}/****************串口初始化函数*************/void InitUART(void){    TMOD = 0x20;    //定时器1,模式2工作模式       SCON = 0x50;    //串口工作模式1,允许REN   /* SCON: 模式 1,  8-bit UART, 使能接收         */    TH1 = TC_VAL;    TL1 = TH1;    PCON = 0x80; //发送速率加倍    ES = 1;    EA = 1;    TR1 = 1;}/**************串口发送字符函数*************/void SendOneByte(uint8 c){    ES = 0;//禁止中断,让串口安心工作啊    SBUF = c;    while(!TI);//等待发送完毕    TI = 0;//清TI中断    ES = 1;//打开中断}/**************串口发送字符串函数*************/void SendrStr(const uint8 *ptr){    do    {SendOneByte(*ptr);//其实发送字符串也是在调用发送字符的函数~~    }while(*ptr++!='\0');//要有结束判断,否则串口发送 字符串 不知道什么时候停止}

0 0
原创粉丝点击