那位大虾指点一下小弟.拜托了!在马忠梅的单片机的c语言应用程序设计一书的170页的8253应用的程序:
#include <absacc.h>
#include <reg51.h>
#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 P1_7 =P1^7; /*门控信号*/
uint idata BUF8253[3];
...........
void cbfp(po,x) /*计数器取值函数参数为地址和通道*/
uchar xdata *po;
uchar x;
{
uchar h,l;
l=*po;
po++; /*问题1*/
po--;
h=*po;
BUF8253[x]=-(h*256+l); /*问题2*/
}
void fcbf(void)
{
P1_7 =0;
COM8253 =0x0a;
COM8253 =0x4a;
COM8253 =0x8a;
COM8253 =0x0a; /*问题3*/
cbfp(&C1,0);
COM8253 =0x0a;
cbfp(&C2,1);
COM8253 =0x0a;
cbfp (&C3,2);
}
void init 8253(void)
{
COM8253=0x3a; /*问题4*/
C1=0;C1=0;
COM8253=0x7a;
C2=0;C2=0;
COM8253=0xba;
C3=0;C3=0;
}
void main()
{
init 8253();
.....
fcbf();
}
其中有不是很清楚地地方向各位大虾请教了:
问题1:po++之后为什么要po--?这样不是没有操作吗?
问题2:BUF8253[x]=-(h*256+l)为什么这样写,用0xffff-(h*256+l)可不可以?
问题3:在取值时为什么要把一个语句写两遍,COM8253=0X0a;COM8253=0X0a;cbfp(&C1,0),是
不是重复了?
问题4:C1=0;C1=0;写两次是不是先赋计数器初值低位在赋高位的意思?