




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、参赛队伍抽签号:第二届福建地区“盛群杯”大学生单片机应用设计竞赛 技术报告书参赛队伍编号:080225作品名称:HT46系列单片机学习实验系统参赛学生:姓名学校专业年级孙达欣厦门大学嘉庚学院通信工程2004级吴晓静厦门大学嘉庚学院通信工程2004级朱清坤厦门大学嘉庚学院电子信息工程2005级王海建厦门大学嘉庚学院自动化2005级指导老师:姓名学校学院(系)陈寒青厦门大学嘉庚学院电子工程系联络人:姓名:孙达欣电话:地址:厦门大学嘉庚学院南光3-312Email:J04142044提交日期: 2008年 5 月 9 日目 录第一章 摘要2第二章 作品介绍3第三章 工作原理4第四章 作品功能、特色5
2、第五章 作品结构6第一节 十六进制/十进制数(带小数)计算器65.1.1 计算器的硬件部分65.1.2 计算器的软件部分10第二节 出租车计价器155.2.1 出租车计价器的硬件部分15AT24C25617DS130718LED数码管20霍尔器件21空/载开关21四个选项按键的说明225.2.2 出租车计价器的软件部分22第六章 设计方式241、开发技术242、开发方式243、开发时间244、开发费用255、HT46R24的各种功能的应用256、设计工程中遇到的困难267、队员分工表26第七章 测试方式28第八章 操作方式、使用手册301、十六进制/十进制数(带小数)计算器302、出租车计价器
3、31第九章 附录33(一)参考资料33(二)程序331、十六进制/十进制数(带小数)计算器332、出租车计价器54(三)电路图65第一章 摘要本作品是为HT46全系列单片机设计一套功能齐全的学习实验系统,软件上利用汇编语言编写了一些典型算法,如多字节带小数的算术运算、数制转换、压缩型非压缩型之间的转换等,硬件上扩展一些必要的电路,软硬件均采用模块化设计方法。利用此系统不仅可以学习HT46单片机各种片内接口电路的原理与应用,还可以组成多种小系统学习单片机应用系统的设计与调试。配上一本理论与实践相结合的教材后,本作品特别适合在高校中推广,作为学习HT46单片机的最好工具。单片机学习机主要分成两个部
4、分:1.计算器;2.出租车计价器。这个两个部分主要运用了HT46单片机的I/O口、定时/计数器、中断、I2C总线、PFD等功能。第二章 作品介绍单片机又称微控制器(MCU), 它以体积小,功能全,性价比高等诸多优点而独具特色,在家用电器,通信设备, 信息处理等嵌入式应用领域中独占鳌头.HOLTEK的HT46单片机是国内目前应用较为广泛的一种8位单片机, 但在高校中没有开设相关课程,其主要原因在于缺乏教材和学习实验的工具。一种单片机的市场推广仅仅靠低廉的芯片价格,丰富的手册,功能强大的仿真器、编程器是远远不够的,还必须有一套功能齐全的实验系统。为了使国内更多的高校选择HOLTEK单片机作为单片机
5、课程或微机原理课程的基本机型以此推广HOLTEK单片机, 同时考虑到目前市场上HT46单片机相关的实验手册和硬件设备相对较少的情况,我们小组希望利用这次比赛制作出一件以HT46为基础的单片机学习系统. 利用此系统不仅可以学习HT46单片机各种片内接口电路的原理与应用,还可以组成多种小系统学习单片机应用系统的设计与调试。配上一本理论与实践相结合的实验手册后,本作品特别适合在高校中推广,作为学习HT46单片机的最好工具. 要用好一种单片机,除了要熟练掌握各种接口电路的原理应用外,还必须掌握C语言和汇编语言的基本编程技巧。为此我们将汇编语言的一些典型算法,如多字节(带小数)算术运算、数制转换、压缩型
6、非压缩型之间的转换等融入接口应用中,使学习者快速掌握HT46这种RISC指令系统的编程技巧。第三章 工作原理本实验系统在硬件、软件上均采用模块化设计。硬件上,分成两类三块。一类是通用的CPU系统,考虑到HT46系列单片机有许多子系列,引脚封装有多种形式,引脚数各不相同,仿真头也不一样, CPU板上有仿真头插座、单片机芯片焊接座、晶振电路、复位电路等,单片机所有I/O引脚引到一个通用插座上,使用者可根据自己的硬件设计与I/O接口板连接由于HT46的型号较多,我们只选取了HT46R24芯片制作CPU板。其余的CPU板原理相同,需要者不难自行制作。一类是系统模块,分别为计算器,出租车计价器,两者是相
7、互独立的电路板分别与CPU板相连后可以实现各自的功能。软件上,主要分成两块。计算器程序主要是让学习者熟悉和学习HOLTEK的指令系统以及汇编语言的一些典型算法,如多字节(带小数)算术运算、数制转换、压缩型非压缩型之间的转换等,可以说是一块单纯的软件模块。出租车计价器的程序是让学习者学习当硬件和软件结合时软件编程的技巧和注意事项。可以说是一块硬件和软件结合的软件模块。第四章 作品功能、特色本作品的一大特色是充分汲取指导教师多年单片机原理与应用的教学实践经验和应用系统开发经验,为HT46单片机的教学和市场推广打造一个成本低廉、使用方便的学习实验工具。利用此实验系统不仅可以学习HT46单片机各种接口
8、应用,还可以学习应用系统的设计与调试,在短时间内熟练的使用HT46单片机。在本作品和配套的实践教材中,我们将打破原来的“硬件、指令系统、编程、实验”的教学和学习顺序,而是按学习规律编排实验内容,“理论、实验、再理论、再实验”,交替进行,由易到难、由简到繁。这是一种高效率的学习模式。我们还将针对初学者的薄弱环节,如硬件模块、软件模块的划分能力,硬件、软件的调试能力等,提供一些有效的手段进行强化训练。这些内容将在单片机实验书中体现。第五章 作品结构该作品分为两大块,一块为十六进制和十进制数(带小数)计算器,一块为出租车计价器。下面将对这两块分别进行介绍。第一节 十六进制/十进制数(带小数)计算器
9、计算器的硬件部分1、键盘部分计算器的键盘硬件电路主要是由8×3的按键组成的键盘,其中包含0到9、A到F、加、减、乘、除、进制转换HEX/BCD、等号、清零CE这24个按键。键盘的软件采用行列扫描方法,因此,在硬件上,8行分别与HT46R24芯片上的PB0至PB7这8个I/O口相接;3列分别与PA0至PA2这3个I/O口相接。若有一个键被按下,则有1行1列导通。键盘布局如下左图,键盘与单片机的接线如下右图。0HEX/BCDC 123456789ABCDEF.+-*/= PA,PB并行口中,PB口输出扫描码, 使按键逐行动态接地(称行扫描),PA口输入按键状态(称回馈信号,键盘的列值),
10、 由行扫描值和回馈信号共同形成键编码而识别按键、通过软件查表,查出该键的功能。也可由硬件编码器完成键的编码。2、LCD显示部分LCD选用的是DM12232F,它是一种图形点阵液晶显示器。主要由行驱动器/ 列驱动器及122×32全点阵液晶显示器组成。可完成16×2个(16×8点阵)ASCII码显示,也可以显示7.5×2个(16×16点阵)汉字。与外部CPU接口可采用并行方式控制。采用5V供电。DM12232F硬件模块图:DM12232F的管脚说明:管脚号管脚名称LEVER管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3VEE-对比度调整
11、4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“H变为L”,DB7DB0的数据被写到IR或DR6E(CLE)H/L使能信号7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15BL+VDD背光源电压+4.2V- +5V16BL-VSS背光源公共端DM12232F与HT46连接图:计算器模块硬件的实物图:计算器与HT46R24的
12、连接实物图: 计算器的软件部分计算器系统程序包含14个文件:MAIN_KEY.ASM(主程序) 、BEFORE.ASM(各种运算前的初始化)、AFTER.ASM(显示结果前的初始化)、 MAIN_HEX_ADD.ASM(十六进制加法)、MAIN_BCD_ADD.ASM(十进制加法)、MAIN_HEX_SUB.ASM(十六进制减法)、MAIN_BCD_SUB.ASM(十进制减法)、MAIN_HEX_MUL.ASM(十六进制乘法)、MAIN_HEX_DIV(十六进制除法)、MAIN_BCD_HEX.ASM(整数部分的十进制转十六进制)、MAIN_POINT_BCD_HEX(小数部分的十进制转十六进
13、制)、MAIN_ HEX_BCD.ASM (整数部分的十六进制转十进制)、 MAIN_POINT_HEX_BCD.ASM(小数部分的十六进制转十进制) 、 SOUND.ASM(蜂鸣器子程序)。MAIN_KEY.ASM的功能模块可以分为两块:键盘扫描子程序和LCD显示子程序。 计算器的主程序原理流程图如下键盘扫描的编程原理说明: 当Pb0 Pb7输出0时,如无键按下,Pc0Pc2的输入值均为“1”;如果其中有一个不是 “1”,说明有键按下,再使Pb0Pb7逐个输出零(行扫描),检查Pc0Pc2的输入值有 无零,从而查出是哪行哪列的键按下。在判按键时,按键有抖动,可采用延时后再重读以跳 过抖动时段
14、(也可用R-S触发器闩锁电路硬件消抖,但这样电路复杂,在矩阵键盘中不采用)。在键盘扫描子程序的基础上,用软件的方式对每个按键赋予意义, 这里要重点介绍 和 的功能。这个按键有两种功能:一、表示当前输入的进制状态(十六进制或者十进制);二、对输入的数值进行进制转换:十六进制转十进制、十进制转十六进制。如何使用此键可参考计算器使用说明。是等号键。这个键具有判断进行何种四则运算的功能。LCD显示的编程原理说明:DM12232F的汉字显示坐标,如下图汉字显示坐标LINE180H81H82H83H84H85H86H87HLINE290H91H92H93H94H95H96H97H因为汉字显示占用一个字节,
15、而数字,英文字母和四则运算符号可以利用半字节宽度显示。安排屏幕显示时将80H此地址用作待显示的负号和一个空字符,90H此地址用作待显示的四则运算符号和一个空字符,81H-87H和91H97H分别用作待显示的两个运算数据。利用空字符的目的是为了对齐两个运算数据便于察看数据。BEFORE.ASM是关于作十六进制或十进制的四则运算前的准备。例如:将键盘输入RAM中的非压缩码转换为压缩码,根据不同的进制进入相应进制的四则运算等等。AFTER.ASM 是关于各种运算完成后,进入LCD显示结果所作的准备。例如:将压缩型码转换为LCD所需的非压缩型码,检查可能发生的非法输出等等。四则运算(部分):HEX_M
16、UL.ASMMAIN_HEX_MUL子程序是十六进制的乘法(包含整数部分和小数部分)实现乘法程序有三种方法:一、连加法:设乘数为n,n个被乘数相加,其结果与两个乘数相乘的结果相同,这种方法适用于其中一个乘数较小的情况。二、部分积右移法:这是二进制乘法最通用的方法,但对十进制乘法不适用。三、乘法指令: HOLTEK单片机指令集中,无乘法指令。因此,我综合了前两种方法,有效地实现了多字节乘法。以部分积右移法为主要思想,把多字节和多字节的乘法分成三个步骤进行:一、单字节和单字节的乘法:采用连加法;二、单字节和多字节的乘法:在单字节乘法的基础上,采用部分积右移的方法;三、多字节和多字节乘法:在单字节和
17、多字节的乘法基础上,再采用部分积右移的方法。设被乘数、乘数的字节数都大于1,先取出被乘数的最低地址的字节分别依次与乘数的每个字节(按从低地址到高地址的顺序)相乘,每次相乘的结果都右移一个字节和上一个结果相加,相加得到的结果暂时存在积的地址上,接着,再依次取出被乘数的其他各个字节分别依次与乘数每个字节相乘,步骤同上,得到的各个相加的结果,再按每次右移一个字节的方式相加,即可得到最终结果。HEX_DIV.ASMMAIN_HEX_DIV子程序是十六进制的带小数的除法实现除法程序有三种方法:一、连减法:适用于被除数和除数相差不多的情况。二、被除数左移法:最通用的方法,模仿手工的除法计算过程,但对十进制
18、除法不适用。三、除法指令:对有32位除16位和16位除8位指令的CPU来说才适用,但二进制除法除数不能大于16位,否则只能用第二种方法,而十进制除法除数只能是1位数。HOLTEK单片机无除法指令。我采用了以被除数左移法为主要思想,结合连减法,在多字节除一字节的程序的基础上,更改了指针循环的和添加了寄存单元的个数,完成了多字节除法的程序。大致的原理如下:设被除数为N字节,除数为M字节,余数预设空间为a字节(a = M + 1),输入数值的顺序为除数、余数、被除数。被除数逐位移入余数地址空间,反复与除数相减,不够减,继续被除数左移一位,够减,则在被除数的初始地址上加一,如此循环8 * N 次后,计
19、算得到的商代替了被除数,显示在原先被除数的地址上,余数则保存在预留给余数的地址上。HEX_BCD.ASMMAIN_HEX_BCD子程序是整数的十六进制转十进制。整数的十六进制转BCD码采用除0AH取余的方法。将十六进制整数除以0AH得到的余数为BCD码整数的个位,在将上一次除法的商继续除以0AH,这次得到的余数为BCD码整数的十位,依此规律继续转换,直至除法的商等于零为止。POINT_HEX_BCD.ASMMAIN_POINT_HEX_BCD子程序是小数的十六进制转十进制。小数的十六进制转BCD码采用乘0AH取整的方法。先将十六进制的纯小数乘以0AH,取结果的整数部分为BCD码结果的小数部分的
20、最高位,再将结果的小数部分继续乘以0AH,取第二次得数的整数部分为BCD码结果的小数部分的次高位,根据要求的精度,依照这样的规律继续计算,就可以得到最后的BCD码小数结果。BCD_HEX.ASMMAIN_BCD_HEX子程序是整数的十进制转十六进制。整数的BCD码转十六进制采用乘0AH取整的方法。将BCD码的最高位标记为Dn,次高位标记为Dn-1,次高位的下一位标记为Dn-2,以此类推,直至BCD码的个位。根据以下算式可得十六进制结果:HEX = (Dn * 0AH + Dn-1)* 0AH + Dn-2 * 0AH + Dn-3 * 0AH + D1 POINT_BCD_HEX.ASMMAI
21、N_POINT_BCD_HEX子程序是小数的十进制转十六进制。小数的BCD码转十六进制采用除0AH取余的方法。手工换算的方法:先将BCD码的纯小数乘以16,取得整数部分再转化为十六进制,即为十六进制结果的小数部分的最高位,再将上一次得数的小数部分继续乘以16,取第二次得数的整数部分为十六进制结果的小数部分的次高位,根据要求的精度,依照这样的规律继续计算,就可以得到最后的十六进制小数结果。单片机换算的方法:先将纯小数乘以相应的10的n次方,(n的大小为原BCD码小数的位数),变成整数,再采用乘0AH取整的方法,得到十六进制整数,再次扩大相应10的m次方倍,m的大小为十六进制整数的字节数,接着把此
22、数除以0AH的n次方,得到的商为十六进制结果的小数部分。 SOUND.ASMFMQ_MAIN是蜂鸣器的子程序。该程序利用定时器0来控制鸣声的长短,利用定时器1来控制鸣声频率的高低,蜂鸣器的外部电路的输入是芯片HT46R24的PA.3端口。第二节 出租车计价器 出租车计价器的硬件部分出租车计价器硬件框图:出租车计价器的外部硬件由六个部分组成:AT24C256、DS1307、四个按键、四个LED数码管、霍尔器件、空载开关。出租车计价器的实物图:出租车计价器与HT46R24的连接的实物图:AT24C256AT24C256是I2C总线结构的E2PROM。信息存储用AT24C256是因为使用I2C接口芯
23、片可节省I/O口。它的特点是:单电源供电,工作电压范围宽(1.85.5V),低功耗CMOS技术,自定时写周期(包含自动擦除)、页面写周期的典型值为2ms,具有硬件写保护。AT24C256引脚及器件寻址如下图:其中,SCL为串行时钟端;SDA串行数据/地址端;WP为写保护;A0,A1,A2片选或块选; SDA为漏极开路端,需接上拉电阻到Vcc。信号为电平触发,而非边沿触发。AT24C256写AT24C256写操作分为字节写和页面写,写操作的原理如下图15位地址,一页可写64字节AT24C256读AT24C256读存在3种基本读操作类型:读当前地址内容、读随机地址内容、读顺序地址内容。各种类型读操
24、作的原理如下图:DS1307DS1307 是I2C总线接口时钟芯片,具有产生秒、分、时、日、月、年等功能,且具有闰年自动调整功能。同时,芯片内部还集成有一定容量、具有掉电保护特性的静态,可用于保存一些关键数据。DS1307引脚功能 X1、X2:晶振32.768KVbat:备用电源SQW/OUT:方波输出DS1307的寄存器结构:DS1307中的时间寄存器地址编码为00H-07H,而具有掉电保护的寄存器的地址编码为08H-3FH。当地址指针指向的最后一个地址时,若进行多字节操作,则地址指针将会复位而指向00H,这样原来存在00H的数据将会丢失。DS1307的各类时间数据均以BCD码的格式存贮在相
25、应的时间寄存器中,具体分配为:00H:秒;01H:分;02H:小时;03H :星期;04H:日期;05H:月;06H:年;07H:控制字。DS1307可运行在, 12/24小时(AM/PM)模式下,并由时间控制器中的相应位来进行控制。DS1307寄存器的表格如下:CH(时钟暂停):0=使能振荡器,1=禁止因为DS1307上电时所有寄存器值都是不确定的!所以程序初始化时必须将CH清0。DS1307读写原理图LED数码管:显示电路有LED和LCD两种选择,为节省I/O口,LED的位型输出只用4根I/O引脚。本作品采用4位共阴极LED数码管,元件管脚图如下图:4位共阴极LED数码管采用串行转并行的方
26、法进行显示,采用六高压输出缓冲器/驱动器74LS07和TTL 八反相三态缓冲器/线驱动器74LS240驱动,串行发送,可使数码管闪烁程度降低。4位共阴极LED数码管与74LS07和74LS240连接关系:4位共阴极LED数码管1、2、3、4四个管脚分别与74LS07的1Y、2Y、3Y、4Y连接,而74LS07的1A、2A、3A、4A分别与HT46R24的PC0、PC1、PC2、PC3连接;4位共阴极LED数码管A、B、C、D、E、F、G、DP七个管脚分别与74LS240的1A1、1A2、1A3、1A4、2A1、2A2、2A3连接,而74L240的1Y1、1Y2、1Y3、1Y4、2Y1、2Y2、
27、2Y3分别与HT46R24的PB0至PB7连接。霍尔器件:车轮转圈计数电路可用霍尔器件或光电器件,对出租车计价器应用前者为好,所以我们采用此电路。霍尔传感器的外形图和磁场的作用关系如下图所示。磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。霍尔传感器检测转速示意图如下。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈,霍尔传感器便输出一个脉冲。通过HT46R24产生脉冲的频率就可以得出圆盘的转速。注意:霍尔对磁钢方向有要求。没有磁钢时输出高电平,有磁钢是输出低电平。空/载开关:空车/载客状态可用一个拨动开关输入,注意软件要消除抖动。 四个选项按键的说明: 与HT
28、46R24的PA0至PA3四个I/O口相连,用来选择LED显示的内容。 出租车计价器的软件部分出租车计价器的程序框图如下:按照要求实现的功能,出租车计价器程序主要包含以下子程序:(1)I2C通用子程序(2)AT24C256编程(3)DS1337编程(4)LED和键盘扫描原理(5)命令键处理程序(6)显示内容切换程序(7)根据主程序状态切换原理分析,编写空车/载客开关输入及状态切换程序(8)根据计时原理分析,编写计数中断子程序、计时中断子程序(9)根据计价原理分析、误差分析、转圈计数原理分析,编写里程价计算子程序、误时价计算子程序、夜班价计算子程序(10)日统计信息存储程序(11)串行口中断子程
29、序、参数接收处理程序(12)统计信息发送程序其中,I2C编程分为三个层次:底层:I2C协议子程序 启动、停止、写1字节、读1字节、应答、应答非中间:芯片读写子程序(AT24C256、DS1307) 多字节写、多字节读 (传递参数:芯片内地址、内部RAM地址、字节数)上层:参数读写操作 AT24C256:定义每个地址的参数意义; DS1307:按芯片内部寄存器操作。按功能模块分成六类程序:(1)I/O口定义、字节变量定义、位变量定义;(2)I2C;(3)键盘和LED;(4)中断子程序及处理程序;(5)计价程序;(6)主程序; 第六章 设计方式1、开发技术:(1) 十六进制/十进制数(带小数)计算
30、器 关于计算器的所有运算程序思路都是建立在指针的基础上,而不是采用固定地址容量大小的编程思路。这样设计的目的是,根据输入的数字的大小,可以灵活利用RAM空间,比固定地址容量大小更能节省地址空间。但是,采用指针的编程思路的前提是,已知进行运算的数值的字节数。这点很重要,因为这关系到指针移动的范围,直接影响计算结果的正确性。(2) 出租车计价器我们根据市场上的出租车计价器的计价原理和使用功能,设计这项实验,其中用到了I2C总线、定时/计时器、中断、PDF等功能。用使用I2C接口芯片可节省I/O口;利用定时/计时器来计算出租车行驶的速度,还可以配合中断功能,实现50ms中断;/INT0中断则是用于检
31、查出租车行驶的状态。2、开发方式:软件设计思路采用模块化,从低层程序开始自下而上设计。硬件设计时遵循的思路是:1.降低硬件成本,实践中可以通过根据硬件功能需要选择合适的单片机,利用单片机资源减少外围芯片,外围芯片尽量选用串行总线芯片节省I/O引脚(选择AT24C256,DS1307就是考虑利用接口的电路节省I/O引脚)等来达到降低硬件成本这个目的。2.所有芯片尽量只用同一种电源。3、开发时间:(1) 计算器:2月27日 至 3月30日,共33天(2) 出租车计价器:4月1日 至 5月9日,共 39天4、开发费用:本小组只计算了作品成本,未计算其他开发费用名称型号数量单价(元)小计(元)按键(小
32、)28个0.12.8电阻10千欧11个0.0080.088电阻220欧5个0.0080.04串口电平转换芯片MAX2321个44LCD液晶模块12232F(蓝)1块4747开关式霍尔器件并钢磁1个55LED数码管*41个44AT24C2561片55DS13071片55绿油板12x182片1326绿油板9x151片77三极管90121个0.10.174LS2401片2.52.574LS071片2.52.50.5mm单芯塑料导线5米0.4252.125电位器10k1个1114型蜂鸣器1个0.50.5总计:114.653元5、HT46R24的各种功能的应用:在十六进制和十进制数(带小数)计算器中,键
33、盘扫描用到了11个I/O口,蜂鸣器用到了PFD的功能和2个16位可编程定时/计数器,在运算的过程中,用到数据存储器的384*8大小空间的一半。在出租车计价器中,用到了1个与输入/输出口共用引脚的外部中断输入,2个16位可编程定时/计数器,用于控制蜂鸣器频率的PFD的功能,I2C总线功能,16个I/O口。6、设计工程中遇到的困难:在实践过程中,我们遇到很多难题。初期主要是因为对HT46软、硬件不够熟练所致,紧接着就是软、硬件的配合出现的问题。由于HOLTEK单片机的指令是精简指令,指令的种类与51单片机相比较少,且没有像51单片机那样多的已经定义好的通用寄存器如R0、R1等, 所以一开始很不习惯
34、。但在熟悉HT46之后,相反我更加喜欢运用通用寄存器较少的HT46因为它可以让我更加自如的定义各种需要用的变量名,方便编程时的运用。另外,在调试主程序的过程中,有一个问题曾困扰我很久。当调试到十进制的除法时,就发生堆栈溢出。我不明白当每个子程序单个调试时,从未遇到这样的问题,一旦和主程序相互连接在一起,就发生这样的问题。于是,我细心逐步查询问题的所在,终于发现除法程序中的移位子程序用错了CALL指令,导致堆栈溢出。CALL指令是用来调用子程序,每次运行该指令前,程序会主动将程序计数值压入堆栈,以便运行完调用子程序,可以返回调用前的程序地址。以前在写单个子程序,从未注意过这点,一旦程序串在一起时
35、,才会有类似问题出现。 还有一些在51中可以运行的程序经过修改移植到HT46以后,配合硬件时也出现了诸多问题,究其原因可能是没有考虑到HT46与51的单片机的晶振频率不同,导致指令周期不同在软硬件速度上的配合上出现了问题。 设计计算器的逻辑是碰到的合法输入的问题,计价器硬件电路的设计和布局问题也是比较麻烦的。相信如有机会我们会把这个学习机做的更加完善。7、队员分工表:队员任务孙达欣计算器的部分软件编程和调试,LCD显示子程序的编写和调试,出租车计价器的硬件部分设计,编写和调试出租车计价器的部分软件程序,写技术报告吴晓静计算器的硬件部分设计,焊接计算器和LCD显示的电路板,编写和调试计算器的部分
36、软件的编写,编写和调试出租车计价器的部分软件程序,焊接出租车计价器的电路板,写技术报告朱清坤用Protel绘制电路图第七章 测试方式软件调试环境为HT-IDE3000。硬件调试环境为HT-IDE(HT46R24)Integrated,搭配相应的硬件电路。计算器的主程序MAIN_KEY汇编结果如下:计算器的主程序MAIN_KEY编译结果如下:出租车计价器的I2C汇编结果如下:出租车计价器的I2C编译结果如下:第八章 操作方式、使用手册1、十六进制/十进制数(带小数)计算器1)输入范围:最小值最大值十六进制数0FFFFFFFFFFFFF十进制数1×9.999999999999×
37、 2) 每次计算前,要按下键。如果发现当前输入错误则短按,如果需要清屏则长按。3)的使用:进行四则运算前,要确定运算的进制,计算器进行两种进制的运算:十六进制(HEX)和十进制(BCD)。开机默认为十六进制。若要进行十进制的相关运算,则应在输入计算的数值前按下键。4)四则运算:确定运算的进制后,先输入第一个计算数值,然后选择要进行的四则运算类型:加、减、乘、除,再输入第二个计算数值,确认所有的计算的内容后,按下等号键,将显示运算的结果。5)正确的输入:每个输入的计算数值含小数点在内,不得超过13个字符。一旦输出超过13个字符,计算器的蜂鸣器发出警告声同时清屏。注意:输入时不要超过屏幕显示能够容
38、纳的一行,即13个字符!以下是错误输入范例错误输入正确输入012.3412.3400.8CB90. 8CB90FFFFFF6)关于进制转换运算的使用:进行十六进制转十进制时,先输入一个十六进制数(计算器默认进制为十六进制),再按下键,将显示转换的计算结果;进行十进制转十六进制时,先改变进制状态,按一次HEX/BCD键,接着输入要转换的十进制数值,再按一次键,最后显示转换的计算结果。如果在输入过程中有输入错误的情况(错误情况不包括非法输入的情况)时应该按键,注意这时将会把此次相关的所有输入连同LCD显示的内容全部清除。非法输入的情况有:一次性输入的字符数(包括小数点)超过13个字符;输入了两次的
39、四则运算符号或者小数点;在十进制条件下输入了十六进制的符号; 2、出租车计价器1)通过拨动开关,改变载客/空车的状态。开机时,默认为空车状态,拨动开关,使之变为载客状态。2)在进入载客状态后,转动转盘用以模拟车轮运转,出租车计价器根据自行设定的时间和计价参数,进行计费。(时间和计价参数可根据实验需要自行制定) 3)四个选择按键的实现的功能说明:01H、02H、04H、08H分别代表四个按键。空车状态: 按01H:显示每日统计信息;再按04H:显示下一日统计信息,或按 08H:显示上一日统计信息 按02H:显示每月统计信息;再按04H:显示下一月统计信息,或按 08H:显示上一月统计信息载客状态
40、: 按01H:显示时间;按 04H:下一个计价参数; 按02H:显示日期;按08H:上一个计价参数;超过6S无按键则恢复循环显示;循环显示每项6S。第九章 附录(一)参考资料1 林聪仁编著 微机原理实践实验讲义2 李齐雄,郑颜雄,蔡孟昌编著. HOLTEK HT48系列单片机原理及应用实例M. 北京: 北京航空航天大学出版社, 2005年4月第1版.3 李群芳,张士军,黄建编著.单片微型计算机与借口技术M.北京:电子工业出版社,2005年1月第2版(二)程序由于程序内容较多,只附上主要程序。1、十六进制/十进制数(带小数)计算器: ;=; 文件名:MAIN_KEY.ASM,此程序是用于联系键盘
41、、LCD和各个运算子程序的功能。; 日期:2008/4/30; MCU: HT46R24; Fsys: 4MHz;=INCLUDE HT46R24.INCPUBLIC KEY22PUBLIC KEY2PUBLIC MAIN1PUBLIC MAIN_CLEANPUBLIC BEFORE_BCD_HEXpublic display_switchPUBLIC ASCIIPUBLIC MINUS_SYMBOLPUBLIC ERRORPUBLIC REG_0,REG_1,ADRS_0,ADRS_1,FIRST_0,FIRST_1,SECOND_0,SECOND_1,THIRD_0,THIRD_1,NUM
42、_0DH,TTTEXTERN MAIN_HEX_ADD:NEAREXTERN MAIN_BCD_ADD:NEAREXTERN MAIN_HEX_SUB:NEAREXTERN MAIN_BCD_SUB:NEAREXTERN MAIN_HEX_MUL:NEAREXTERN MAIN_HEX_DIV:NEAREXTERN MAIN_BCD_HEX:NEAREXTERN MAIN_POINT_BCD_HEX:NEAREXTERN MAIN_HEX_BCD:NEAREXTERN MAIN_POINT_HEX_BCD:NEAREXTERN END_HIGH_ZERO:NEAREXTERN FMQ_MAIN
43、:NEAREXTERN DSQ0:NEAREXTERN GIFT1:NEAR,GIFT2:NEAREXTERN BEFORE_ADD:NEAR,BEFORE_SUB:NEAR,BEFORE_MUL:NEAR,BEFORE_DIV:NEAREXTERN ENLARGE:NEAR,OVERTURN:NEAR,LOOP_COPY:NEAR;,AFTER_MUL:NEAR,AFTER_DIV:NEARIN_0 EQU PAC.0 ;以下三个是对键盘列口的定义IN_1 EQU PAC.1IN_2 EQU PAC.2E EQU PC.0 ;以下三个是对LCD IO口的定义A0 EQU PC.1 RW EQ
44、U PC.2KEY_RAM1L EQU 92HKEY_RAM1H EQU 93HKEY_RAM2L EQU 94HKEY_RAM2H EQU 95HKEY_NUM1 EQU 96HKEY_NUM2 EQU 97HKEY_DATA EQU 98HKEY_DATA1 EQU 99HFLAG EQU 9AH.0line_flag EQU 9AH.1check_flag EQU 9Ah.2check_flag_1 EQU 9Ah.3HH equ 9Ah.4COUNT1 EQU 9bHNUMBER EQU 9CH;按动按键的计数值KEY_N EQU 9DH;存清零的个数KEY_M EQU 9EH;计算符
45、号KEY_I EQU 9FH;记录BCD或HEX的状态FIRST_ADRS EQU 0A0HFIRST_REG EQU 0B0HSECOND_ADRS EQU 0C0HSECOND_REG EQU 0D0HTHIRD_ADRS EQU 0E0HTHIRD_REG EQU 0F0HDATA .SECTION AT 7cH'data'TTT DB 1num_0dh_reg db 1NUM_0DH DB 1num1_adrs db 1num2_adrs db 1delay_reg1 db 1 ;LCD子程序的delaydelay_reg2 db 1delay_reg3 db 1cou
46、nt db 1count_delay db 1display_reg db 1switch_symbol_reg db 1FIRST_0 db 1 ;第一个数的整数部分字节数FIRST_1 db 1 ;第一个数的小数部分字节数SECOND_0 db 1 ;第二个数的整数部分字节数SECOND_1 db 1 ;第二个数的小数部分字节数THIRD_0 DB 1 ;第三个数的整数部分字节数THIRD_1 DB 1 ;第三个数的小数部分字节数REG_0 DB 1 ;寄存当前要进行转换运算的数的整数部分字节数REG_1 DB 1 ;寄存当前要进行转换运算的数的小数部分字节数ADRS_0 DB 1 ;寄存
47、当前要进行转换运算的数的整数部分的最高位地址ADRS_1 DB 1 ;寄存当前要进行转换运算的数的小数部分的最高位地址CODE.SECTION AT 00H'CODE'ORG 00HJMP STAR org 008h JMP DSQ0 org 00ch RETIORG 20HSTAR: CLR PBC;做输出 CLR PB CLR PAC set IN_0 set IN_1 set IN_2 CLR PA clr pcc clr pc CLR FLAGMAIN0: MOV A,0C0H CALL MAIN_CLEAN;RAM的BANK0清空 MOV A,0A0H MOV MP0
48、,A; MOV A,0DH MOV NUM_0DH,A mov a,0eh mov count,a mov a,81h mov num1_adrs,a mov a,90h mov num2_adrs,a call LCDresetMAIN1:SCAN: MOV A,08H MOV KEY_NUM1,A CLR KEY_RAM1L CLR KEY_RAM1H MOV A,0FEH MOV KEY_DATA,A SCAN1: ;第一列 MOV A,KEY_DATA MOV PB,A MOV A,PA;and a,07h MOV KEY_DATA1,A XOR A,07H SZ ACC JMP SC
49、AN2 RL KEY_DATA MOV A,03H ADDM A,KEY_RAM1H DEC KEY_NUM1 SZ KEY_NUM1 JMP SCAN1 CLR FLAG CLR KEY_RAM2L CLR KEY_RAM2H JMP MAIN1SCAN2: ;第二列 CALL Delay_3ms MOV A,03H MOV KEY_NUM2,ASCAN20: MOV A,KEY_DATA1 SUB A,06H SZ ACC JMP SCAN21 JMP SCAN3SCAN21: INC KEY_RAM1H MOV A,KEY_DATA1 SUB A,05H SZ ACC JMP SCAN2
50、2 JMP SCAN3SCAN22: INC KEY_RAM1H MOV A,KEY_DATA1 SUB A,03H SZ ACC JMP SCAN23 JMP SCAN3 SCAN23: CLR FLAG CLR KEY_RAM1L CLR KEY_RAM1H JMP MAIN1SCAN3: ;第三列 MOV A,KEY_RAM1H SUB A,KEY_RAM2H SZ ACC JMP SCAN4 SZ FLAG JMP MAIN1 JMP KEYSCAN4:;在一定时间内,按下相同键,判定为按键抖动,不予处理 MOV A,KEY_RAM1H MOV KEY_RAM2H,A CLR FLAG JMP MAIN1KEY: SET FLAG MOV A,KEY_RAM1H; ADDM A,PCL JMP KEY1 JMP KEY2 JMP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农产品批发市场合作运营协议
- 智能工厂智能生产线控制系统开发协议
- 委托加工制造合同及质量保证条款
- 浙江国企招聘2025台州市城市建设投资发展集团有限公司招聘12人笔试参考题库附带答案详解
- 2025重庆联合产权交易所集团股份有限公司招聘31人笔试参考题库附带答案详解
- 质量安全员试题及答案
- 2025冶金工业信息标准研究院招聘笔试参考题库附带答案详解
- 电商产业园发展前景分析报告
- 纺织品设计师证书考试理念总结试题及答案
- 淘宝平台客户关系管理(CRM)战略与实践
- 社会主义发展史智慧树知到课后章节答案2023年下齐鲁师范学院
- 公路工程竣工环境保护验收调查报告
- 三年级下册美术说课稿-第十二课 赛龙舟 ︳湘美版
- 地铁保护区范围施工及开挖施工保护方案
- 精准屈光性白内障手术课件
- 基于西门子PLC自动旋转门的设计毕业设计
- 国家开放大学电大《建筑制图基础》机考网考题库及答案
- GB/T 3098.6-2023紧固件机械性能不锈钢螺栓、螺钉和螺柱
- 人教版高中地理必修二 同步练习册电子版
- 锌银电池的资料
- 七人学生小品《如此课堂》剧本台词手稿
评论
0/150
提交评论