sbit:定义特殊功能寄存器的位变量,如:sbit P0_0=P0^0;//即定义P0_0为P0口的第1位 sfr:可以对51内部的寄存器进行定义,定义格式:sfr 变量名=变量地址。你打开reg51.h,里面的寄存器都是用sfr进行定义的 interrupt:中断的意思。 code:程序存储区。如定义一个数组uchar ad_data[],即把数组定义在RAM中,uchar code ad_data[],就把数组定义在rom中了
各类型长度:
unsigned char is 8 bit
signed char is 8 bit
unsigned short is 16 bit
signed short is 16 bit
unsigned int is 32 bit
signed int is 32 bit
float fp32 is 32 bit
double fp64 is 64 bit
unsigned long is 32 bit
-> 的用法
->在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符“.”。 用法: p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员。表达式p->a引用了指针p指向的结构体的成员a。 例如: struct T { int a; char b; }s; struct T* p=&s; 那么, p->a相当于s.a。 显然,有个等价写法:(*p).a,和p->a完全等效。
PX口的三个寄存器用法、
PxDIR是msp430单片机IO口的方向控制寄存器,
当把某一位置0时,此时次端口为输入模式,
当把某一位置1时,此时次端口为输出模式,
1、当作为输出模式时,这是就可对其可读可写了,通过对其写,就可以控制外围模块了。
2、当作为输入模式时,只能读它的状态,不能对起写入数据。
而PxIN和PxOUT分别是输入数据和输出数据寄存器。
程序应该先配置PxDIR为输入或输出才能对相应寄存器操作。
大家一定会想既然有了PxIN和PxOUT,为什么还要个PxDIR寄存器呢,直接对相应的寄存器操作就行了嘛,
我觉得是应为msp430单片机对输入输出的严格控制才这样设置的,
因为每一个端口在同一时间只能是输入或是输出状态的一种,
然后在根据具体是设置成什么状态,才能对相应的寄存器进行操作,这样更能精确的控制端口。
模拟线路信号的速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。
vsprintf() 中的 arg 参数位于数组中。数组的元素会被插入主字符串的百分比 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
#include
#include
char buffer[80];
int vspf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90.0;
char string[4] = "abc";
vspf("%d %f %s", inumber, fnumber, string);
printf("%s\n", buffer);
return 0;
}
在C语言中,&有三种作用,分别如下:
1. 取地址。单目运算符。用来取一个变量的地址。
比如
int i, *p;
p = &i;//这里的&作用是取变量i的地址。
2. 位操作中的与操作运算符。
也就是常说的and操作,双目运算符。
计算的时候按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0
比如
0x12&0x23 转为二进制为:
B00010010&B00100011,
按位计算结果为B00000010,
即结果为0x02。
3. 当两个&&一起用的时候,表示为逻辑运算中的与运算。
逻辑运算结果只有0和1两种结果。
一般在&&两边是两个逻辑表达式。
当两个表达式值均为1时,&&运算结果为1,否则为0。
比如
2>1 && 0<1 这个的值为1&&1 = 1。
1>2 && 2>0 这个值为0&&1 = 0。
1>2 && 2>3 这个值为0&&0=0。