![西南科技大学 单片机实验 程序代码_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/2cd20745-e38a-42e6-933c-6e172e37d5ac/2cd20745-e38a-42e6-933c-6e172e37d5ac1.gif)
![西南科技大学 单片机实验 程序代码_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/2cd20745-e38a-42e6-933c-6e172e37d5ac/2cd20745-e38a-42e6-933c-6e172e37d5ac2.gif)
![西南科技大学 单片机实验 程序代码_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/2cd20745-e38a-42e6-933c-6e172e37d5ac/2cd20745-e38a-42e6-933c-6e172e37d5ac3.gif)
![西南科技大学 单片机实验 程序代码_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/2cd20745-e38a-42e6-933c-6e172e37d5ac/2cd20745-e38a-42e6-933c-6e172e37d5ac4.gif)
![西南科技大学 单片机实验 程序代码_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/2cd20745-e38a-42e6-933c-6e172e37d5ac/2cd20745-e38a-42e6-933c-6e172e37d5ac5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 功能:使连接在MCS-51单片机P1.0引脚的LED闪烁。设计思路:开始让P1端口初值为11111111BP1.0求反软件延时图2.1 实验一程序流程图 点亮LED需要约10 mA电流,此时LED两端电压差约2 V。因此,将LED的阴极通过一个电阻连接到P1.0引脚(电阻阻值约为200 W),阳极连接到电源VCC(5 V)。 为便于观察,交替的时间间隔不应太小(建议选择在0.5 s左右),由于该时间不要求严格精确,所以,可采用软件延时的方法实现。 程序可采用图2.1中的流程结构。ORG 0000HAJMP STARTORG 0030HSTART:MOV P1,#0FFHLOOP:CPL
2、 P1.0ACALL DELAYAJMP LOOPDELAY:MOV R0,#99DL2:MOV R1,#99DL1:NOPNOPDJNZ R1,DL1DJNZ R0,DL2RETEND实验二 设计并调试一个双字节无符号数乘法子程序。功能:双字节无符号数乘法子程序。入口参数:被乘数放在R7(高)和R6(低);乘数放在R5(高)和R4(低);积(片内RAM中的连续4字节)的首地址放在R0中。设计思路:图2.1 双字节无符号乘法示意图积R6 ´ R4BAR5R4R6 ´ R5R7 ´ R5R7 ´ R4+´低字节高字节R7R6BABABAM1M0M
3、3M2由于MCS-51指令集中只有单字节无符号数乘法指令,因此需要将双字节无符号数相乘变换成4次单字节无符号数相乘,才能利用乘法指令实现双字节无符号数乘法计算。变换方法如图2.1所示。MCS-51指令集中乘法指令的结果是固定存放在A和B中的,因此每次乘法操作后都须将结果保存在积中。所以应首先将积的初值置0且在每次乘法指令结束后需要进行2次加操作,分别将A和B加到积的对应位置(注意:在两次加法之间要考虑进位)。ORG0000HAJMPSTARTADREQU20HORG0030HSTART:MOVR0,#ADRMOVR4,#14HMOVR5,#05HMOVR6,#35HMOVR7,#21HACAL
4、LDW_MULAJMP$DW_MUL:MOVR1,#04HCLE:MOVR0,#00HINCR0DJNZR1,CLEMOVR0,#ADRMU:MOVA,R4MOVB,R6MULABMOVR0,AMOVA,BINCR0ADDCA,R0MOVR0,AMOVA,R4MOVB,R7MULABADDCA,R0MOVR0,AMOVA,BINCR0ADDCA,R0MOVR0,AMOVA,R5MOVB,R6MULABDECR0ADDCA,R0MOVR0,AMOVA,BINCR0ADDCA,R0MOVR0,AMOVA,R5MOVB,R7MULABADDCA,R0MOVR0,AMOVA,BINCR0ADDCA,R
5、0MOVR0,ARETEND实验三:设计并调试一个将双字节无符号二进制数转换为压缩BCD数的子程序。功能:双字节无符号二进制数转换为压缩BCD数子程序入口参数:双字节无符号二进制数的地址放在R0中;存放转换结果(BCD数)的地址放在R1中。设计思路: 双字节无符号二进制数最大值为0FFFFH,对应的十进制数为65535,其压缩BCD编码表示为06H,55H,35H,所以转换结果应用3个字节存放。 Y=(D15D14D1D0) 2 = (0´2)+D15)´2+D14) ´2+) ´2+D1) ´2+D0) 2。Y0=(0´2)+D15
6、,Y1= Y0+D14,Y2= Y1+D13,Y15= Y14+D0,Y= Y15。Y0|BCD =( (0´2)+D15)|BCD,Y1|BCD =( Y0+D14)|BCD, Y15 |BCD = ( Y14+D0)|BCDY |BCD =Y15|BCD 算法:1、Y=02、Y=Y´2+Di(i =15,14,2,1,0)3、对Y进行十进制调整4、重复2、3步16次Y=Y´2+Di可用Y=Y+Y+C实现(Di首先放在C中),考虑到Y存放在3个字节,应分别加3次,且要考虑每次加法产生的C。ORG0000HAJMPSTARTORG0030HSTART:MOVSP,
7、#60HMOVR1,#25HMOVR0,#20HMOVR0,#43HINCR0MOVR0,#4AHACALLDW_BCDAJMP $DW_BCD:DECR0MOVA,R0MOVR6,AMOVA,R1MOVR7,AMOVR2,#3CLEAR:CLRAMOVR1,AINCR1DJNZR2,CLEARMOVR3,#16CLRCYIWEI:MOVA,R6MOVR0,AMOVA,R0RLCAMOVR0,AINCR0MOVA,R0RLCAMOVR0,AMOVR2,#3MOVA,R7MOVR1,AFANG:MOVA,R1ADDCA,R1DAAMOVR1,AINCR1DJNZR2,FANGDJNZR3,YIW
8、EIRETENDMOV R1,#25HMOV R0,#20HMOV R0,#0FFHINC R0MOV R0,#0FFH ;20H 21H=FFHmov r1,#0efhACALL DW_BCDAJMP $DW_BCD:DEC R0 MOV A,R0MOV R6,AMOV A,R1MOV R7,A ;R7=25h R6=20HMOV R2,#3CLEAR:CLR AMOV R1,AINC R1DJNZ R2,CLEAR;25H 26H 27H=00MOV R3,#16CLR CYIWEI:MOV A,R6MOV R0,AMOV A,R0RLC AMOV R0,AINC R0MOV A,R0RL
9、C AMOV R0,AMOV A,R7MOV R1,AMOV R2,#3FANG: MOV A,R1ADDC A,R1DA A;16进制到10 进制的转化 MOV R1,AINC R1DJNZ R2,FANGDJNZ R3,YIWEIRETEND实验四:利用外部中断输入引脚(中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。设计思路: 主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。 为便于实验观察和操作,设INT0和INT1中断触发方式为边沿。 步进电
10、机的转动控制由外部中断的服务程序来实现。 当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。ORG0000HLJMPRESETORG0003H;外部中断0 服务程序入口LJMPINT_EX0ORG000BH;定时器/计数器0 溢出中断服务程序入口 RETIORG0013H;外部中断1 服务程序入口LJMPINT_EX1ORG001BH;定时器/计数器1 溢出中断服务程序入口 RETIORG0023H;串行口中断服务程序入口RETIORG0040H;复位处理程序RESET:MOVSP,#67HSETBIT0 SETBIT1 SETBEX0 SETBEX1 MOV30H,#1
11、1110111B CLRA ;累加器A清零SETBEA MAIN:SJMPMAININT_EX0:;使用INT0的中断服务程序控制步进电机正向步进PUSHACC MOVA,30H RRA ;累加器A的内容向右循环移位一位MOV30H,A MOVP1,A POPACC RETI INT_EX1:;使用INT1中断服务程序控制步进电机反向步进PUSHACC MOVA,30H RLA ;累加器A的内容向左循环移位一位MOV30H,A MOVP1,A POPACC RETI END另一种实验方法:ORG0000H;复位入口LJMPRESETORG0003H;外部中断0 服务程序入口LJMPINT_EX
12、0ORG000BH;定时器/计数器0 溢出中断服务程序入口 RETIORG0013H;外部中断1 服务程序入口LJMPINT_EX1ORG001BH;定时器/计数器1 溢出中断服务程序入口 RETIORG0023H;串行口中断服务程序入口RETIORG040H;复位处理程序RESET:MOVSP,#67H SETBIT0 SETBIT1 SETBEX0 SETBEX1 MOV30H,#11110111B CLRA SETBEA MAIN:SJMPMAIN;-使用INT0的中断服务程序控制步进电机正向步进INT_EX0:MOV R0,#00H ;正转至TABLE取码指针初值 ABC: MOV A
13、, R0 ;至TABLE取码 MOV DPTR, #TABLE ;存表 MOVC A,A+DPTR ;取表代码 JZ INT_EX0 ;是否取到结束码(00H)? MOV P0, A ; 输出至P0,正转 INC R0 ;取下一个码 JMP ABC ;转至Z_M处,循环 RETI;-使用INT1中断服务程序控制步进电机反向步进INT_EX1:MOV R0, #05 ;反转至TABLE取码指针初值 ABC1: MOV A, R0 ;至TABLE取码 MOV DPTR, #TABLE ;存表 MOVC A, A+DPTR ;取表代码 JZ INT_EX1 ;是否取到结束码(00H)? MOV P0
14、, A ; 输出至P0, 反转 INC R0 ;取下一个码 JMP ABC1 ; 转至F_M1处,循环 RETI ;反转子程序 TABLE: DB 0FCH, 0F9H, 0F3H, 0F6H ;正转 DB 00H ;正转结束码 DB 0F7H, 0F3H, 0FBH, 0F9H ; 反转 DB 0FDH, 0FCH, 0FEH, 0F6H DB 00H ;反转结束码 END ;程序结束实验五:利用定时/计数器测量电动机的转速。使用T1作为定时器(定时时间为50毫秒),T0作为计数器(计数由电机测速电路产生的脉冲个数,每转4个脉冲),每1秒时间后,读出T0的值(读出后须将T0清0),将该值(速
15、度值*4)显示到LCM显示器上(显示子程序/函数由实验库文件提供)。本次实验程序需要使用实验库文件(LCMDRV_12864.LIB)。该库中的子程序/函数占用单片机片内RAM中地址为18H20H的单元,因此实验程序不能使用这些单元。如果用汇编编写实验程序,必须先用$INCLUDE (LCMDRV_12864.INC )指令加载实验库头文件REFRESHDISPEQU08H;刷新显示标志SPEED_CNTHEQU30H;速度脉冲计数高8位SPEED_CNTLEQU31H;速度脉冲计数低8位SECOND_CNTEQU32H;秒计数VAR_ENDEQU32H;最后一个字节变量的位置,STACK_I
16、NIEQUVAR_END+1;须保证足够的空间实验程序架构(汇编):$INCLUDE(LCMDRV_12864.INC);包含库程序定义ORG0000H;复位入口LJMPRESETORG0003H;外部中断0 服务程序入口RETIORG000BH;定时器/计数器0 溢出中断服务程序入口 RETIORG0013H;外部中断1 服务程序入口RETIORG001BH;定时器/计数器1 溢出中断服务程序入口 LJMPINT_T1ORG0023H;串行口中断服务程序入口RETIORG040H;复位处理程序RESET:MOVSP,#60H;设置栈底指针MOVR7,#00H;初始化显示器(不显示光标)LCA
17、LL_LCM_InitSETBET1;此处添加设置中断许可和优先的指令(ET1, PT1)SETBPT1MOVTMOD,#00010110B;定时/计数设置 MOVTH1,#3CH;此处添加设置定时/计数器的指令(TMOD, THx, TLx)MOVTL1,#0B0HMOVTH0,#0MOVTL0,#0CLRREFRESHDISP;清刷新显示标志MOVSECOND_CNT,#20;启动内部定时SETBTR1SETBTR0;此处添加启动定时/计数的指令(TRx)SETBEA;开中断 MAIN:JNBREFRESHDISP,$;判断是否需要刷新显示CLRREFRESHDISP;清刷新显示标志MOV
18、R7,#01H;从第2行第8列开始显示速度值(5位数值)MOVR5,#07HMOVR2,SPEED_CNTHMOVR3,SPEED_CNTLCALL_LCM_DispUIntXYSJMPMAIN;内部定时中断服务程序 *INT_T1:MOVTH1,#3CH;此处添加重置定时常数的指令MOVTL1,#0B0HMOVA,R7;此处添加保护现场内容的指令(如果有的话)PUSHACCINCR7CJNER7,#20,LLEND;判断一秒钟时间到的指令,没到时间则跳转恢复现场,MOVSPEED_CNTL, TL0;记录速度检测计数(供主程序显示用)MOVSPEED_CNTH, TH0MOVTL0, #00
19、;速度检测计数归零MOVTH0, #00SETBREFRESHDISP;设置刷新显示标志 (控制主程序刷新显示)LLEND:POPACC;此处添加恢复现场内容的指令(如果有的话)MOVR7,ARETIEND实验六:利用8155实现并行I/O扩展。 利用P1端口访问CAT24WC02(兼容AT24C02)。程序一: 使用8155实现对并行接口的扩展。利用8155的PA口输入D1区KEY组各按键的状态信息,然后将该状态信息通过单片机的P1口输出到D1区LED组显示。主程序在完成各项初始化设置后,可进入一死循环,在该循环里面不断的读取8155 PA口的信息并将其输出到单片机的P1口。ORG0000H
20、AJMPMAINORG0030HMAIN:MOVDPTR,#7F00HMOVA,#11110000BMOVXDPTR,ALOOP:MOVDPTR,#07F01HMOVXA,DPTRMOVP1,ASJMPLOOPEND程序二:先将单片机内部RAM中30H37H单元的值复制到CAT24WC02中的00H07H单元。然后又将这8个数从CAT24WC02中复制到单片机内部RAM的40H47H单元中 CAT24WC02的器件地址:0A0H CAT24WC02芯片手册CAT24WCxxx.pdf实验七:利用ADC0809/DAC0832实现模拟电压信号的采集与输出。使用T1作为定时器(定时时间为50毫秒)
21、,每1秒时间后,启动ADC0809转换,在转换结束后(触发外部中断)读出A/D转换值,将该值输出到DAC0832,并同时显示到LCM显示器上(显示子程序/函数由实验库文件提供)。本次实验程序需要使用实验库文件(LCMDRV_12864.LIB)。该库中的子程序/函数占用单片机片内RAM中地址为18H20H的单元,因此实验程序不能使用这些单元。如果用汇编编写实验程序,必须先用$INCLUDE (LCMDRV_12864.INC )指令加载实验库头文件设计思路: 主程序在完成对INT1和T1的设置后,可进入死循环(等待中断请求)。 在T1的中断服务程序中需要使用一存储单元对T1的中断次数进行计数,
22、当计数次数达20次时,意味着定时1秒时间到(参见实验五),此时才启动一次AD转换(通过向ADC0809的一次写操作实现)。 AD转换的结束信号作为中断请求(INT1)。在对该中断的响应和服务时,才读出本次AD转换的结果值,该值又作为DA转换的值(向DAC0832写)。 为便于理解,数值在显示前应进行BCD转换(库文件自动完成转换)。$INCLUDE(LCMDRV_12864.INC);包含库程序定义REFRESHDISPEQU08H;刷新显示标志AD_VALEQU30H;AD转换结果值SECOND_CNTEQU31H;秒计数VAR_ENDEQU31H;最后一个字节变量的位置,STACK_INIEQUVAR_END+1;须保证足够的空间ORG0000H;复位入口LJMPRESETORG0003H;外部中断0 服务程序入口RETIORG000BH;定时器/计数器0 溢出中断服务程序入口 RETIORG0013H;外部中断1 服务程序入口LJMPINT_INT1ORG001BH;定时器/计数器1 溢出中断服务程序入口 LJMPINT_T1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 5 We're family (说课稿)-2024-2025学年外研版(三起)(2024)英语三年级上册
- 1《学习伴我成长》(说课稿)-部编版道德与法治三年级上册
- Unit 2 Different families Part B Let's talk(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2《用水计量时间》说课稿-2024-2025学年科学五年级上册教科版
- 2025产品购销合同样书
- 2023九年级数学下册 第25章 投影与视图25.1 投影第2课时 正投影说课稿 (新版)沪科版001
- 2025城市民用户燃气工程实施合同书范本范文
- 2025妇女发展监测评估项目工程合同管理
- 2025合同模板合伙人利润分配协议范本
- 2024-2025学年高中政治 第3单元 第6课 第1框 源远流长的中华文化说课稿 新人教版必修3001
- 2025年上半年中煤科工集团北京华宇工程限公司中层干部公开招聘易考易错模拟试题(共500题)试卷后附参考答案
- 特朗普就职演说全文与核心要点
- 2025年教科版新教材科学小学一年级下册教学计划(含进度表)
- 北京市海淀区2024-2025学年五年级上册语文期末试卷(有答案)
- 《中国地方戏曲简介》课件
- 《亚太经合组织》课件
- 2024年高考政治必修三《政治与法治》常考材料题考点梳理汇编
- 《会展概述》课件
- 《郴州市总体规划》课件
- 【高中物理竞赛大全】 竞赛3 电磁学 50题竞赛真题强化训练解析版-高考物理备考复习重点资料归纳
- 再见2024你好2025展望未来
评论
0/150
提交评论