搜索
bottom↓
回复: 7

用定时中断方法 IO模拟Uart定时中断的溢出设定值如何计...

[复制链接]

出0入0汤圆

发表于 2015-7-27 21:12:43 | 显示全部楼层 |阅读模式
用定时中断方法  IO模拟Uart定时中断的溢出设定值如何计算?测试代码如下:

void debug_mode()
{
/*输出脉冲信号,使用示波器测量一下脉冲频率   9600的波特率  1位起始位  8位数据位  1位停止位  比特率96000  正弦波频率除以2 48000*/
/*一秒钟要发送9600X10个位,一个位占用的时间 1/96000约等于10us 用示波器观察*/
/*
if (SimUart1_TxPortPin)
        {
                SimUart1_TxPortPin=0;
        }
        else
        {
                SimUart1_TxPortPin=1;
        }
        */
       
        /*模拟发送一个一个字符*/
        if (tx_flag==TRUE)
        {
//        if (tx_count==0) set_tx_pin_high();

       
        if (tx_count==1)  set_tx_pin_low();//起始位
       
        if (tx_count==2)  set_tx_pin_low();//数据第一位
        if (tx_count==3) set_tx_pin_low();//数据第二位
        if (tx_count==4) set_tx_pin_low();//数据第三位
        if (tx_count==5) set_tx_pin_low();//数据第四位
        if (tx_count==6) set_tx_pin_low();//数据第五位
        if (tx_count==7) set_tx_pin_low();//数据第六位
        if (tx_count==8) set_tx_pin_low();//数据第七位
        if (tx_count==9) set_tx_pin_high();//数据第八位
       
        if (tx_count==10) set_tx_pin_high();//停止位


        tx_count++;
        if (tx_count>10)
        {
        tx_count=0;
        tx_flag=FALSE;
}       
        }
}


晶振:18.432MHZ

void timer_set(unsigned long sysclk,unsigned long bt)
{
        //定时器2作为串口0的波特率发生器
        TR2=0;                              // 关闭定时器Timer1
        ET2=0;                              // 关闭定时器Timer1中断
        PT2=0;                              // 关闭定时器Timer1中断优先权


        CKCON=SetBit_(CKCON,5);                      /*定时器2用系统时钟作为它的时基 Bit5: T2M: Timer 2 Clock Select*/

        /*TMOD: 定时器工作再模式1, 16位重载  Bit0: CP/RL2: Capture/Reload Select.  */
        T2CON=ClrBit_(T2CON,0);
        RCLK0=0;
        TCLK0=0;
        /*定时器模式  Bit1: C/T2: Counter/Timer Select*/
        T2CON=ClrBit_(T2CON,1);

        //重载值计算     1843200/96000
RCAP2H  = 255-(((sysclk/bt/10)&0xFF00)>>8);     /*设置定时3用作波特率的重载值  */
        RCAP2L=255-((sysclk/bt/10)&0xFF);
       
        //RCAP2H  =0x0;
        //RCAP2L=0x10;


        /*打开定时器2的定时中断,以便定时中断程序能正常运行  Bit5: ET2: Enabler Timer 2 Interrupt.*/
        ET2=1;

        TR2    = 1;                                /*开定时器2  .*/
}

用上面的代码计算出来的定时器溢出设定值,波特率不是9600,我用串口调试软件测试出来,波特率大约是29800。
哪位大牛介绍一下计算方法?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2015-7-27 21:31:34 | 显示全部楼层
1/9600=104.167Us,也就是一个数据位完为104.167Us.
这个时间也就是你的定时器中断周期(如果你是每进中断发送一位数据的话).

出0入0汤圆

 楼主| 发表于 2015-7-27 21:56:07 | 显示全部楼层
liufabing 发表于 2015-7-27 21:31
1/9600=104.167Us,也就是一个数据位完为104.167Us.
这个时间也就是你的定时器中断周期(如果你是每进中断发 ...

如果用18.432MHZ的晶体,定时器溢出寄存器的每一格时间长度是1/18432000秒吗?

出0入0汤圆

发表于 2015-7-27 22:02:23 | 显示全部楼层
我不清楚你用的什么芯片,看你的时钟来源吧,18.432MHZ的晶振,定时器的时钟不一定就是18.432MHZ,可能更低(有分频等).

出0入0汤圆

 楼主| 发表于 2015-7-27 22:02:23 | 显示全部楼层
liufabing 发表于 2015-7-27 21:31
1/9600=104.167Us,也就是一个数据位完为104.167Us.
这个时间也就是你的定时器中断周期(如果你是每进中断发 ...

9600是比特率吗?
我查了一下资料,9600好像是符号率。9600  n  8 1格式的数据,总共应该是10个位,如果是每秒发送9600个字符,就要发送96000个bit数据。一个bit占用的时间应该是1/96000=10.4us左右。

出0入0汤圆

 楼主| 发表于 2015-7-27 22:03:37 | 显示全部楼层
liufabing 发表于 2015-7-27 22:02
我不清楚你用的什么芯片,看你的时钟来源吧,18.432MHZ的晶振,定时器的时钟不一定就是18.432MHZ,可能更低(有 ...

可以选12分频和直接用时钟,我选的的是直接用时钟。

出0入0汤圆

发表于 2015-7-27 22:24:52 | 显示全部楼层
波特率:即调制速率,指的是信息被调制后单位时间传波的波特数,也就是单位时间  
内波形的震荡数,如果调制后的波形的周期为T,那么波特率B=1/T  
比特率:位率、码率、数字信号传输的单位,表示单位时间内传输的二进制代码的位数  
(bit) 其单位是bit/s(bps :bit per second)  
波特率和比特率 我还真搞不清楚区别,这是搜索来的.
http://bbs.21ic.com/icview-41930-1-1.html(这里也有说明)

在这你就用比特率算.
1/18432000=0.054253472222222222222222222222222Us
18432000/9600=1920(0x780)

出0入0汤圆

 楼主| 发表于 2015-7-27 22:36:01 来自手机 | 显示全部楼层
我试一下.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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