找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1239|回复: 0
打印 上一主题 下一主题
收起左侧

单片机与pc通讯源码

[复制链接]
跳转到指定楼层
楼主
ID:292466 发表于 2018-3-15 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REG52.H>    /* special function register declarations */
#include <stdio.h>    /* prototype declarations for I/O functions */
#include <intrins.h>
#include <Absacc.h>
#include <string.h>
#include <ctype.h>

#define byte unsigned char
#define uchar unsigned char
#define word unsigned int
#define uint unsigned int
#define ulong unsigned long
#define BYTE         unsigned char
#define WORD         unsigned int

#define TRUE  1
#define FALSE 0

void time(unsigned int ucMs);//延时单位:ms
void initUart(void);/*初始化串口波特率,使用定时器2*/
void sendString(uchar *ucString); //往串口发字符串

/******** main 函数 *********/
void main (void) {

        time(1);/* 延时等待外围器件完成复位 */
        initUart();/* 初始化串口 */
        IE=0x90; /* 打开串口中断 */               
        while(TRUE){}
}
/********** 初始化串口波特率 ************/
void initUart(void)/*初始化串口波特率,使用定时器2*/
{
/* Setup the serial port for 9600 baud at 11.0592MHz */
        SCON = 0x50;  //串口工作在方式1
        RCAP2H=(65536-(3456/96))>>8;
        RCAP2L=(65536-(3456/96))%256;
          T2CON=0x34;   
}

/***********  串行口中断服务程序***************/
void serial0_int(void) interrupt 4
{
uchar rChar;
uchar code str1[]="What do you plan to do this Friday?";//收到0x01时的返回
uchar code str2[]="I plan to go to the concert.";//收到0x02时的返回
uchar code str3[]="What are you doing next week?";//收到0x03时的返回
uchar code str4[]="I'm thinking of going to my grandma's.";//收到0x04时的返回
uchar code strdefault[]="Please select a character '1','2','3' or '4'!";//收到其它时的返回

    EA=0;/* 关总中断 */
        RI=0;/* 请标志 */
        rChar=SBUF;/* 读串口缓冲区,得到PC发来的数据 */
        P2=rChar; /* 送P2口显示 */

        switch(rChar) {
                case '1': //收到字符'1'
                            SBUF='1';while(TI==0){}TI=0;//发送字符'1'
                                SBUF=':';while(TI==0){}TI=0;//发送字符':'
                                sendString(str1);//发送字符串str1
                            break;
                case '2': //收到字符'2'
                            SBUF='2';while(TI==0){}TI=0;//发送字符'2'
                                SBUF=':';while(TI==0){}TI=0;//发送字符':'
                                sendString(str2);//发送字符串str2
                            break;
                case '3': //收到字符'3'
                            SBUF='3';while(TI==0){}TI=0;//发送字符'3'
                                SBUF=':';while(TI==0){}TI=0;//发送字符':'
                                sendString(str3);//发送字符串str3
                            break;
                case '4': //收到字符'4'
                            SBUF='4';while(TI==0){}TI=0;//发送字符'4'
                                SBUF=':';while(TI==0){}TI=0;//发送字符':'
                                sendString(str4);//发送字符串str4
                            break;
                default:  //收到其它字符
                            SBUF='d';while(TI==0){}TI=0;//发送字符'd'
                                SBUF=':';while(TI==0){}TI=0;//发送字符':'
                                sendString(strdefault);//发送字符串strdefault
                            break;
        }
        EA=1;/* 开总中断 */       
}

void sendString(uchar *ucString) //往串口发字符串
{
uchar i,stringLength=strlen(ucString);
        REN=0;//设置发送状态
        for(i=0;i<stringLength;i++){
                SBUF=ucString[i];while(TI==0);TI=0;//发送字符
        }
        SBUF=0x0d;while(TI==0);TI=0;//发送回车
        SBUF=0x0a;while(TI==0);TI=0;//发送换行
        SBUF=0x0a;while(TI==0);TI=0;//发送换行
        REN=1;//设置接收状态
}

void delay_5us(void)//延时5us,晶振改变时只用改变这一个函数!
{
        _nop_();
        _nop_();
        //_nop_();
        //_nop_();
}
/************ delay_50us ***************/
void delay_50us(void)//延时50us
{
        unsigned char i;
        for(i=0;i<4;i++)
        {
                delay_5us();
        }
}
/******** 延时100us ******************/
void delay_100us(void)//延时100us
{
        delay_50us();
        delay_50us();
}

/*********** 延时单位:ms *******************/
void time(unsigned int ucMs)//延时单位:ms
{
        unsigned char j;       
        while(ucMs>0){
                for(j=0;j<10;j++) delay_100us();
                ucMs--;
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表