3025|4

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

帮忙举个例子 单片机串口通信控制的 [复制链接]

我发串数据 侦头  数据   奇偶校验    贞尾                然后判断这串数据控制    P2^4;输出0     要怎么写   


举个例子程序

最新回复

建议下次有这种帖子,不要回复。这其实是害了lz!  详情 回复 发表于 2009-12-18 14:24
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不明白你想要说什么.........
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
串口程序网上还是比较多的,建议楼主先找找吧
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

4
 
给你个串口的程序 做参考

/************************************************************
* 程序功能:
* 硬件说明: AT89S51
*           P0              七段数码管段选择接口
*           P2              七段数码管位选择接口
*           p3               按键
*1  按键接到 P3 口。用一条 8PIN 数据排线,把按键部份的 JP48,接到 CPU 部份的 P3 口 JP53.
*2  接 8 位数码管的数据线。将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51.
*3  接 8 位数码管的显示位线。将数码管部份的显示位口 JP8 接到 CPU 部份的 P2 口        
************************************************************/
#include
#include
#include
/************************************************************
* 宏定义                                                                                                       
************************************************************/
//端口连接定义
#define LEDCS         P2_6     //选中第七个数码管
#define LEDCSPort P2     //七段数码管位选择接口
#define DispPort P0      //七段数码管段选择接口

//地址定义
//#define COM8155 (*((volatile unsigned char *) 0x00))//命令口地址,CS接地
#define COM8155        XBYTE[0x00]        //命令口地址,CS接地
#define PA8155        XBYTE[0x01]        //PA口地址
#define PB8155        XBYTE[0x02]        //PB口地址
#define PC8155        XBYTE[0x03]        //PC口地址

//命令字定义
#define PAIO    1<<0    //1=输出,0=输入
#define PBIO    1<<1    //1=输出,0=输入
#define PCIO    3<<2    //0=ALT1
                        //1=ALT3
                        //2=ALT4
                        //3=ALT2

//初始化命令字定义
#define IODIR                PAIO|PBIO|PCIO        //PA、PB、PC口为输出

/************************************************************
* 变量初始化                                                                                               
************************************************************/
unsigned char temp,RsvData;
unsigned char i;
bit flag = 1;
unsigned char TabNum[] = {0x28,0x7E,0xa2,0x62,0x74,
                         0x61,0x21,0x7A,0x20,0x60};
unsigned char *Table;
unsigned char Table0[] = {0x0d,0x0a,0x0d,0x0a,0x0d,0x0a,0x0d,0x0a};
unsigned char *Table1 = "命令口地址,CS接地";
unsigned char *Table2 = "PA口地址";
unsigned char *Table3 = "PC口地址";
unsigned char *Table4 = "如果我还有一天寿命,那天我要做你女友。我还有一天的命吗?..没有。所以,很可惜。我今生仍然不是你的女友。如果我有翅膀,我要从天堂飞下来看你。我有翅膀吗?..没有。所以,很遗憾。我从此无法再看到你。";

/************************************************************
* 函数功能:延时k ms函数                                                                               
* 入口参数:k(1-128)                                                                                       
* 出口参数:无       
* 作    者:                                                                                               
//**********************************************************/
void Delaykms(unsigned char k)

{
          unsigned char n,s;
          for(n=2*k;n>0;n--)
                  for(s=248;s>0;s--);
}

void main(void)
{
    TMOD = 0x22;    //设置串口工作方式
    SCON = 0x40;
    TH1 = 0xf3;     //设置速率4800(12M晶体)
    PCON = 0x80;
    TR1 = 1;
    REN = 1;         //允许接收
    LEDCS = 0;       //开数码管
    while(1)
    {
        if(!P3_2)
        {Delaykms(100);if(!P3_2){Delaykms(100);
            Table = Table1;
            flag = 1;}
        }
        if(!P3_3)
        {Delaykms(100);if(!P3_3){Delaykms(100);
            Table = Table2;
            flag = 1;}
        }
        if(!P3_4)
        {Delaykms(100);if(!P3_4){Delaykms(100);
            Table = Table3;
            flag = 1;}
        }
        if(!P3_5)
        {Delaykms(100);if(!P3_5){Delaykms(100);
            Table = Table4;
            flag = 1;}
        }
        while(flag)
        {   
            
            if(*Table)
            {
                SBUF = *Table;
                while(!TI);
                TI = 0;
                Table++;
            }
            else
            {
                for(i=8;i>0;i--)
                {
                    SBUF = Table0;
                    while(!TI);
                    TI = 0;
                }
                flag = 0;
                break;
            }
        }
        if(!RI);
        else
        {
            RI = 0;
            RsvData = SBUF;
            switch (RsvData)
            {
                case 0x30:
                    DispPort = TabNum[0];break;
                case 0x31:
                    DispPort = TabNum[1];break;
                case 0x32:
                    DispPort = TabNum[2];break;
                case 0x33:
                    DispPort = TabNum[3];break;
                case 0x34:
                    DispPort = TabNum[4];break;
                case 0x35:
                    DispPort = TabNum[5];break;
                case 0x36:
                    DispPort = TabNum[6];break;
                case 0x37:
                    DispPort = TabNum[7];break;
                case 0x38:
                    DispPort = TabNum[8];break;
                case 0x39:
                    DispPort = TabNum[9];break;
                default:
                    break;     
            }
        }
    }
}




 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 cfanlwn 的回复:
给你个串口的程序 做参考

