03 智能循迹小车C语言设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

小型智能电子产品制作主讲教师:马玉志授课专业:应用电子技术单片机的C语言开发C51程序设计C51介绍优点:•开发周期短,速度快•可移植性强•可读性好,维护方便缺点:•与汇编语言相比较,执行速度略慢需要掌握的基础知识•C语言基础可使用C语言设计程序,有一定的设计经验,对C语言的关键字、程序结构、判断语句、循环语句、函数体、指针、数组等有一定的了解•51单片机开发基础对51单片机硬件资源、外部接口、工作特性要熟练掌握C-51的数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255C51编译器扩展的关键字关键字用途说明•bit位变量声明一个位标量或位函数•sbit位变量声明一个可位寻址变量•sfr特殊功能寄存器声明特殊功能寄存器(8位)•sfr16特殊功能寄存器声明16位特殊功能寄存器•data存储器类型说明直接寻址内部存储器•bdata存储器类型说明可位寻址内部存储器•idata存储器类型说明间接寻址内部存储器关键字用途说明•pdata存储器类型说明分页存储的外数据存储器•xdata存储器类型说明外部数据存储器•code存储器类型说明程序存储器•interrupt中断函数声明定义一个中断函数•C51的数据声明的一般格式如下•[类型说明符][修饰符]标识符[=初值]……•例如:unsignedcharcodeFlag=0x0f;就是声明一个无符号的char型变量Flag,并给他赋初值为0x0f;并且声明他所在的存储空间在片内统一编址的ROM中。•声明中,如果没有修饰符,则数据默认的存储空间为data型,也就是在片内RAM中。例:sfrSCON=0X98;sfr16T2=0xCC;sbitOV=PSW^2;例:数据类型存储类型变量chardatavar1;bitdataflags;unsignedcharxdatavextor[10];C51的程序结构与一般C语言的结构相同,以main()函数为程序人口,程序体中包含若干语句还可以包含若干函数。C51函数的一般格式类型函数名(参数表){数据说明部分语句执行部分}编程之前的准备工作•安装C51编译器将装有C51编译器的文件夹拷贝到计算机的硬盘上•编程前的准备●选单片机型号●设置编译器路径●将必要的头文件包含进来reg51.h//可对单片机的硬件进行操作intrins.h//内部函数absacc.h//据对地址访问math.h//数学函数编程注意事项•特殊功能寄存器均为大写•编译器的头文件要采用包含eg:#includereg51.h•自定义的头文件要采用包含eg:#includeled.h•虽然C语言提供goto语句,但尽量不要使用,因它是强制跳转语句,并不符合逻辑跳转规则C-51的运算符与C语言基本相同:+-*/(加减乘除)==(大于大于等于小于小于等于)==!=(测试等于测试不等于)&&||!(逻辑与逻辑或逻辑非)(位右移位左移)&|(按位与按位或)^~(按位异或按位取反)C-51的基本语句与标准C语言基本相同:if选择语言switch/case多分支选择语言while循环语言do-while循环语言for循环语言中断服务程序函数名()interruptn{}I/O口定义#includeabsacc.h#defineprotxbyte[0x1000]或用指针定义例:清零程序(将2000H—20FFH的内容清零)★汇编语言程序ORG0000HSE01:MOVR0,#00HMOVDPTR,#2000H;(0000H)送DPTRLOO1:CLRAMOVX@DPTR,A;0送(DPTR)INCDPTR;DPTR+1INCR0;字节数加1CJNER0,#00H,LOO1;不到FF个字节再清LOOP:SJMPLOOP清零程序(将2000H—20FFH的内容清零)★C-51程序#includereg51.hmain(){inti;unsignedcharxdata*p=0x2000;/*指针指向2000H单元*/for(i=0;i256;i++){*p=0;p++;}/*清零2000H-20FFH单元*/}★汇编语言程序ORG0000HL00:MOVR0,#10H;查找16个字节MOVR1,#00HMOVDPTR,#2000HL11:MOVXA,@DPTRCJNEA,#00H,L16;取出内容与00H相等吗?INCR1;取出个数加1L16:INCDPTRDJNZR0,L11;未完继续MOVDPTR,#2100HMOVA,R1MOVX@DPTR,A;相同数个数送2100HL1E:SJMPL1E例:查找零的个数(在2000H--200FH中查出有几个字节是零,把个数放在2100H单元中)★查找零的个数C-51程序#includereg51.hmain(){unsignedcharxdata*p=0x2000;/*指针p指向2000H单元*/intn=0,i;for(i=0;i16;i++){if(*p==0)n++;/*若该单元内容为零,则n+1*/p++;/*指针指向下一单元*/}p=0x2100;/*指针p指向2100H单元*/*p=n;/*把个数放在2100H单元中*/}C语言编程提高编程风格•程序说明包括:程序名称、功能、编写人、编写日期、修改记录、版本号等信息•H文件与C文件分工明确•适当加入空行函数与函数之间;不同类语句之间加空行voidf1(void){..............}//这里加入空行voidf2(void){...................}/**********************************************加入函数说明***********************************************/voidf1(void){inti;//这里加入空行..............}•适当地加入空格•函数的对齐voidf1(void){}voidf2(void){}voidf3(void){}{.........{.........{..........}}}长的行要进行拆分if((x1==1)&&(x2==2)&&..............(xn==n)){}if((x1==1)&&(x2==2)&&::(xn==n)){}程序的安全性例1:x=0;::if(x==6){........}x=0;::if(x=6){........}例2:inta;intb;intc;::a=b+c;

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功