ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:44.18KB ,
资源ID:20321246      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20321246.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西南科技大学 单片机实验 程序代码Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

西南科技大学 单片机实验 程序代码Word格式文档下载.docx

1、 MOV R5,#05H MOV R6,#35H MOV R7,#21H ACALL DW_MUL AJMP $DW_MUL: MOV R1,#04HCLE: MOV R0,#00H INC R0 DJNZ R1,CLEMU: MOV A,R4 MOV B,R6 MUL AB MOV R0,A MOV A,B ADDC A,R0 MOV B,R7 MOV A,R5 DEC R0END实验三:设计并调试一个将双字节无符号二进制数转换为压缩BCD数的子程序。双字节无符号二进制数转换为压缩BCD数子程序 双字节无符号二进制数的地址放在R0中;存放转换结果(BCD数)的地址放在R1中。 双字节无符号二

2、进制数最大值为0FFFFH,对应的十进制数为65535,其压缩BCD编码表示为06H,55H,35H,所以转换结果应用3个字节存放。 Y=(D15D14D1D0) 2 = (02)+D15)2+D14) 2+) 2+D1) 2+D0) 2。Y0=(02)+D15,Y1= Y0+D14,Y2= Y1+D13,Y15= Y14+D0,Y= Y15。Y0|BCD =( (02)+D15)|BCD,Y1|BCD =( Y0+D14)|BCD, Y15 |BCD = ( Y14+D0)|BCDY |BCD =Y15|BCD 算法:1、Y=02、Y=Y2+Di (i =15,14,2,1,0)3、对Y进行

3、十进制调整4、重复2、3步16次 Y=Y2+Di可用Y=Y+Y+C实现(Di首先放在C中),考虑到Y存放在3个字节,应分别加3次,且要考虑每次加法产生的C。MOV SP,#60H MOV R1,#25H MOV R0,#20H MOV R0,#43H MOV R0,#4AH ACALL DW_BCDDW_BCD:DEC R0 MOV A,R0 MOV R6,A MOV A,R1 MOV R7,A MOV R2,#3CLEAR:CLR A MOV R1,A INC R1 DJNZ R2,CLEAR MOV R3,#16 CLR CYIWEI: MOV A,R6 MOV R0,A MOV A,R0

4、 RLC A MOV A,R7 MOV R1,AFANG: MOV A,R1 ADDC A,R1 DA A DJNZ R2,FANG DJNZ R3,YIWEIMOV R1,#25H MOV R0,#20H MOV R0,#0FFH INC R0 MOV R0,#0FFH ;20H 21H=FFH mov r1,#0efh ACALL DW_BCD AJMP $ DEC R0 MOV A,R0 MOV R6,A MOV A,R1 MOV R7,A ;R7=25h R6=20H MOV R2,#3 CLR A MOV R1,A INC R1 DJNZ R2,CLEAR;25H 26H 27H=0

5、0 MOV R3,#16 CLR C MOV A,R6 MOV R0,A MOV A,R0 RLC A MOV R0,A MOV A,R7 MOV R1,A ADDC A,R1 DA A;16进制到10 进制的转化 DJNZ R2,FANG DJNZ R3,YIWEI RET END实验四:利用外部中断输入引脚(中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。为便于实验观察和操作,设INT0和INT1中断

6、触发方式为边沿。步进电机的转动控制由外部中断的服务程序来实现。当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。 ORG 0000H LJMP RESET ORG 0003H ;外部中断0 服务程序入口 LJMP INT_EX0 ORG 000BH ;定时器/计数器0 溢出中断服务程序入口 RETI ORG 0013H ;外部中断1 服务程序入口 LJMP INT_EX1 ORG 001BH ;定时器/计数器1 溢出中断服务程序入口 ORG 0023H ;串行口中断服务程序入口 ORG 0040H ;复位处理程序 RESET: MOV SP, #67H SETB IT0

