| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 998 人关注过本帖, 1 人收藏
标题:“共享”一个串口小程序
只看楼主 加入收藏
软编小虫
Rank: 5Rank: 5
来 自:广西,南宁,马山
等 级:职业侠客
威 望:1
帖 子:160
专家分:324
注 册:2008-10-8
结帖率:100%
收藏(1)
 问题点数:0 回复次数:1 
“共享”一个串口小程序
自已死背,记不住,不如泡论坛跟大伙谈谈,倒好记些。。。。
功能:一个C51串口自传功能(就是通过串口自已发送然后又通过串口自已接收了)
    P0口采集数据,P2口显示P0口所采集到的数据,
    为了达到自传目地,把串口的RI与TI短接。
   
1:首先要用UART(串口)的M1(模式1)进行数据传输,所以SCON寄存器的第8与7位必须设定为0与1;
   而进行接收数据时SCON的REN,必须设为1,才会启动接收送功能。
   所以SCON的值应为:SCON=0X50     (它的二进制值为:01010000  与如下相对应)
           。。。B7。。。B6。。。B5。。。B4。。。B3。。。B2。。。B1。。。B0。。。
           。。SM0。。。SM1。。。SM2。。REN。。。TB8。。RB8。。。TI。。。RI。。。
           。。。0。。。。1。。。0。。。1。。。。。0。。。0。。。。0。。。0。。。

因为要用到M1模式,我们就用TIMER1的中断作为传输波特率,为此,必须设定PCON(电源寄存器)的SMOD 位,(它的作用是改变比特率的倍增)如设定它为0,比特率就为TIMER1的中断值。
     先设定一个位变量(PCON的SMOD位) :  sbit SMOD=0X87^7      (PCON的SMOD位地址)
    然后进行赋值                 SMOD=0;

2:就是接收与发送数据了
    发送数据很简单,就直接把P0口的状态反映到SBUF寄存器中便可:SBUF=P0;
    赋完值后,系统就自动的帮你把数据发送出去。
    然后便是接收数据,对于C51的数据接收也很简单。要注意的是要还没接收数据前应把RI设为0 ,这个一定要注意!!!!!因为系统并不会自动帮你设定这个数值,但在接收过程中,我们必须用IF(RI==0)做为数据是否已完整的接收!就是说,当一个8位数据接收完毕时,系统就会把RI设为1,我们只需用一个IF(RI==0);进行判断就可知接收的完整性。

整个过程的代码:
    #include "reg51.h"       头文件声明
    sbit  smod=0x81^7;        定义SMOD 为PCON的第七位
    main()            
    {
        P2=oxff;            规范化P2为输入端口
        TMOD=0X20;            设定比特率时钟为TIMER1
        SMOD=0;                设定比特率为正常模式
        TH1=0XFD;            设定计数器的高位值
        TR1=1;                启动TIMER1
        SCON=0X50;            设定SCON的值,具体作用如上所说
        while(1)
        {
            SBUF=P0;            接收P0端口的状态值
            while(RI==0);        判断是否完整接收
            RI=0;                复位RI值
            P2=SBUF;             把所接收到的数值反映到P2端口上
            TI=0;                把接收寄存位复0;

           }
}
        
   
搜索更多相关主题的帖子: 口小 
2010-10-11 22:15
humin_qin
Rank: 2
等 级:论坛游民
帖 子:22
专家分:37
注 册:2010-11-20
收藏
得分:0 
嗯受用了
2010-11-26 17:09
快速回复:“共享”一个串口小程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022325 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved