### 电机测速程序知识点详解 #### 一、程序概述 本程序为一个电机测速程序,采用汇编语言编写,适用于对电机转速进行实时测量的应用场景。该程序通过定时器中断的方式实现数据采集,并利用外部接口进行数据输出显示。 #### 二、程序结构分析 1. **程序入口与跳转**: - `ORG 0000H`:设置程序起始地址为0x0000。 - `AJMP MAIN`:跳转到主程序`MAIN`处执行。 2. **定时器中断处理**: - `ORG 001BH`:设置定时器1中断向量地址。 - `AJMP INT_1`:跳转到中断服务子程序`INT_1`。 3. **主程序初始化**: - `MAIN:`:主程序起始位置。 - `MOV SP, #60H`:设置堆栈指针SP。 - `MOV R0, #0`:初始化寄存器R0。 - `MOV DPTR, #0B000H`:设置数据指针DPTR指向外部RAM的0x0832地址。 - `MOV TMOD, #15H`:设置定时器模式寄存器TMOD,定时器1工作于模式2,定时器0关闭。 - `MOV TH1, #4BH`:设置定时器1的重载值高8位。 - `MOV TL1, #0FDH`:设置定时器1的重载值低8位。 - `MOV R1, #20`:初始化寄存器R1。 - `MOV TH0, #0`:定时器0的初值为0。 - `MOV TL0, #0`:定时器0的初值为0。 - `SETB ET1`:允许定时器1中断。 - `SETB EA`:开总中断。 - `SETB TR1`:启动定时器1。 - `SETB TR0`:启动定时器0。 4. **主循环逻辑**: - `UP:`:主循环开始。 - `MOVA, R0`:将R0的值送入A寄存器。 - `MOVX @DPTR, A`:将A寄存器中的值写入DPTR所指向的地址(加速操作)。 - `ACALL DELAY`:调用延时子程序。 - `INC R0`:增加R0的值。 - `CJNE R0, #0FFH, UP`:若R0不等于0xFF,则继续执行循环,否则转向减速循环。 - `DOWN:`:减速循环。 - `MOVA, R0`:将R0的值送入A寄存器。 - `MOVX @DPTR, A`:将A寄存器中的值写入DPTR所指向的地址(减速操作)。 - `ACALL DELAY`:调用延时子程序。 - `DJNZ R0, DOWN`:若R0不等于0,则继续执行循环,否则返回加速循环。 5. **定时器中断服务程序**: - `INT_1:`:定时器1中断服务子程序。 - `MOV TH1, #48H`:重新加载定时器1的高8位值。 - `MOV TL1, #0FDH`:重新加载定时器1的低8位值。 - `DJNZ R1, EXIT`:若R1不为0,则执行以下操作;否则退出中断。 - `MOVR1, #20`:重置R1的值。 - `PUSH ACC`:保存累加器值。 - `PUSH DPH`:保存DPTR的高8位。 - `PUSH DPL`:保存DPTR的低8位。 - `MOVA, TL0`:将定时器0的低8位值送入A寄存器。 - `MOV TL0, #0`:定时器0的低8位清零。 - `MOVB, #10`:设定除法器除数为10。 - `DIV AB`:进行除法运算。 - `XCH A, B`:交换A和B的值。 - `MOV DPTR, #TAB`:设置表格地址。 - `MOV C, @A + DPTR`:查表取值。 - `MOVR4, #8`:设置循环次数。 - `ACALL S164`:调用显示子程序。 - `MOVA, B`:将B寄存器的值送入A寄存器。 - `MOV C, @A + DPTR`:查表取值。 - `MOVR4, #8`:设置循环次数。 - `ACALL S164`:调用显示子程序。 - `CLR C`:清除进位标志位。 - `MOVA, #0`:将A寄存器的值清零。 - `MOVR4, #16`:设置循环次数。 - `ACALL S164`:调用显示子程序。 - `POP DPL`:恢复DPTR的低8位。 - `POP DPH`:恢复DPTR的高8位。 - `POP ACC`:恢复累加器值。 - `EXIT:`:退出中断。 - `RETI`:中断返回。 6. **延时子程序**: - `DELAY:`:延时子程序。 - `MOVR6, #200`:初始化循环计数器R6。 - `DEL:`:延时循环开始。 - `MOVR7, #229`:初始化循环计数器R7。 - `DJNZ R7, $`:递减并判断R7是否为0,不为0则循环。 - `DJNZ R6, DEL`:递减并判断R6是否为0,不为0则循环。 - `RET`:返回主程序。 7. **显示子程序**: - `S164:`:显示子程序。 - `RRCA`:将A寄存器的值循环右移一位。 - `MOVP1.0, C`:根据循环移位后的最低位控制P1.0口状态。 - `CLR P1.1`:清空P1.1口状态。 - `SETB P1.1`:设置P1.1口状态。 - `DJNZ R4, S164`:递减并判断R4是否为0,不为0则循环。 - `RET`:返回主程序。 8. **数据表格**: - `TAB:`:数据表格。 - 数据表格存储了用于显示的数字对应的段码值,便于在LED上显示数字。 9. **程序结束标志**: - `END`:程序结束。 #### 三、程序关键知识点解析 1. **定时器工作模式**: - 定时器1配置为模式2,具有自动重装功能,适合用于频繁的定时任务。 2. **中断处理机制**: - 使用定时器1中断作为主要的数据采集方式,每发生一次中断就更新定时器0的计数值,从而计算电机转速。 3. **外部接口数据输出**: - 通过DPTR指向的外部RAM地址实现数据输出,可以是LED显示器或者其他外部设备。 4. **转速计算方法**: - 通过定时器0的计数值变化来间接计算电机转速。当计数值达到一定阈值时,触发中断,读取当前计数值,然后通过公式计算出实际转速。 5. **硬件资源管理**: - 本程序合理地利用了微控制器的内部资源,如定时器、中断等,同时也对外部接口进行了有效的管理,确保了系统的稳定运行。 通过以上分析可以看出,该电机测速程序实现了对电机转速的精确测量,其核心在于通过对定时器的巧妙配置以及对外部接口的有效管理,使得整个系统能够准确高效地完成任务。这对于理解嵌入式系统中的硬件资源管理以及软件设计具有重要的参考价值。
- xuwenchaoqq2012-08-13有G洗了的吗 写的也不够纤细 希望继续努力
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ssm网络教学平台的设计与实现+vue.zip
- 电网管理中的分层决策 matlab源代码,代码按照高水平文章复现,保证正确 由于可再生能源发电、可变需求和计划外停电等因素的影响,电网管理是一个多时间尺度决策和随机行为的难题 在面对不确定性的情况下
- ssm四六级报名与成绩查询系统+jsp.zip
- ssm铁岭河医院医患管理系统+vue.zip
- ssm田径运动会成绩管理系统的设计与实现+vue.zip
- ssm实验室开放管理系统+jsp.zip
- ssm蜀都天香酒楼的网站设计与实现+jsp.zip
- ssm视频点播系统设计与实现+vue.zip
- ssm神马物流+vue.zip
- ssm实验室耗材管理系统设计与实现+jsp.zip
- ssm生活缴费系统及相关安全技术的设计与实现+jsp.zip
- ssm人事管理信息系统+jsp.zip
- ssm社区管理与服务的设计与实现+jsp.zip
- ssm社区文化宣传网站+jsp.zip
- Dell EMC Unity-Unisphere CLI Guide
- ssm汽车养护管理系统+jsp.zip