7、SETB IT1 SETB EX0 SETB EX1 MOV 30H,#11110111B CLR A ;累加器A清零 SETB EA MAIN: SJMP MAININT_EX0: ;使用INT0的中断服务程序控制步进电机正向步进 PUSH ACC MOV A,30H RR A ;累加器A的内容向右循环移位一位 MOV 30H,A MOV P1,A POP ACC RETI INT_EX1:使用INT1中断服务程序控制步进电机反向步进 RL A ;累加器A的内容向左循环移位一位 另一种实验方法: ORG 0000H ;复位入口 ORG 0003H ;外部中断0 服务程序入口 ORG 000B

8、H ; ORG 0013H ;外部中断1 服务程序入口 ORG 001BH ; ORG 0023H ;串行口中断服务程序入口 ORG 040H ;复位处理程序 MOV SP,#67H CLR A ;-使用INT0的中断服务程序控制步进电机正向步进 MOV R0,#00H ;正转至TABLE取码指针初值 ABC: MOV A, R0 ;至TABLE取码 MOV DPTR, #TABLE ;存表 MOVC A,A+DPTR ;取表代码 JZ INT_EX0 ;是否取到结束码(00H)? MOV P0, A ; 输出至P0,正转 INC R0 ;取下一个码 JMP ABC ;转至Z_M处,循环 -使

9、用INT1中断服务程序控制步进电机反向步进 MOV R0, #05 ;反转至TABLE取码指针初值 ABC1: MOVC A, A+DPTR ; JZ INT_EX1 ; MOV P0, 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 反转结束码 END ;程序结束实验五:利用定时/计数器测量电动机的转速。使用T1作

10、为定时器(定时时间为50毫秒),T0作为计数器(计数由电机测速电路产生的脉冲个数,每转4个脉冲),每1秒时间后,读出T0的值(读出后须将T0清0),将该值(速度值*4)显示到LCM显示器上(显示子程序/函数由实验库文件提供)。本次实验程序需要使用实验库文件(LCMDRV_12864.LIB)。该库中的子程序/函数占用单片机片内RAM中地址为18H20H的单元,因此实验程序不能使用这些单元。如果用汇编编写实验程序,必须先用$INCLUDE (LCMDRV_12864.INC )指令加载实验库头文件REFRESHDISP EQU 08H ;刷新显示标志SPEED_CNTH EQU 30H ;速度脉

11、冲计数高8位SPEED_CNTL EQU 31H ;速度脉冲计数低8位SECOND_CNT EQU 32H ;秒计数VAR_END EQU 32H ;最后一个字节变量的位置,STACK_INI EQU VAR_END+1 ;须保证足够的空间实验程序架构(汇编):$INCLUDE(LCMDRV_12864.INC) ;包含库程序定义 ORG 0000H ; LJMP RESET ORG 0003H ; RETI ORG 000BH ; ORG 0013H ; ORG 001BH ; LJMP INT_T1 ORG 0023H ; ORG 040H ; MOV SP,#60H ;设置栈底指针 MO

12、V R7,#00H ;初始化显示器(不显示光标) LCALL _LCM_Init SETB ET1 ;此处添加设置中断许可和优先的指令(ET1, PT1) SETB PT1 MOV TMOD,#00010110B ;定时/计数设置 MOV TH1,#3CH ;此处添加设置定时/计数器的指令(TMOD, THx, TLx) MOV TL1,#0B0H MOV TH0,#0 MOV TL0,#0 CLR REFRESHDISP ;清刷新显示标志 MOV SECOND_CNT,#20 ;启动内部定时 SETB TR1 SETB TR0 ;此处添加启动定时/计数的指令(TRx) SETB EA ;开中

13、断 JNB REFRESHDISP,$ ;判断是否需要刷新显示 MOV R7,#01H ;从第2行第8列开始显示速度值(5位数值) MOV R5,#07H MOV R2,SPEED_CNTH MOV R3,SPEED_CNTL CALL _LCM_DispUIntXY内部定时中断服务程序 *INT_T1: MOV TH1,#3CH ;此处添加重置定时常数的指令 MOV A,R7 ;此处添加保护现场内容的指令(如果有的话) PUSH ACC INC R7 CJNE R7,#20,LLEND ;判断一秒钟时间到的指令,没到时间则跳转恢复现场, MOV SPEED_CNTL, TL0 ;记录速度检测

