欢迎来到天天文库
浏览记录
ID:34394333
大小:171.15 KB
页数:6页
时间:2019-03-05
《freescale hcs08单片机原理及应用-汇编程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、FreescaleHCS08单片机原理及应用体值,而无需用户自己计算。由于复位矢量位于Flash空间,并且每个复位/中断矢量占用2字节的Flash空间,因此用DC.W伪指令定义。注意不能用DS伪指令定义Flash常量。对于有中断服务子程序的源程序,为了在发生中断时能够响应中断进入相应的中断服务子程序,和填写复位向量类似,只需将中断服务子程序的入口地址填入对应的中断复位向量区即可。3.6.3汇编程序设计3.6.3.1算术/逻辑运算程序设计MCU主要用于控制目的,其数据运算、处理的能力并不强。但由于HCS08系列MCU具有相应的
2、算术、逻辑指令,因此它可以完成一些简单的算术/逻辑运算功能。[例3.1]若字变量Data1和Data2分别存放着两个16位无符号数,编写求这两个数之和的子程序,并将和存放到Sum字节存储空间中。两个16位无符号数相加,和为17位,至少需要3个字节的存储空间,和按照从高位到低位的顺序依次存放在以Sum为首地址的字节存储单元中。Add_Pro:CLC;清进位标志位LDAData1+1ADDData2+1;两数低八位相加STASum+2;存低八位之和LDAData1ADCData2;高八位带低八位进位加STASum+1;存高八位之
3、和ROLAAND#01HSTASum;存高八位进位位RTS3.6.3.2查表和散转程序HCS08具有变址寻址方式,实现查表操作非常方便。利用查表可以实现转换、计算等各种功能。散转是指根据输入数据的不同跳转到不同的程序入口进行处理。[例3.2]单字节变量Hex_Byte中存放了一十六进制数,编写子程序将其转换为两位ASCII码,并将结果存至以Result开首的字节存储单元中。例如4AH的ASCII码为3441H,$F9的ASCII码为4639H。……ORG0070H;用户变量一定要定位在Ram区域Hex_ByteDS.B1Re
4、sultDS.B2……HUST&Freescale联合实验室94FreescaleHCS08单片机原理及应用ORG0870HASCII_TableDC.B‘0123456789ABCDEFG’;常数表格、代码一定要定位在Flash区域……Hex_To_Ascii:LDAHex_ByteAND#$F0;取出高4位NSA;(A[3:0]:A[7:4])→ATAX;A→XLDAASCII_Table,X;查表,得高4位的ASCII码STAResult;存高4位的ASCII码LDAHex_ByteAND#$0F;取出低4位TAX;A
5、→XLDAASCII_Table,X;查表,得低4位的ASCII码STAResult+1;存低4位的ASCII码RTS[例3.3]设字节变量Num存放在Ram的0070H单元,取值范围为0T~9T,编写查表子程序,查出变量的立方值,并存入Cube字节变量中。可以在Ram区存储一张立方表,通过查表来求立方值。由于9的立方值为729T=2D9H,故表中的每一个立方值需用2个字节来存储,则数值Num、数值Num的立方值的存储地址Addr_n和立方表的首地址Cube_Tab的关系为:Addr_n=Cube_Tab+Num×2代码段如
6、下:……ORG0070H;用户变量一定要定位在Ram区域NumDS.B1Res_CubeDS.B2……ORG1860H;常数表格、代码一定要定位在Flash区域Cube_Tab:DC.W0000,0001,0008,0064,0125,0216,0343,0512,0729……Cube:LDXNum;Num→XLSLX;X×2→XLDACube_Tab,X;查表得立方值高位STARes_CubeLDACube_Tab+1,X;查表得立方值低位STARes_Cube+1RTS查表技术是汇编语言程序设计的一个重要技术,通过查表避
7、免了复杂的计算和编程,如查平方表、立方表、函数表、数码管显示的段码表等。需要注意的是,表格常数一定要定位到Flash区域才能正确实现查表功能,而不能把常数表格定位到RAM区域。查表运算有时还常和转移指令配合使HUST&Freescale联合实验室95FreescaleHCS08单片机原理及应用用,非常方便地实现散转功能。实现散转的具体做法是,在程序中定义一块连续存储单元作为跳转表,表中顺序存放各分支处理程序的跳转地址。各跳转地址在表中的偏移起始地址等于跳转表首地址加上它们各自的序号与所占字节数的乘积。3.6.3.3软件延时程
8、序在MCU处理程序中,有时需要MCU什么都不做,而仅仅只拖延一段时间。延时功能既可通过MCU的定时器、计数器来实现,也可采用软件进行延时。通过A、H:X增减指令、空操作指令NOP和BRN以及相应的转移指令,再利用循环程序结构,可以用它们方便地实现软件延时功能。[例3.4]设计一个延时10m
此文档下载收益归作者所有