注1:AT89C51 芯片中RAM只有低128 位,而AT89C52芯片中RAM另外还有高128位,地址为
80H到FFH,并和特殊寄存器SFR地址重叠。
注2:在编写程序时,如是使用signed和unsigned两种数据类型,那么就得使用两种格式类型的库
函数,这将使占用的存储空间成倍增长,因此在编程时,如是只强调程序的运算速度而又不进行负数运算,最好采用无符号(unsigned)格式。 注3:尽量使用位变量。
注4:缩写形式定义: typedef unsigned char ucha typedef unsigned uint uint
4.4 存储模式及说明(P63) 存储模式 SMALL 小模式 COMPACT 紧凑模式 LARGE 大模式 说 明 参数及局部变量放入可直接寻址的片内存储器(最大128字节,默认存储类型是data) 参数及局部变量分页外存储器(最大256字节,默认存储类型是pdata),通过寄存器 R0和R1间接寻址,棧空间位于单片机内部RAM。 参数及局部变量直接放入片外数据存储器(最大64KB,默认存储类型是xdata),通过数据指针DPTR来寻址,访问效率低。 第五课 8051并行接口及其Cx51定义(P66)
P0-P3口,32根I/O线;
输入缓冲器;输出缓冲器;引至芯片外的端口引脚; P0、P1、P3为准双向口;P0为双向三态口;
向外扩展存储器要用P0口和P2口,P2口输出地址高8位(A15~A8),P0口数据和地址复用; P0~P3可以字节寻址,也可以位寻址;
标准8051的端口没有数据方向寄存器。P1、P2、和P3都有内部上拉,都可以作为输入或输出。 写端口就是写一个要送端口的值;
读端口,必须先向端口写“1”(单片机复位时口线的初值是全“1”)
第六课 位变量(P68)
6.1、位变量的Cx51的语法及语义如下: bit dir_bit;/*将dir_bit定义为位变量*/
6.2、函数可包含类型为bit的参数,也可以将其作为返回值。
例:bit func(bit b0,bit b1) {/*………*/ Return (b1); }
6.3、对位变量定义的限制: 位变量不能定义成一个指针,如不能定义 bit *bit_point; 不存在位数组, 如不能定义 bit b_array[ ]; 6.4、 可位寻址对象: 是指可以字节或位寻址的对象。位于8051内部RAM中,因此存储类型为idata. 6.5、sbit 位变量名=位地址
sbit P1_1 = Ox91;
这样是把位的绝对地址赋给位变量。同sfr 一样sbit 的位地址必须位于80H-FFH 之间。
6.6、sbit 位变量名=特殊功能寄存器名^位位置
sft P1 = 0x90;
sbit P1_1 = P1 ^ 1; //先定义一个特殊功能寄存器名再指定位变量名所在的位置 当可寻址位位于特殊功能寄存器中时可采用这种方法 6.7、sbit 位变量名=字节地址^位位置
sbit P1_1 = 0x90 ^ 1;
sbit P1_0 = P1 ^ 0; //而是自己定义特殊寄存器 sfr P1 = 0x90; //这里没有使用预定义文件,
sbit P1_7 = 0x90 ^ 7; //之前我们使用的预定义文件其实就是这个作用 sbit P1_1 = 0x91; //这里分别定义P1 端口和P10,P11,P17 引脚
第七课 算术运算符及其表达式(P69)
7.1、Cx51算术运算符及其表达式 算术运算符 + - * / % 表达式 a+b a-b a*b a/b 9%5余4 含义 加法运算符,或正值符号 减法运算符,或负值符号 乘法运算符, 除法运算符, 模(求余)运算符,或正值符号
7.2、Cx51关系运算符及其表达式 算术运算符 〈 〉 〈= 〉= == != 表达式 a〈 b a > b a <= b a >= b a == b a != b 含义 小于 大于 小于或等于 大于或等于 测试等于 测试不等于
7.3、Cx51逻辑运算符及其表达式
算术运算符 && || ! 表达式 a && b a || b a ! b 含义 逻辑“与”(AND) 逻辑“或”(OR) 逻辑“非”(NOT)
7.4、Cx51位操作及其表达式 算术运算符 & | ^ ` << >> 表达式 a & b a | b a ^ b a ~ b a << 7 a >> 8 含义 按位与 按位或 按位异或 按位取反 左移7位 右移8位
注:左移或右移,空出位补“0”,移出位丢掉。
7.5、Cx51自增减运算符及其表达式 自增减运算符 ++i,--i i++,i-- 含义 在使用i之前,先使i值加(减)1 在使用i之后,再使i值加(减)1
7.6、Cx51复合运算符及其表达式 算术运算符 += -= *= /= %= <<= >>= &= ^= |= ~= 注:优先级说明
表达式 a += b a -= b a *= b a /= b a %= b a <<= 8 a >>= 8 a &= b a ^= b a |= b a ~= b 含义 a=a+b 加法 a=a-b 减法 a=a*b 乘法 a=a/b 除法 a=a%b 求余 a=a<<8左移 a=a>>8右移 a=a&b按位与 a=a^b按位异或 a=a|b按位或 a=a~b按位取反
第八课 Cx51控制语句(P80) 8.1、循环语句 while
do while if /else switch/case
(P90) for语句
for (表达式1;表达式2;表达式3) for (i=0;i<50;i++) 特例1:for (;i<50;i++)
缺省表达式1,不对i设初值 特例2:for (i=1;;i++){sum=sum+i}
不判断循环条件,无休止地进行下去。相当于 i=1;
while (1) {sum= sum+1; i++; }
特例3:for ( ;i<100;){sum=sum+1;i++}
相当于
while (i<100) {sum= sum+1; i++; }
特例4:for (i=1;i<100;i++);
没有循环体,起延时作用 特例5:for (;;)
{/*循环体*/ } 相当于
while (1)
{/*循环体*/
} /*死循环体*/
为了使程序具有可读性,不主张使用for语句的特例
第九课 Cx51 T0中断(P182) 9.1、T0定时器/计数器操作模式