打印
[ARM9、LPC]

哪位大神能帮我写个定时、计数程序啊?万分感谢。

[复制链接]
1588|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yct360|  楼主 | 2013-8-16 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学了两个月,觉得还没入门,买了个ARM-830实验箱,CPU是S3C2410,想通过定时计数器记录方波到达的时刻,上升沿触发或下降沿触发,一个方波(实验箱有脉冲发生器)到达时记录其达到时刻(放在一个数组里),计数器加一。再设计一个串口程序接到pc机上(超级终端接受数据)。指导指导也行,在此先谢过了。

相关帖子

沙发
阿南| | 2013-8-17 14:38 | 只看该作者
楼主分步去做这个实验:
1。先能够编译运行程序
2。再做计数器实验
3。再做串口实验
4。都成功后再把他们综合起来

使用特权

评论回复
板凳
yct360|  楼主 | 2013-8-17 19:12 | 只看该作者
谢谢了,有什么不懂的希望能指导指导。

使用特权

评论回复
地板
杨爱林林| | 2013-8-19 08:14 | 只看该作者
一步一个脚印 加油

使用特权

评论回复
5
airwill| | 2013-8-19 09:39 | 只看该作者
网上的例程和实验那么多, 先不要自己动手写程序, 最好拿试验程序来练习和修改, 顺便也学习一下代码书写规范.

使用特权

评论回复
6
yct360|  楼主 | 2013-8-19 16:17 | 只看该作者
airwill 发表于 2013-8-19 09:39
网上的例程和实验那么多, 先不要自己动手写程序, 最好拿试验程序来练习和修改, 顺便也学习一下代码书写规范 ...

好的,谢谢

使用特权

评论回复
7
yct360|  楼主 | 2013-8-19 16:18 | 只看该作者
杨爱林林 发表于 2013-8-19 08:14
一步一个脚印 加油

恩,难也要走出来,呵呵

使用特权

评论回复
8
yct360|  楼主 | 2013-8-19 18:19 | 只看该作者
airwill 发表于 2013-8-19 09:39
网上的例程和实验那么多, 先不要自己动手写程序, 最好拿试验程序来练习和修改, 顺便也学习一下代码书写规范 ...

大哥能帮我看看下面的程序吗?有些东西理解不了,我都在后面做了自己的理解,帮我看看哪些理解是错的。
还有就是能不能给我详解一下定时器的原理啊(s3c2410),我看过但是觉得很模糊,谢谢了。


void Timer1_init(void)
{
    rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000; //配置GPG口8,9位为信号输出
    rGPGDAT = rGPGDAT | 0x300;                   //0x56000077,这是什么功能?存储数据?

    rTCFG0  = 255;      // Prescaler0=255(预定标器的值是255?)
    rTCFG1  = 0 << 4;   // 选择PWM定时器1的MUX输入 0000=1/2?就是分割器=2?
    rTCNTB1 = 488;    // 在pclk=50MHZ下,1秒钟的记数值rTCNTB1 = 50000000 / 4 / 256 = 48828;计数器初值是488?
    rTCMPB1 = 0x00;   //比较器初值是0?
    rTCON   = (1 << 11) | (1 << 9) | (0 << 8); //禁用定时器1,手动加载(这应该是自动加载啊,11为为1,自动加载)
    rTCON   = (1 << 11) | (0 << 9) | (1 << 8); //启动定时器1,自动装载
     
}

/*
*************************************************************************************************************
- 函数名称 : void __irq Timer1_ISR ( void )
- 函数说明 : 定时器中断服务子程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/       
int flag;
void __irq Timer1_ISR( void )
{
        if (flag == 0)         //标志位=0,重复下面循环体
        {
        rGPGDAT = rGPGDAT & 0xeff | 0x200;//第8位为低电平,9位为高电平
                flag = 1;
        }
        else
        {
            rGPGDAT = rGPGDAT & 0xdff | 0x100;//第8位为高电平,9位为低电平
                flag = 0;
        }
           rSRCPND |= BIT_TIMER1;//TIMER1请求中断?
           rINTPND |= BIT_TIMER1;//TIMER1请求中断,TIMER1正在诶服务
}
/*
*************************************************************************************************************
- 函数名称 : void Timer1INT_Init(void)
- 函数说明 : 定时器中断初始化程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/       
void Timer1INT_Init(void)                                                 //定时器接口使能
{
     if ((rINTPND & BIT_TIMER1))                //TIMER1不请求中断服务,挂起状态?
    {
            rSRCPND |= BIT_TIMER1;                  //TIMER1请求中断?
    }
    pISR_TIMER1 = (int)Timer1_ISR;              //中断服务子程序的存放地址
    rINTMSK  &= ~(BIT_TIMER1);                  //开TIMER1中断;   
}

使用特权

评论回复
9
yct360|  楼主 | 2013-8-23 21:49 | 只看该作者
怎么没人回啊?50分呢。呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

39

帖子

0

粉丝