80C51的C语言程序设计概述
第9章 80C51的C语言程序设计;9.1 单片机C语言概述 ;Date;9.1.2 C51程序结构;9.2.1 C51的数据类型;尽可能采用无符号格式bit用于定义位变量的名字,编译器会对其分配地址(RAM的20H~2FH 区域)sbit用于定义位变量的名字和地址,地址是确定的且不用编译器分配(SFR及RAM的20H~2FH 区域)C51编译器在编译时会自动进行类型转换 ;9.2.2 C51数据的存储类型;经常使用的变量应该置于片内RAM中,要用bdata、data、idata来定义不经常使用的变量或规模较大的变量应该置于片外RAM中,要用pdata、xdata来定义默认存储器类型由编译控制命令的存储模式指令限制 ;9.2.3 80C51硬件结构的C51定义;特殊功能寄存器中特定位的声明 ;内部RAM中可位寻址对象的定义 ;算术运算符和算术表达式 ;自增、自减运算符(仅能用于变量) 例如: ++ 自增运算符; -- 自减运算符;;关系运算符和关系表达式 ;逻辑运算符和逻辑表达式 ;位运算符 ;赋值和复合赋值运算符 ;9.3 C51流程控制语句 ;if(条件表达式1)语句1 else if (条件表达式2)语句2 else if (条件表达式3)语句3 … … else if (条件表达式n)语句n else 语句n+1 ;开关语句;9.3.2 C51循环语句 ;for语句; 直到型循环 形式为: loop:{语句 if(表达式) goto loop; };9.4 C51的指针类型 ;定义时未指定它所指向的对象的存储器类型 ;一般指针定义示例:;9.4.2 基于存储器的指针;9.5 C51的函数 ;9.5.2 C51函数的调用与参数传递 ;SMALL模式下,在内部RAM中完成 COMPACT模式下,在外部RAM中完成LARGER模式下,在外部RAM中完成;9.6 C51编程实例 ;【例10-1】单片机应用系统中,外中断0引脚接一个开关,并行口线P1.0接一个发光二级管。要求:开关闭合一次,发光二极管的状态改变一次。试编写程序 ;定时计数器编程示例;#include “reg51.h”sbit P10 = P1^0;
void timer0(void)interrupt 1{ P10 = ! P10; TH0 = -(10000/256); TL0 = -(10000%256);} ;9.6.2 80C51扩展资源的编程 ;#include “reg51.h”#include “absacc.h” /*含有对XBYTE等绝对地址访问宏的定义*/#define uchar unsigned char#define COMD8155 XBYTE[0x7f00]#define PA8155 XBYTE[0x7f01]#define PB8155 XBYTE[0x7f02]#define PC8155 XBYTE[0x7f03]sbit BUSY = P3^3; ;uchar code tab[17] ={0xb8,0xdf,0xbd,0xcc,0x20, 0xb3,0xf6,0xb0,0xe6,0xc9,0xe7,0x20, 0x32,0x30,0x30,0x38,0x0a};/*高教 出版社 2008*/ uchar t1 = 17;;void main(void){ COMD8155 = 0x0f;/*送命令字*/ prt(0x1c); /*送中文打印方式命令字高字节*/ prt(0x26); /*送中文打印方式命令字低字节*/ EA = 1; EX1 = 1; while(1);};void int1(void)interrupt 2 using 1{ uchar i; EA = 0; for(i = 0;i < t1;i ++)prt(tab[i]);EA = 1;};A/D转换接口编程示例;# include “reg51.h”# include “absacc.h”# define uchar unsigned char# define IN0 XBYTE[0x7ff8]sbit ad_busy = P3^3; ;void ad0809(uchar idata *x){ uchar i; uchar xdata * ad_adr; ad_adr = & IN0; for(i = 0;i < 8;i ++)