如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第10章80C51的C语言程序设计10.1单片机C语言概述2024/10/310.1.2C51程序结构10.2.1C51的数据类型尽可能采用无符号格式bit用于定义位变量的名字,编译器会对其分配地址(RAM的20H~2FH区域)sbit用于定义位变量的名字和地址,地址是确定的且不用编译器分配(SFR及RAM的20H~2FH区域)C51编译器在编译时会自动进行类型转换10.2.2C51数据的存储类型经常使用的变量应该置于片内RAM中,要用bdata、data、idata来定义不经常使用的变量或规模较大的变量应该置于片外RAM中,要用pdata、xdata来定义默认存储器类型由编译控制命令的存储模式指令限制10.2.380C51硬件结构的C51定义特殊功能寄存器中特定位的声明内部RAM中可位寻址对象的定义算术运算符和算术表达式自增、自减运算符(仅能用于变量)例如:++自增运算符;--自减运算符;关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符赋值和复合赋值运算符10.3C51流程控制语句if(条件表达式1)语句1elseif(条件表达式2)语句2elseif(条件表达式3)语句3……elseif(条件表达式n)语句nelse语句n+1开关语句10.3.2C51循环语句for语句直到型循环形式为:loop:{语句if(表达式)gotoloop;}10.4C51的指针类型定义时未指定它所指向的对象的存储器类型一般指针定义示例:10.4.2基于存储器的指针10.5C51的函数10.5.2C51函数的调用与参数传递SMALL模式下,在内部RAM中完成COMPACT模式下,在外部RAM中完成LARGER模式下,在外部RAM中完成10.6C51编程实例【例10-1】单片机应用系统中,外中断0引脚接一个开关,并行口线P1.0接一个发光二级管。要求:开关闭合一次,发光二极管的状态改变一次。试编写程序定时计数器编程示例#include“reg51.h”sbitP10=P1^0;voidtimer0(void)interrupt1{P10=!P10;TH0=-(10000/256);TL0=-(10000%256);}10.6.280C51扩展资源的编程#include“reg51.h”#include“absacc.h”/*含有对XBYTE等绝对地址访问宏的定义*/#defineucharunsignedchar#defineCOMD8155XBYTE[0x7f00]#definePA8155XBYTE[0x7f01]#definePB8155XBYTE[0x7f02]#definePC8155XBYTE[0x7f03]sbitBUSY=P3^3;ucharcodetab[17]={0xb8,0xdf,0xbd,0xcc,0x20,0xb3,0xf6,0xb0,0xe6,0xc9,0xe7,0x20,0x32,0x30,0x30,0x38,0x0a};/*高教出版社2008*/uchart1=17;voidmain(void){COMD8155=0x0f;/*送命令字*/prt(0x1c);/*送中文打印方式命令字高字节*/prt(0x26);/*送中文打印方式命令字低字节*/EA=1;EX1=1;while(1);}voidint1(void)interrupt2using1{uchari;EA=0;for(i=0;i<t1;i++)prt(tab[i]);EA=1;}A/D转换接口编程示例#include“reg51.h”#include“absacc.h”#defineucharunsignedchar#defineIN0XBYTE[0x7ff8]sbitad_busy=P3^3;voidad0809(ucharidata*x){uchari;ucharxdata*ad_adr;ad_adr=&IN0;for(i=0;i<8;i++){*ad_adr=0;/*启动转换*/i=i;/*延时等待*/i=i;while(ad_busy!=0);x[i]=*ad_adr;/*存转换结果*/ad_adr++;/*下一通道*/}voidmain(void){staticucharidataad[10];ad0809(ad);}ThankYou!