打印

请高人讲解内容红色部分(C语言程序设计

[复制链接]
1550|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
songzhijing|  楼主 | 2012-9-25 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
// 使用TMR0测量按键脉冲宽度。  晶体使用4M
#include "pic.h"
#include "myfuncs.h"
#include "seg74.h"
#define
K1
RB0 //
K1宏定义为替代RB0,这样阅读程序更容易


__CONFIG(HS & WDTDIS & LVPDIS);
//
设置用于ICD2调试的控制字

unsigned int g_iTMR0;
//
此整型变量用来扩展TMR0的计数范围

unsigned char g_TMR0_low=0;// 用来保存TMR0定时值

void interrupt ISR(void)
{

if( T0IE && T0IF) // TMR0
溢出


{


T0IF=0; //
清空标志位,使CPU能正确响应下次中断


g_iTMR0++;


}

}

void main(void)
{

unsigned long iPeriod=0; //
周期变量


unsigned char i=0;


T0CS=0; //
选择CLKOUT信号为时钟源


PSA=1; // Timer0
不占用预分频器


GIE=0;
//
总中断关闭

   

SEG_BITSEL_PORT_DIR=0x00;
//
位选端口方向寄存器置为输出


SEG_FONT_PORT_DIR=0x00;
//
字形端口方向寄存器置为输出


while(1)


{


//
初始状态显示四个0


SEG_BITSEL_PORT = 0x0F;
//
四个位都点亮


SEG_FONT_PORT = 0b11000000; //
显示0的字形码


while(K1)


{ // K1
未按则什么也不做,循环等待直到用户按下K1


}


//
运行到这里说明K1==0,K1按下了,那么就启动定时器开始定时


TMR0=0; // Timer0
计数值寄存器清零              


g_iTMR0=0;
//TMR0
扩充变量清零


T0IF=0; // Timer0
中断标志位清空  


T0IE=1; // Timer0
中断使能位置位,允许Timer0中断


GIE=1;
//
总中断打开

   

while(K1==0)


{
//K1=0
说明按钮还在按下状态,循环等待直到用户松开K1


}


g_TMR0_low=TMR0;
//
立即保存当前TMR0值,因为TMR0会自动变化


//
g_iTMR0g_TMR0_low合成一个二十四位整型数

//
这句话又怎么理解呢?
iPeriod=((unsigned long)g_iTMR0<<8)+g_TMR0_low; //此语句怎么理解啊,是怎么换算的请帮忙分析讲解?


iPeriod=iPeriod/1000; //
除以1000后单位就是毫秒了,我们假设其值会小于等于9999


for(i=0;i<10;i++)


{



DisplayData(iPeriod);
//
主循环就负责显示




}



}

}
沙发
谈的元| | 2012-9-25 10:41 | 只看该作者
iPeriod=((unsigned long)g_iTMR0<<8)+g_TMR0_low;
假设 g_iTMR0= 0x55 ,g_TMR0_low=0x66;unsigned long为3字节。

(unsigned long)g_iTMR0<<8是左移动8位,就变成0X005500;
unsigned long)g_iTMR0<<8)+g_TMR0_low  变成0X005566;

这个好理解吧

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
songzhijing + 1 很给力!
板凳
songzhijing|  楼主 | 2012-9-25 14:08 | 只看该作者
呵呵,你的意思是先把g_iTMR0的值算出来,在左移8位,然后g_iTMR0在+g_TMR0_low 是吧,这样我就比较清楚了,别人告诉我的是把g_iTMR0的低两位腾出来给g_TMR0_lo没说明清楚所以看不懂,现在你讲清楚了我就懂了

使用特权

评论回复
地板
兰天白云| | 2012-9-25 14:41 | 只看该作者
"把g_iTMR0的低两位腾出来给g_TMR0_lo"这个说法相当通俗,但很难懂,如果对非专业人员讲则正好合适

使用特权

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

本版积分规则

1

主题

9

帖子

0

粉丝