完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 183283726 于 2012-9-25 10:17 编辑
// 使用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_iTMR0和g_TMR0_low合成一个二十四位整型数 // 这句话又怎么理解呢? iPeriod=((unsigned long)g_iTMR0<<8)+g_TMR0_low; //此语句怎么理解啊,是怎么换算的请帮忙分析讲解? iPeriod=iPeriod/1000; //除以1000后单位就是毫秒了,我们假设其值会小于等于9999 for(i=0;i<10;i++) { DisplayData(iPeriod); //主循环就负责显示 } } }
|
|
相关推荐
9个回答
|
|
|
|
|
|
1、更正一下<<8相当于乘以256
2、((unsigned long)g_iTMR0<<8)+g_TMR0_low <<8给g_TMR0_low留出位置, 将_TMR0_low 加到g_iTMR0的低位 |
|
|
|
|
|
|
|
赞同解释。
|
|
|
|
((unsigned long)g_iTMR0<<8)+g_TMR0_low
((unsigned long)g_iTMR0<<8)这一句是强制转换g_iTMR0为长形变量并把它移动到高位字节,加上后面的低位组成16位数据变量赋值给前面的变量 |
|
|
|
|
|
|
|
学习一下C语言的基础知道吧
|
|
|
|
C语言我学习了一部分,我知道那里是左移了8位的意思,但是不明白他使用这句话的意思g_iTMR0和g_TMR0_low合成一个二十四位整型数,为什么要这样使用的目的是什么。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12032 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 10:46 , Processed in 2.340705 second(s), Total 90, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号