14、计数(供主程序显示用) MOV SPEED_CNTH, TH0 MOV TL0, #00 ;速度检测计数归零 MOV TH0, #00 SETB REFRESHDISP ;设置刷新显示标志 (控制主程序刷新显示)LLEND: POP ACC ;此处添加恢复现场内容的指令(如果有的话) MOV R7,A RETI END实验六:利用8155实现并行I/O扩展。利用P1端口访问CAT24WC02(兼容AT24C02)。程序一: 使用8155实现对并行接口的扩展。利用8155的PA口输入D1区KEY组各按键的状态信息,然后将该状态信息通过单片机的P1口输出到D1区LED组显示。主程序在完成各项初始化

15、设置后,可进入一死循环,在该循环里面不断的读取8155 PA口的信息并将其输出到单片机的P1口。 AJMP MAIN MOV DPTR,#7F00H MOV A,#11110000B MOVX DPTR,A MOV DPTR,#07F01H MOVX A,DPTR MOV P1,A SJMP LOOP程序二:先将单片机内部RAM中30H37H单元的值复制到CAT24WC02中的00H07H单元。然后又将这8个数从CAT24WC02中复制到单片机内部RAM的40H47H单元中 CAT24WC02的器件地址:0A0HCAT24WC02芯片手册CAT24WCxxx.pdf实验七:利用ADC0809/

16、DAC0832实现模拟电压信号的采集与输出。使用T1作为定时器(定时时间为50毫秒),每1秒时间后,启动ADC0809转换,在转换结束后(触发外部中断)读出A/D转换值,将该值输出到DAC0832,并同时显示到LCM显示器上(显示子程序/函数由实验库文件提供)。主程序在完成对INT1和T1的设置后,可进入死循环(等待中断请求)。在T1的中断服务程序中需要使用一存储单元对T1的中断次数进行计数,当计数次数达20次时,意味着定时1秒时间到(参见实验五),此时才启动一次AD转换(通过向ADC0809的一次写操作实现)。AD转换的结束信号作为中断请求(INT1)。在对该中断的响应和服务时,才读出本次A

17、D转换的结果值,该值又作为DA转换的值(向DAC0832写)。为便于理解,数值在显示前应进行BCD转换(库文件自动完成转换)。$INCLUDE(LCMDRV_12864.INC) ;AD_VAL EQU 30H ;AD转换结果值SECOND_CNT EQU 31H ;VAR_END EQU 31H ;STACK_INI EQU VAR_END+1 ;须保证足够的空间 ORG 0000H ; ORG 0003H ; ORG 000BH ; ORG 0013H ; LJMP INT_INT1 ORG 001BH ; LJMP INT_T1 ORG 0023H ; ORG 0040H ; MOV S

18、P,#STACK_INI ;设置栈底指针 LCALL _LCM_Init SETB IT1 ;脉冲触发方式 SETB ET1 SETB EX1 SETB PT1 ;定时/计数器高级中断 CLR PX1 MOV TMOD,#00010000B MOV TH1,#3CH MOV TL1,#0B0H ;设置定时/计数器的指令(TMOD, TH1, TL1) MOV R6,#0 CLR REFRESHDISP ; MOV SECOND_CNT,#20 SETB TR1 JNB REFRESHDISP,$ ; MOV R7,#01H ;从第2行第8列开始显示转换值(5位数值) MOV R2,#00H ;转换值扩展成16位 MOV R3,AD_VALINT_INT1: PUSH ACC MOV DPTR,#3C00H ;此处添加读A/D转换结果的指令 MOV AD_VAL,A ;保存转换结果(供主程序显示用) MOV DPTR,#3800H MOVX DPTR,A ;此处添加启动D/A转换的指令设置刷新显示标志 (刷新显示由主程序完成) POP ACC 此处添加重置定时常数的指令 INC R6 CJNE R6,#20,LL1 ;判断一秒钟时间到的指令, 没到恢复现场, MOV DPTR,#3C00H此处添加启动A/D转换的指令LL1:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1