Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1566170
  • 博文数量: 354
  • 博客积分: 8137
  • 博客等级: 中将
  • 技术积分: 5137
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-26 15:40
文章分类

全部博文(354)

文章存档

2010年(300)

2009年(54)

分类: 嵌入式

2010-09-15 13:40:20

/*************************************************
*功能描述: CEPARK CAN开发板-串口通讯
*说明:波特率设置9600,检验位N,数据位8,停止位1.
* 数据16进制发送,16进制显示。
* 如发送AD,在数码管上显示AD,串口工具接收到数据AD
*版本:v2.00
*声明:程序来自网络,欢迎网友交流改进
* 活跃论坛,共同进步
*作者:协成电子    、hnrain
*时间:2010/09/14
*邮箱:hnrain1004@gmail.com    ,HQL19982003@163.com ,qq:87675298
*网站:bbs.cepark.com ;写程序如果有问题,可以在这里讨论
*我们的口号:让不懂can的学习者,也能轻松玩转can

*推荐教材:
饶运涛,邹继军《现场总线 CAN 原理与应用技术》.北京:北京航空航天大学出版社 (这本书,看着不错)
周立功《增强型80c51单片机速成与实战》还有周立功写的一些can通信程序算法很不错,值得学习
本程序,融入了那么一点点点点点,他们的编程思想,哈哈....仅供学习用
****************************************************/

#include <reg52.h>
#include "config.h"

//数码管段码显示:0~f,不亮

uint8 code LED_Disp[] = {0xc0,0xde,0xa2,0x8a,0x9c,0x89,0x81,0xda,0x80,0x88,
                            0x90,0x85,0xe1,0x86,0xa1,0xb1,0xff};

sfr LedPort = 0x80;     //段选段P0

sfr LedCtrl = 0xa0;     //位选段P2

uint8 DisBuff[4]={0xc0,0xc0,0xc0,0xc0};
uint8 Txd_data;     //接收缓冲

bit Recdat;



void mDelay(uint16 mtime)
{
    for(; mtime > 0; mtime--)
    {
        uint8 j = 244;
        while(--j);
    }    
}


void Hex2Bcd()    //HEX转BCD程序

{                                            
    DisBuff[0]=    LED_Disp[Txd_data%16];
    DisBuff[1]=    LED_Disp[Txd_data/16];
    DisBuff[2]=0xff;
    DisBuff[3]=0xff;

}

void LED_Disp_Seg7(uint8 j)    //显示子程序

{     
    for(;j>0;j--)
    {
   LedCtrl = LedCtrl | 0xf0;

  
   LedPort = DisBuff[0];
   LedCtrl = LedCtrl & 0x7f;
   mDelay(5);
   LedCtrl = LedCtrl | 0xf0;

   LedPort = DisBuff[1];
   LedCtrl = LedCtrl & 0xbf;
   mDelay(5);
   LedCtrl = LedCtrl | 0xf0;
 
#if 0
   LedPort = DisBuff[2];
   LedCtrl = LedCtrl & 0xdf;
   mDelay(5);
   LedCtrl = LedCtrl | 0xf0;

   LedPort = DisBuff[3];
   LedCtrl = LedCtrl & 0xef;
   mDelay(5);
   LedCtrl = LedCtrl | 0xf0;
#endif

    }
}

void InitCom()         //初始化串口

{
    SCON=0x50;         //0101 0000B,工作方式1,8位UART,波特率可变,允许接收

    TMOD=0x20;         //T1工作于方式2

    TCON=0x40;         //定时器1开始计数

    TH1=250;         //T1计数初值

    TL1=250;
    PCON=0x80;         //SMOD置1,双倍速率

    RI=0;TI=0;
}


void ComINT() interrupt 4     //中断接收程序

{
    if(RI)             //判断是否接收完,接收完成后,由硬件置RI位

    {
    Txd_data=SBUF;     //读入缓冲区

    RI=0;             //清标志

    Recdat=1;        //有数据,建立标志

    }
}

void ComOut(uint8 dat)     //向串口发送数据

{
    SBUF=dat;             //发送数据送缓冲

    while(!TI);             //等待发送完成

    TI=0;
}

void main()
{
    mDelay(250);
    InitCom();
    EA=1;
    ES=1;
    while(1){
    if(Recdat)
    {
        Hex2Bcd();
        ComOut(Txd_data);
        Recdat=0;
    }
        LED_Disp_Seg7(10);    
    
    }

}


文件:4 串口通讯.zip
大小:20KB
下载:下载
CEPARK CAN总线开发板 程序更新20100914
阅读(1325) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~