汇编语言单片机实验.doc_第1页
汇编语言单片机实验.doc_第2页
汇编语言单片机实验.doc_第3页
汇编语言单片机实验.doc_第4页
汇编语言单片机实验.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件实验一 数据传送一、实验目的1熟悉KEIL软件的程序调试方法2掌握从外部数据存储器传送到内部存储器的指令3掌握算术运算指令二、实验内容本实验为软件实验:数据传送实验。这个实验包括两个小实验:1.从外部数据存储器传送到内部RAM中;2.求16个学生的年龄之和,数据存放在20H单元中。此实验均可在脱机模拟状态下调试运行,也可以连接上仿真器与实验箱在线仿真运行。1从外部数据存储器传送到内部RAM中本实验在程序编译之前,将外部数据存储器(XDATA)和内部数据存储器(DATA)窗口打开,并在XDATA窗口在0000H、0001单元分别键入54H、55H。然后程序单步运行或全速运行,观察寄存器A,B,DPTR,R1,R2,R3的值是不是如程序所希望的那样变化,最后看R3的值是不是54H+55H=A9H。实验源程序如下: ORG 00H AJMP START ORG 30HSTART: MOV A, #56H MOV B, #78H MOV DPTR, #00H MOVX A, DPTR MOV R1, A INC DPTR MOVX A, DPTR ADD A, R1 MOV R3, AHERE: AJMP HERE END2求16个学生的年龄之和程序运行前,先将16个学生的年龄放在内部数据区20H单元开始的地方,码制为BCD码,程序运行结束时,16个学生的年龄和放在寄存器A和B中(B为高位,A为低位)。实验源程序如下: ORG 00H AJMP START ORG 30HSTART: MOV R0, #20H MOV R7, #16 MOV A, #00H MOV B, ALOOP: ADD A, R0 DA A JNC NEXT INC BNEXT: INC R0 DJNZ R7, LOOPHERE: SJMP HERE END三、实验步骤1.运行KEIL软件2.新建项目 project/new project/3.保存项目 选择保存项目的名称和位置 如abc.uv2 选择单片机的CPU型号 如atmel公司的 89c524.新建源文件 file/new 5.输入源程序6.保存源文件 file/save as 选择保存的名称和位置,如abc.a517.将源文件加入项目中 source group 1 右键 选择“add file to group” 选择源文件 点击确定8.编译项目 rebuild all target files9.调试程序 单击start/stop debug session 进入程序调试状态10.单步执行程序,或者全速、断点执行程序 debug/step(go)11.查看执行结果 view/memory window address d:00h 内部RAM X:0000H 外部RAM C:0000H ROM 可以查看相应存储器内的内容 或者选择 view/watcha and call stack window 查看相应变量内容12.给相应单元赋值,并执行程序,记录执行结果,写出实验报告。给相应单元赋值方法:鼠标移动到相应单元,点击鼠标右键选择modify memory value输入新值。13.记录实验中遇到的问题和解决方法。软件实验二 排序/数制转换一、实验目的1熟练使用KEIL软件调试程序2掌握查询指令和循环程序的设计方法3掌握数据转换的程序设计方法4掌握有关循环程序和数据转换的程序的调试二、实验内容 1求8个无符号数的最大值给定8个无符号数,将其放内部数据区(DATA)中,地址从20H开始,运行下列程序,看看是否将8个数的最大值存储在A寄存器和内部数据区41H单元中。程序清单如下: ORG 00H SJMP START ORG 30HSTART: MOV R0, #20H MOV R6, #08H MOV A, R0 DEC R6LOOP: INC R0 MOV 40H,R0 CJNE A, 40H, CHK JMP DD1CHK: JNC SQMOV A, 40HSQ: DJNZ R6, LOOPDD1: MOV 41H, AHERE: SJMP HERE END附加功能:编程实现内部RAM20H-27H单元八个数从小到大排序2将一个字节BCD码转换成二进制数将R2 中的内容转换成二进制数据,并传送到20H 单元中。程序清单如下: ORG 00H AJMP START ORG 30HSTART: MOV R2, #99H ACALL DTOBHERE: SJMP HEREDTOB: MOV A, R2 ANL A, #0F0H SWAP A MOV B, #10 MUL AB MOV R3, A MOV A, R2 ANL A, #0FH ADD A, R3 MOV R3, A MOV 20H, A RET三、实验步骤要求:写出实验步骤并记录程序调试结果。硬件实验一 并行口的使用一、 实验目的1 熟悉单片机仿真实验箱XL600+使用方法2 学会使用XLISP向单片机烧录程序3 学会单片机并行口的使用方法二、 实验内容使用单片机的并行口P1接8路LED灯,通过程序控制轮流点亮8个灯。为0时灯亮,为1时灯灭。参考程序:ORG 0000H JMP MAIN ORG 0030H;*MAIN: MOV A,#0FEH ;赋初始值LOOP: MOV R0,#07H ;移动次数LOOPL: MOV P0,A MOV P2,A RL A ;左移 CALL DELAY DJNZ R0,LOOPL MOV R0,#07H ;移动次数LOOPR: MOV P0,A MOV P2,A RR A ;右移 CALL DELAY DJNZ R0,LOOPR JMP LOOP;*DELAY: MOV R6,#0FFH DEL: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL RETEND 三、 实验连线P1(JP44)-八路指示灯(JP32)四、 实验步骤1、 按下实验箱的电源开关,使得实验箱接通电源,此时实验箱XL600+上指示灯闪烁显示3次后熄灭。2、 连接实验连线 P1(JP44)-八路指示灯(JP32)3、 新建项目,新建文件,输入源程序,编译程序,生成*.hex文件。方法:在编译时选择project/options for target target1在生成hex前打“勾”,然后编译程序,编译成功后*.hex跟源程序在同一位置。4、 烧录程序方法:(1)打开lisp软件 (2)操作/检测编程器 显示编程器检测OK字样,表示编程器当前处于正常工作状态。 (3)打开*.hex文件 (4)选择智能一键通,完成*.hex文件烧录 5、烧录完成后,单片机自动执行程序,此时八路指示灯轮流点亮。如果不能正常显示请修改程序,直到能够正确显示实验现象。6、记录实验中遇到的问题及解决方案硬件实验二 定时计数器的使用一、 实验目的1 学习定时计数器的编程使用2 学习8位数码管的编程使用3 再次熟悉单片机仿真实验箱XL600+使用方法二、实验内容编程使用单片机的定时计数器定时1s钟,并通过8位数码管显示当前秒表的时间,分辨率为0.01s,控键K01第一次按下时, 启动开始计时,第二次按下时, 停止计时,第三次按下时, 归零。三、 实验连线p0口-数码管数据线(JP5)p2口-数码管显示位控制(JP8)p3.2口-控制按键K01(JP37.0)实验参考程序见编程实例F:单片机编程实例电子钟.计数器数码管8位秒表计时;* - 秒单位 - 数码管端口 - 缓冲区 - 计时BCD码值寄存器 *;* 十万位 P20 dis_buf7 sec_bcd7 *;* 万位 P21 dis_buf6 sec_bcd6 *;* 千位 P22 dis_buf5 sec_bcd5 *;* 百位 P23 dis_buf4 sec_bcd4 *;* 十位 P24 dis_buf3 sec_bcd3 *;* 个位(1.s) P25 dis_buf2 sec_bcd2 *;* 十分位(0.1s) P26 dis_buf1 sec_bcd1 *;* 百分位(0.01s) P27 dis_buf0 sec_bcd0 *CODE_SEG SEGMENTCODEDATA_SEG SEGMENT DATA STACK_SEGSEGMENTIDATARSEG DATA_SEGKEY_S: DS 1KEY_V: DS 1DIS_DIGIT: DS 1DIS_INDEX: DS 1SEC_BCD: DS 8; 秒计数值, BCD码KEY_TIMES: DS 1; K1 按下次数DIS_BUF: DS 8; 显示缓冲区RSEGSTACK_SEGSTACK:DS20K1BITP3.2;=CSEGAT0000HLJMPMAINCSEGAT0000BHLJMPTIMER0CSEGAT0001BHLJMPTIMER1;=RSEGCODE_SEGMAIN:USING0MOVSP,#(STACK-1)MOV P0,#0FFH; 初始化端口MOV P2,#0FFHMOV TMOD,#011H; MOV TH1,#0DCHCLR AMOV TL1,AMOV TH0,#0FCHMOV TL0,#017HLCALLCLR_TIME; 清零计时值MOV DIS_DIGIT,#07FH; 上电时选通P27数码管CLR AMOV DIS_INDEX,AMOV KEY_TIMES,AMOV KEY_V,#01HMOV IE,#08AH; 使能timer0, timer1中断SETB TR0CLR TR1MAIN_LP:LCALLSCAN_KEY; 键扫描JZ MAIN_LP; 无键返回MOVR7,#10; 延时10msLCALLDELAYMS; 延时去抖动LCALLSCAN_KEY; 再次扫描JZMAIN_LP; 无键返回MOV KEY_V,KEY_S; 保存键值LCALLPROC_KEY; 键处理SJMPMAIN_LP; 调回主循环;=CLR_TIME:CLR AMOV SEC_BCD,A; 清零所有计时值MOV SEC_BCD+01H,AMOV SEC_BCD+02H,AMOV SEC_BCD+03H,AMOV SEC_BCD+04H,AMOV SEC_BCD+05H,AMOV SEC_BCD+06H,AMOV SEC_BCD+07H,ALJMP UPDATE_DISBUF; 更新显示缓冲区;=SCAN_KEY:CLR AMOV KEY_S,AMOV C,K1; 读按键状态RLC AORL KEY_S,AMOV A,KEY_SXRL A,KEY_V; RET ;=PROC_KEY:MOV A,KEY_VJB ACC.0,END_PROC_KEYINC KEY_TIMESMOV A,KEY_TIMESCJNE A,#01H,PROC_KEY1SETB TR1; KEY_TIMES = 1,第一次按下K1, 启动开始计时 RETPROC_KEY1:MOV A,KEY_TIMESCJNE A,#02H,PROC_KEY2CLR TR1; KEY_TIMES = 2, 第二次按下K1, 停止计时RET PROC_KEY2:LCALLCLR_TIME; 第三次按下K1, 清零计时值CLR AMOV KEY_TIMES,A; 清零KEY_TIMESEND_PROC_KEY:RET ;=TIMER0:; 定时器0中断服程序, 用于数码管的动态扫描; DIS_INDEX - 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量; DIS_DIGIT - 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,;选通P2.0口数码管; DIS_BUF - 显于缓冲区基地址PUSH ACCPUSH PSWPUSH AR0MOV TH0,#0FCHMOV TL0,#017HMOV P2,#0FFH; 先关闭所有数码管MOV A,#DIS_BUF; 获得显示缓冲区基地址ADD A,DIS_INDEX; 获得偏移量MOV R0,A; R0 = 基地址 + 偏移量MOV A,R0; 获得显示代码MOV P0,A; 显示代码传送到P0口MOV P2,DIS_DIGIT; MOVA,DIS_DIGIT; 位选通值右移(P20=100度时,第四位才显示。 检测 DS18B20 状态: DS18B20正常显示:DS18B20 OK TEMP: 25.8 显示实际温 DS18B20不正常显示:DS18B20 ERROR TEMP: - 显示 主要功能: 一、查看温度报警值: K1 进入查看温度报警值状态。 LCD 1602 显示: LOOK ALERT CODE TH:028 TL:18 TH:028 高位报警值 *TL:18 低位报警值 K3 退出查看温度报警值状态。 二、设定温度报警值: K2 进入设定温度报警值状态? LCD 1602 显示:RESET ALERT CODE TH:028 TL:18 K1 : 设定值加(UP)、减(DOWN)方式选择键(默认为减少)K2 : TH值设定键 K3 : TL值设定键 K4 : 确定键 (退出设定状态) K2 或 K3 以减(DOWN)方式设定,当设定数值减到“0”时自动转换为加(UP)方 K2 或 K3 以加(UP)方式设定,当设定数值 TH=120、TL=99 时,设定数值均变为“0” K4 确定并退出设定温度报警值状态。 将设定的温度报警值自动存入 DS18B20 的 EEROM 中,可永久保存。 每次开机时自动从 DS18B20 的 EEROM 读出温度报警值。 ;三、报警状态的显示: 1、当实际温度大于 TH 的设定值时, LCD1602 显示: DS18B20 OK TEMP: 88.8 H 关闭继电器,蜂鸣器响,表示超温 2、当实际温度小于 TL 的设定值时,LCD1602 显示: DS18B20 OK TEMP: 18.8 被减数,则 JC CHULI1 ;借位标志位C=1,转 MOV A,TEMP_ZH SUBB A,TEMP_TL ;减数被减数,则 JC CHULI2 ;借位标志位C=1,转 MOV DPTR,#BJ5 CALL TEMP_BJ3 CLR RELAY ;继电器吸合 RET CHULI1: MOV DPTR,#BJ3 CALL TEMP_BJ3 SETB RELAY ;继电器关闭 CALL BEEP_BL RET CHULI2: MOV DPTR,#BJ4 CALL TEMP_BJ3 CALL BEEP_BL RET;-TEMP_BJ3: MOV A,#0CEH CALL WCOM MOV R1,#0 MOV R0,#2BBJJ3: MOV A,R1 MOVC A,A+DPTR CALL WDATA INC R1 DJNZ R0,BBJJ3 RETBJ3: DB HBJ4: DB LBJ5: DB !;=;显示温度标记子程序;=TEMP_BJ: MOV A,#0CBH CALL WCOM MOV DPTR,#BJ1 ;指针指到显示消息 MOV R1,#0 MOV R0,#2BBJJ1: MOV A,R1 MOVC A,A+DPTR CALL WDATA INC R1 DJNZ R0,BBJJ1 RETBJ1: DB 00H,C;=MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息 MOV A,#1 ;显示在第一行 CALL LCD_PRINT MOV DPTR,#M_OK2 ;指针指到显示消息 MOV A,#2 ;显示在第一行 CALL LCD_PRINT RETM_OK1: DB DS18B20 OK ,0M_OK2: DB TEMP: ,0;-MENU_ERROR: MOV DPTR,#M_ERROR1 ;指针指到显示消息1 MOV A,#1 ;显示在第一行 CALL LCD_PRINT MOV DPTR,#M_ERROR2 ;指针指到显示消息1 MOV A,#2 ;显示在第一行 CALL LCD_PRINT RETM_ERROR1: DB DS18B20 ERROR ,0M_ERROR2: DB TEMP: - ,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论