3609|7

13

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请达人帮忙解释一下程序。谢谢! [复制链接]

这是一个利用8253计数器测3各通道脉冲信号的计数率程序。请哪位高手帮忙解释一下那些没有标注的句子是什么意思。谢谢 特别是带“?”的句子。
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define COM8253 XBYTE[0X8003]
#define c1 XBYTE[0X8000]
#define c2 XBYTE[0X8001]
#define c3 XBYTE[0X8002]
#define SNUM 1
sbit GATE=P2^1;    //门控端
uchar t=20;
uchar sn=SNUM;  //  ?
uint idata BUF8253[3];  //计数率缓冲区
void time()      //定时器0函数
{
TMOD=0X01;  //定时器为方式1
TH0=(65536-5000)/256;//装入初值
TL0=(65536-5000)%256;
EA=1; ET0=1; TR0=1;     //启动定时器中断
GATE=1;    //开门控
}
void timef() interrupt 1   //定时器0中断服务程序
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
if((--t)==20)
{
  t=20;    //1s需20次中断
  sn--;   //秒减1
}
}
void cbfp(uchar xdata *po,char x)  //计数器取值函数,参数为地址和通道
{
uchar h,l;
l=*po;po++;po--;  //为什么用两个啊?什么意思啊?
h=*po;
BUF8253[x]=65536-(h*256+1);  //因8253位减计数,应取其补
}
void fcbf()   // 三个通道的取值函数
{
GATE=0;
COM8253=0x0a;  //?
COM8253=0x4a;   //?
COM8253=0x8a;   //?
COM8253=0x0a;   //?
cbfp(&c1,0);          //?
COM8253=0x4a;
cbfp(&c2,1);
COM8253=0x8a;
cbfp(&c3,2);
}
void init8253()  //初始化8253函数
{
COM8253=0x3a; //选方式5
c1=0;c1=0;  //为什么用两个啊?什么意思啊?
COM8253=0x7a; //?什么意思?
c2=0;c2=0;
COM8253=0xba;
c1=0;c1=0;
}

void main()
{
init8253();
time();  //取1s定时到
while(sn);  
fcbf();
}
此帖出自单片机论坛

最新回复

COM8253=0x0a; //? COM8253=0x4a; //? COM8253=0x8a; //? 关于这三个设定的解释:是将相应的三个计数器的值进行锁存(8253在读取计数器值的时候,要求先进行锁存) 8253的工作原理说明:http://www.docin.com/p-212964.html ======================================== cbfp(&c1,0); //? COM8253=0x4a; cbfp(&c2,1); COM8253=0x8a; cbfp(&c3,2) 这几句表示:选择相应的计数器,并读取它的值 ======================================== 软件与硬件息息相关!!!  详情 回复 发表于 2011-8-15 16:37
点赞 关注
 

回复
举报

1759

帖子

0

TA的资源

裸片初长成(高级)

沙发
 
你根据你自己的要求重新写一个吧,看别人的程序总会有点难以理解他当时的想法。有的是故意写成这样,有的是为了延时。
COM8253=0x0a;  //?
COM8253=0x4a;   //?
COM8253=0x8a;   //?
COM8253=0x0a;   //?
cbfp(&c1,0);          //?
这个应该是发脉冲的
c1=0;c1=0;  //为什么用两个啊?什么意思啊?
可能做延时,保证低电平的脉宽。
COM8253=0x7a; //?什么意思?
发控制命令。
此帖出自单片机论坛
 
个人签名南京璞晓电子   www.cpx0.com需要
msn:njlianjian@hotmail.com
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

板凳
 
原帖由 吾心自然 于 2010-2-5 08:46 发表
这是一个利用8253计数器测3各通道脉冲信号的计数率程序。请哪位高手帮忙解释一下那些没有标注的句子是什么意思。谢谢 特别是带“?”的句子。
#include
#include
#define uchar unsigned char
...


楼主头像
此帖出自单片机论坛
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

4
 
温总理还会开发单片机啊,厉害!
此帖出自单片机论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

5
 
有点拉大旗作虎皮的意思了 。知错就改还算好同志吧!:$     各位对我的程序有什么高见请多指教。
此帖出自单片机论坛
 
 
 

回复

720

帖子

0

TA的资源

纯净的硅(中级)

6
 

疑问

f((--t)==20)
{
  t=20;    //1s需20次中断
  sn--;   //秒减1
}
是不是应该是
f((t--)==0)
{
  t=20;    //1s需20次中断
  sn--;   //秒减1
}
后面应该是8253的内容吧,这个没用过……
此帖出自单片机论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

7
 
中断服务程序应是
f((t--)==0)
{
  t=20;    //1s需20次中断
  sn--;   //秒减1
}
8253读计数的语句不是很懂啊!?:(
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

8
 

8253回复

COM8253=0x0a; //?
COM8253=0x4a; //?
COM8253=0x8a; //?
关于这三个设定的解释:是将相应的三个计数器的值进行锁存(8253在读取计数器值的时候,要求先进行锁存)
8253的工作原理说明:http://www.docin.com/p-212964.html
========================================
cbfp(&c1,0); //?
COM8253=0x4a;
cbfp(&c2,1);
COM8253=0x8a;
cbfp(&c3,2)
这几句表示:选择相应的计数器,并读取它的值
========================================
软件与硬件息息相关!!!
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表