首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机之串口通讯

2013-09-25 
单片机之串口通信#include reg52.h#include string.hunsigned char idata RevBuffer[30]bit CmdValid

单片机之串口通信

#include "reg52.h"#include <string.h>unsigned char idata RevBuffer[30];bit CmdValid;   void iccardcode(){       unsigned char cmd; cmd = RevBuffer[0];//获取命令switch(cmd) {case 1:        //判断命令P1=0XFB;break;case 2:        //判断命令         P1=0XF7; break;case 3:        //判断命令P1=0XF0;break;}}///////////////////////////////////////////////////////////////////////系统初始化/////////////////////////////////////////////////////////////////////void InitializeSystem(){    P0 = 0xFF; P1 = 0x7F; P3 = 0xFF;    PCON = 0x80;       //设置波特率加倍    此时波特率为19200bps              SCON = 0x70;                     TMOD = 0x20;       //定时器1作为波特率发生器;TH1   = 0xfd;  // 11.0592M晶振 在波特率不加倍情况:9600pbs//            波特率 加 倍情况:19200bpsTL1   = TH1;TR1   = 1;        // 启动定时器T1   即波特率发生器  EA=1;  //开总中断 ES = 1;      //开串口中断CmdValid=0;   //设置接收消息标记}///////////////////////////////////////////////////////////////////////用T2做延时子程序////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 接收和发送中断///////////////////////////////////////////////////////////////////////void isr_UART(void) interrupt 4 using 1{    unsigned char len, i;  unsigned int j=0;    /********************************************* //把接收到的第一个字符作为数 据 的 长度len, // //在短时间内再连续发送len个字节赋给RevBuffer // //加入最后i的值等于len的值,说明接收数据正确 // **********************************************/if(RI){len=SBUF;                RI=0;for(i=0;i<len;i++){while(!RI){j++;if(j>1000){    break;}}if(j<1000){RevBuffer[i]=SBUF;RI=0;j=0;}else{    break;}}if(i==len){CmdValid=1;P1=0X00;}}}  void main( ){         InitializeSystem( );    while (1)    {     if (CmdValid)    {    CmdValid = 0;    if(RevBuffer[0]==0x11)    //判断命令    {      P1=0XFE;    }    else if(RevBuffer[0]==0x13) //判断命令    {          P1=0XFD;    }       else    {            iccardcode();      }     } }}

?

热点排行