bcs转10 c语言,小弟刚学习C语言,怎么把下段汇编代码转化为C语言程序,请高手指教!!!单片机89c52...
已结贴√
问题点数:20 回复次数:3
小弟刚学习C语言,怎么把下段汇编代码转化为C语言程序,请高手指教!!!单片机89c52
BIT_COUNT DATA 07FH
TIMER0 DATA 07EH
TIMER DATA 048H
DATA_OUT DATA 021H
TEN1 DATA 022H
TEN2 DATA 023H
DAT BIT P2.0
CLK BIT P2.1
CS BIT P2.2
KEY BIT P2.3
ORG 000H
LJMP MAIN
ORG 0060H
MAIN: CLR RS0 ;粗略测量转速。
CLR RS1
MOV R1, #40H
MOV R2, #14H
MOV 38H, #00H
MOV 39H, #00H
MOV TMOD, #15H ;设定T0,T1的工作方式:T0为计数方
MOV TL0, #00H 式,对P3.4输入脉冲信号进行计数,T1为
MOV TH0, #00H 定时/计数器都以方式1工作。
MOV TL1, #00H
MOVTH1,#4CH CLR EA
JB P3.4, $ ;等待信号变低。
SETB TR1 ;开始定时。
SETB TR0 ;开始计数。
M1: JBC TF1, M2 ;T1定时溢出。
SJMP M1
M2: MOV TL1, #00H ;T1溢出20次即定时1s。
MOV TH1, #4CH
DJNZ R2, M1
CLR TR0 ;停止定时、计数。
CLR TR1
CYC: CLR RS0 ;测周期法测转速。
CLR RS1
MOV R1,#40H
MOV TMOD, #90H ;设定定时/计数器的工作方式:T1
MOV TH1, #00H 为定时方式,工作方式1,由P3.3
MOV TL1, #00H 和TR1共同控制计数的启动和停止。
C0: JB P3.3, C0
SETB TR1
C1: JNB P3.3,C1
C2: JB P3.3, C2
CLR TR1
SAMP1: MOV A, R4 ;采样程序。
RL A
ADD A, R1
MOV R1, A
MOV @R1, TH1
INC R1
MOV @R1, TL1
INC R4
SAM1: CJNE R4, #04H, CYC
MOV R4, #00H
MOV SP,#50H
LCALL APIG ;调用滤波程序。
NDIV1: SETB RS1 ;多字节除法程序,将所测周期转换
SETB RS0 成转速。
MOV R2, #00H
MOV R3, #0D2H
MOV R4, #0F0H
MOV R5, #00H
MOV R6, 38H
MOV R7, 39H
MOV A, R3
CLR C
SUBB A, R7
MOV A, R2
SUBB A, R6
JNC NDVE1
MOV B, #10H
NDVL1: CLR C
MOV A, R5
RLC A
MOV R5, A
MOV A, R4
RLC A
MOV R4, A
MOV A, R3
RLC A
MOV R3, A
MOV A, R2
RLC A
MOV R2, A
MOV F0, C
CLR C
MOV A, R3
SUBB A, R7
MOV R1, A
MOV A, R2
SUBB A, R6
JB F0, NDVM1
JC NDVD1
NDVM1: MOV R2, A
MOV A, R1
MOV R3, A
INC R5
NDVD1: DJNZ B, NDVL1
CLR F0
MOV 38H, R4
MOV 39H, R5
CLR RS0
LJMP DISPLAY
NDVE1: SETB F0
RET
FRE: CLR RS0 ;频率法测转速。
CLR RS1
MOV R4, #00H
MOV TMOD, #15H
MOV TL0, #00H
MOV TH0, #00H
MOV TL1, #00H
MOVTH1,#4CH CLR EA
JB P3.4, $
SETB TR1
SETB TR0
F1: JBC TF1, F2
SJMP F1
F2: MOV TL1, #00H
MOV TH1, #4CH
DJNZ R2, F1
CLR TR0
CLR TR1
SAMP2: MOV A, R4
RL A
ADD A, R1
MOV R1, A
MOV @R1, TH0
INC R1
MOV @R1, TL0
INC R4
SAM2: CJNE R4, #04H, FRE
MOV R4, #00H
MOV SP,#50H
CALL APIG
JMP DISPLAY
APIG: SETB RS0 ;滤波程序。
CLR A
MOV R2, A
MOV R3, A
MOV R6, A
MOV R7, A
MOV R4, #0FFH ;各值进行初始化。
MOV R5, #0FFH
MOV TIMER, #04H
API1: LCALL LOADX
SETB RS0
MOV R1, A
ADD A, R7 ;累加输入值。
MOV R7, A
MOV A, B
ADDC A, R6
MOV R6, A
CLR C ;输入值与最大值R2R3比较。
MOV A, R3
SUBB A, R1
MOV A, R2
SUBB A, B
JNC API2
MOV A, R1 ;输入值大于最大值。
MOV R3, A
MOV R2, B
API2: CLR C ;输入值与最小值作比较。
MOV A, R1
SUBB A, R5
MOV A, B
SUBB A, R4
JNC API3
MOV A, 1
MOV R5, A
MOV R4, B
API3: DJNZ TIMER, API1
CLR C
MOV A, R7 ;累加和中减去最大值。
SUBB A, R3
XCH A, R6
SUBB A, R2
XCH A, R6 ;累加和中减去最小值。
SUBB A, R5
XCH A, R6
SUBB A, R4
CLR C
RRC A ;求平均值,将平均值存入38H,39H。
XCH A, R6
RRC A
MOV R7, A
MOV 39H, R7
MOV 38H, R6
MOV 3BH,39H ;将本次测量值作为下次的比较值。
MOV 3AH,38H
CLR RS0
MOV R4, #00H
RET
LOADX: CLR RS0 ;调用数据程序。
MOV R1, #40H
MOV A, R4
RL A
ADD A, R1
MOV R1, A
MOV A,@R1
MOV B, A
INC R1
MOV A,@R1
INC R4
RET
DISPLAY: CLR RS0
SETB RS1
MOV R0, #30H ;显示程序。
MOV TEN1, #11001100B
MOV TEN2, #05H
MOV P1, #0FFH
MOV P2, #0CBH ;I/O初始化。(0CBH)
START_DELAY0: MOV DATA_OUT, #0A4H ;复位指令。
CALL SEND
SETB CS ;恢复CS为高电平。
LCALL BD ;调用16进制——BCD码
MOV R0, #30H 转换。
MOV A, R6
LCALL PTDS
MOV A, 30H
XCH A, 31H
MOV 30H, A
MOV A, R5
LCALL PTDS
MOV A, 32H
XCH A, 33H
MOV 32H, A
MOV A, R4
LCALL PTDS
MOV A, 34H
XCH A, 35H
MOV 34H, A
MOV R0, #31H
CJNE @R0, #00H, DIS1 ;判断显示数字的位数。
MOV R0, #32H
CJNE @R0, #00H, DIS2
MOV R0, #33H
MOV TEN1, #11001010B ;显示数字为百位数,
MOV TEN2, #03H 方式1译码第百、十、个位。
JMP START_DELAY1
DIS1: MOV TEN1,#11001100B ;显示数字为万位数,方式1译码
MOV TEN2,#05H 第万、千、百、十、个位。
JMP START_DELAY1
DIS2: MOV TEN1,#11001011B ;显示数字为千位数,方式1译码
MOV TEN2,#04H 第千、百、十、个位。
START_DELAY1: MOV DATA_OUT,TEN1
CALL SEND
MOV DATA_OUT,@R0
CALL SEND
START_DELAY2: SETB CS
INC R0
DEC TEN1
DJNZ TEN2, START_DELAY1
SETB CS
LJMP MAIN
SEND: MOV BIT_COUNT,#8 ;发送1个字节到HD7279,高位
CLR CS 在前。
CALL LONG_DELAY
SEND_LOOP: MOV C, DATA_OUT.7
MOV DAT, C
SETB CLK
MOV A, DATA_OUT
RL A
MOV DATA_OUT, A
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT, SEND_LOOP ;检查8位数据是否发送完毕。
CLR DAT ;发送完毕,返回。
RET
BD: CLR A ;多字节16进制整数转换成BCD
MOV R4, A 码。
MOV R5, A
MOV R6, A
MOV R7, #10H
BD1: CLR C
MOV A, 39H
RLC A
MOV 39H, A
MOV A, 38H
RLC A
MOV 38H, A
MOV A, R4
ADDC A, R4
DA A
MOV R4, A
MOV A, R5
ADDC A, R5
DA A
MOV R5, A
MOV A, R6
ADDC A, R6
DA A
MOV R6, A
DJNZ R7, BD1
RET
PTDS: MOV R1, A
ACALL PTDS1
MOV A, R1
SWAP A
PTDS1: ANL A, #0FH
MOV @R0, A
INC R0
RET
LONG_DELAY: MOV TIMER0, #25 ;延时程序。
DELAY_LOOP: DJNZ TIMER0, DELAY_LOOP
RET
SHORT_DELAY: MOV TIMER0, #4
SHORT_LOOP: DJNZ TIMER0, SHORT_LOOP
RET
END
[本帖最后由 yf199004 于 2012-5-3 16:31 编辑]
搜索更多相关主题的帖子:
单片机 学习 C语言
bcs转10 c语言,小弟刚学习C语言,怎么把下段汇编代码转化为C语言程序,请高手指教!!!单片机89c52...相关推荐
- 将python代码转化为c语言代码,提高运行效率
将python代码转化为c语言代码,提高运行效率 首先,需要安装cpython库: pip install cython 安装完成之后,写一段简单的代码,例如下面这个利用递归求斐波那契数列的函数,然后 ...
- Go语学习笔记 - websocket gorilla(附测试代码) | 从零开始Go语言
目录 项目结构 消息结构 服务端代码 定义客户端行为 服务启动 测试代码 总结 学习笔记,写到哪是哪. websocket也是常用的协议了,在上一篇中主要测试使用了一下grpc. 下面我会把代码贴出来 ...
- 【OS学习笔记】二十 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之主引导扇区程序
本汇编代码对应保户模式下操作系统内核如何加载用户程序并运行 的实际主引导扇区代码: 对应的内核代码在:内核代码 对应的用户程序代码在:用户程序代码 ;代码清单13-1;文件名:c13_mbr.asm; ...
- C语言进阶深度学习目录表
学习交流加(可免费帮忙下载CSDN资源): 个人微信(进微信群加): LyyCoder 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2(已满): 780902027 ...
- ARM 裸机程序学习 03 - 发送SOS信号(汇编 + C)
之前的两个示例程序都是完全由汇编编写的,而这次的示例程序由汇编和C语言写成并编译. 汇编自有汇编的优点,比如你可以非常清楚地知道CPU在执行每条指令时到底做了什么,怎么做的,数据到底保存在哪儿等等,但 ...
- 【OS学习笔记】十六 保护模式四:进入保护模式与在保护模式下访问内存的汇编代码
本文记录的是之前四篇文章所对应的汇编代码.四篇文章分别是: [OS学习笔记]十二 现代处理器的结构和特点 [OS学习笔记]十三 保护模式一:全局描述符表(GDT) [OS学习笔记]十四 保护模式二:段 ...
- bcs转10 c语言,ARM汇编转C语言 - ARM技术论坛-ARM嵌入式论坛-人气最火爆ARM学习论坛 - 21ic电子技术开发论坛...
本帖最后由 wglzp123456 于 2019-6-15 19:21 编辑 //ARM汇编代码 0894 B570 PUSH {R4-R6,LR} 089 ...
- 【C语言进阶深度学习记录】三十八 C/C++语言中的函数声明与函数定义
文章目录 1 函数的声明和定义 1.1 代码分析 2 总结 1 函数的声明和定义 声明的意义在于告诉编译器程序单元的存在.只是告诉编译器它存在但是不在声明这里定义,有可能在当前文件中的其他地方或者其他 ...
- 推荐10个堪称神器的学习网站,IT学习网站
挑选了 10 个堪称神器的学习网站,推荐给大家.如果觉得不错的话,文末请点赞. 01.大学资源网 大学资源网是一个完全免费并且功能非常强大的学习网站,它免费提供了丰富并且全面的学习视频教程,并且视频课 ...
最新文章
- 学习别跟我谈兴趣 No.88
- 每日一皮:妹子们写的代码,Bug为什么这么多?
- 利用ashx和ajax实现表格的异步填充
- 550 Ip frequency limited
- 景切换的时候加上遮罩
- 程序员的噩梦,你遇到过哪几条?
- java比较时间的先后utc时间,日期、时间与UTC
- 数组对象的reduce方法
- HTML+CSS---定位(相对定位--绝对定位--固定定位--设置元素的层叠顺序)---表单---设置光标样式---透明度(opacity属性定义元素的不透明度--IE的半透明滤镜)---外边线
- Mangos源码分析(15):游戏对象的实现
- 海龟交易策略要点总结
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- 看看junit在一个具体的项目中
- java多线程-创建线程
- 学会这些VRay渲染器HDRI照明技巧,轻松搞定3ds Max
- OpenCV实现人体姿态估计(人体关键点检测)OpenPose(图像、视频或调用摄像头均能实现)
- 黑苹果睡眠重启后死机_iPhone 所有机型“死机/卡机”重启方法
- [图论]最大流问题(Maximum flow)的定义
- 2022.11.12 英语背诵
- substrate中打印调试信息的多种方式详解