第6篇 C语言程序设计.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最后,起动代码调用main(),启动应用的剩余部分。当然针对于MC9S12来说,启动代码可以不必这么麻烦。可以只初始化堆,初始化硬件然后直接跳转到main函数,下面是一个启动代码的例子 void _Startup() { asm { LDS 0x1000 JSR HardInit JSR main } } 程序员可以自己编写启动代码,可以将应用程序中的硬件初始化程序都放在启动代码里面,这样就可以比较专注地在应用程序中做要做的事情。 程序的链接与定位 对于MC9S12单片机来说,由于RAM,EEPROM,寄存器可以重新映射,而且不同型号的单片机内部FLASH大小也不一样,这样程序编译后存放在什么位置,成了我们必须告诉链接器的内容,因为链接器不知道你用的单片机RAM放在什么地方,ROM放在什么地方。 为了方便管理,CodeWarrior自动生成一个.prm文件,此文件用来管理程序的定位。但是该文件并不一定与用户的实际情况相符,因此在链接前,必须自己核对该文件是否与实际的硬件相符。 看书的192页。 §6-3 C程序设计举例 例1 对从RAM中0x1000地址开始的10个无符号字节型数进行由小到大排序 程序分析:可以使用C语言把一个unsigned char类型的数组存储到从0x1000开始的内存空间中,数组的大小为10个字节,内容由程序员自定义。由小到大的排序使用冒泡法完成。 unsigned char data[10] @0x1000,i,j,temp; /* 定义数组 */ void main(void) { for(i=0;i10;i++)/* 初始化数组 */ {data[i]=20-i; } for(i=0;i9;i++)/* 使用冒泡法排序 */ for(j=0;j9;j++) { if(data[j]data[j+1]) {temp=data[j]; data[j]=data[j+1]; data[j+1]=temp;}} for(;;) {} }; 注:若在函数内定义变量,须在函数体开始处定义 例2 求1+2+…+100的和然后分成低、高字节存放在0x1000和0x1001地址单元中 程序分析:求1+2+…100可以用100次循环来实现,因为求出来的和不可以用一个字节表示,所以必须分成高低字节存储。 下面先给一个错误的程序。 unsigned int sum @0x1000=0,i=0; void main(void) { for(;i=100;i++) sum+=i; for(;;) {} } 下面给出正确的程序: unsigned char sum_lowbyte @0x1000 =0,sum_highbyte @0x1001=0,i=0; unsigned int sum; void main(void) { for(;i=100;i++) sum += i ; sum_lowbyte = sum 0xff ; sum_highbyte = (sum 0xff00)8; for(;;) {} } 例3 产生一个随机数,然后返回结果 程序分析:产生随机数可以调用一个函数rand(),使用它可以返回一个0到32767之间的随机数。然后使用switch-case进行处理。注意使用rand()函数,必须包含标准库stdlib.h。此头文件在CodeWarrior安装目录“\lib\HC12c\include”目录中。 #include stdlib.h int i,j; void main(void) { i=rand(); i=i/10000; switch(i) { case 0:j=1000;break; case 1:j=2000;break; case 2:j=3000;break; case 3:j=4000;break; default:j=5000; } for(;;) {} } 例4 C语言嵌入汇编语句 有时在C语言中嵌入汇编语句是很有用的。比如在时序需要严格控制的场合,使用汇编语言加入几条“NOP”指令,显然能够改变程序运行的时序;在需要对较大数据表操作的场合,使用汇编语言查表显然有更高的效率。 假设程序中存在两个无符号整型数据表,需要做的工作是把两个表中对应元素相乘,再把结果相加并存储。即实现如下公式: 其中n为数组的大小,Xi和Yi分别为数组元素。 在9S12指令集中,有一条指令EMACS可以实现乘加操作,我们可以使用这条指令来完成以上的计算。 程序代码和详细注

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档