/************************************************************
* 程序功能:
* 硬件说明: AT89S51
*? ? ? ? ? P0? ? ? ? ? ? ? 七段数码管段选择接口
*? ? ? ? ? P2? ? ? ? ? ? ? 七段数码管位选择接口
*? ? ? ? ? p3? ? ? ? ? ? ? 按键
*1? 按键接到 P3 口。用一条 8PIN 数据排线,把按键部份的 JP48,接到 CPU 部份的 P3 口 JP53.
*2? 接 8 位数码管的数据线。将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51.
*3? 接 8 位数码管的显示位线。将数码管部份的显示位口 JP8 接到 CPU 部份的 P2 口
************************************************************/
#include
#include
#include
/************************************************************
* 宏定义
************************************************************/
//端口连接定义
#define LEDCS P2_6? ? //选中第七个数码管
#define LEDCSPort P2? ? //七段数码管位选择接口
#define DispPort P0? ? ? //七段数码管段选择接口

//地址定义
//#define COM8155 (*((volatile unsigned char *) 0x00))//命令口地址,CS接地
#define COM8155 XBYTE[0x00] //命令口地址,CS接地
#define PA8155 XBYTE[0x01] //PA口地址
#define PB8155 XBYTE[0x02] //PB口地址
#define PC8155 XBYTE[0x03] //PC口地址

//命令字定义
#define PAIO? ? 1 < <0? ? //1=输出,0=输入
#define PBIO? ? 1 < <1? ? //1=输出,0=输入
#define PCIO? ? 3 < <2? ? //0=ALT1
//1=ALT3
? ? ? ? //2=ALT4
? ? ? ? ? ? ? ? //3=ALT2

//初始化命令字定义
#define IODIR PAIO|PBIO|PCIO //PA、PB、PC口为输出

/************************************************************
* 变量初始化
************************************************************/
unsigned char temp,RsvData;
unsigned char i;
bit flag = 1;
unsigned char TabNum[] = {0x28,0x7E,0xa2,0x62,0x74,
? ? ? ? ? ? ? ? ? ? ? ? 0x61,0x21,0x7A,0x20,0x60};
unsigned char *Table;
unsigned char Table0[] = {0x0d,0x0a,0x0d,0x0a,0x0d,0x0a,0x0d,0x0a};
unsigned char *Table1 = "命令口地址,CS接地";
unsigned char *Table2 = "PA口地址";
unsigned char *Table3 = "PC口地址";
unsigned char *Table4 = "如果我还有一天寿命,那天我要做你女友。我还有一天的命吗?..没有。所以,很可惜。我今生仍然不是你的女友。如果我有翅膀,我要从天堂飞下来看你。我有翅膀吗?..没有。所以,很遗憾。我从此无法再看到你。";

/************************************************************
* 函数功能:延时k ms函数
* 入口参数:k(1-128)
* 出口参数:无
* 作? ? 者:
//**********************************************************/
void Delaykms(unsigned char k)

{
? unsigned char n,s;
? for(n=2*k;n>0;n--)
? for(s=248;s>0;s--);
}

void main(void)
{
? ? TMOD = 0x22;? ? //设置串口工作方式
? ? SCON = 0x40;
? ? TH1 = 0xf3;? ? //设置速率4800(12M晶体)
? ? PCON = 0x80;
? ? TR1 = 1;
? ? REN = 1;? ? ? ? //允许接收
? ? LEDCS = 0;? ? ? //开数码管
? ? while(1)
? ? {
? ? ? ? if(!P3_2)
? ? ? ? {Delaykms(100);if(!P3_2){Delaykms(100);
? ? ? ? ? ? Table = Table1;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? if(!P3_3)
? ? ? ? {Delaykms(100);if(!P3_3){Delaykms(100);
? ? ? ? ? ? Table = Table2;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? if(!P3_4)
? ? ? ? {Delaykms(100);if(!P3_4){Delaykms(100);
? ? ? ? ? ? Table = Table3;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? if(!P3_5)
? ? ? ? {Delaykms(100);if(!P3_5){Delaykms(100);
? ? ? ? ? ? Table = Table4;
? ? ? ? ? ? flag = 1;}
? ? ? ? }
? ? ? ? while(flag)
? ? ? ? {?
? ? ? ? ? ?
? ? ? ? ? ? if(*Table)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? SBUF = *Table;
? ? ? ? ? ? ? ? while(!TI);
? ? ? ? ? ? ? ? TI = 0;
? ? ? ? ? ? ? ? Table++;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for(i=8;i>0;i--)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? SBUF = Table0;
? ? ? ? ? ? ? ? ? ? while(!TI);
? ? ? ? ? ? ? ? ? ? TI = 0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? flag = 0;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if(!RI);
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? RI = 0;
? ? ? ? ? ? RsvData = SBUF;
? ? ? ? ? ? switch (RsvData)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? case 0x30:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[0];break;
? ? ? ? ? ? ? ? case 0x31:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[1];break;
? ? ? ? ? ? ? ? case 0x32:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[2];break;
? ? ? ? ? ? ? ? case 0x33:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[3];break;
? ? ? ? ? ? ? ? case 0x34:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[4];break;
? ? ? ? ? ? ? ? case 0x35:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[5];break;
? ? ? ? ? ? ? ? case 0x36:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[6];break;
? ? ? ? ? ? ? ? case 0x37:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[7];break;
? ? ? ? ? ? ? ? case 0x38:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[8];break;
? ? ? ? ? ? ? ? case 0x39:
? ? ? ? ? ? ? ? ? ? DispPort = TabNum[9];break;
? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? break;? ?
? ? ? ? ? ? }
? ? ? ? }
? ? }
}





建议下次有这种帖子,不要回复。这其实是害了lz!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表