各位帮下忙把这个汇编改成C语言

kingsly5364 2015-11-22 01:21:47
NAME MAIN ;演示主程序
MAIN_CODE SEGMENT CODE
STACK SEGMENT IDATA

RSEG STACK
DS 20H ;32 Bytes Stack

CSEG AT 0000H ;定位0
LJMP START

RSEG MAIN_CODE ;开始程序段
START: MOV SP,#STACK-1
LCALL Infrared_INIT ;红外通讯初始化
MAIN: LCALL Infrared_Test ;调用自收自发红外通讯子程序
LCALL DelayTime ;延时
JMP MAIN ;循环进行红外通讯

;********************************
;红外通讯
;********************************
;初始化
Infrared_INIT: MOV P1,#0FFH ;令发光管灭
MOV B,#1 ;初始发送数据
MOV TMOD,#20H ;定时器工作方式2,设波特率2400
MOV TH1,#0F4H
MOV TL1,#0F4H
SETB TR1 ;选通定时器1,定时器开始工作
MOV SCON,#50H ;串口工作方式1,开允许接收
RET

;红外通讯
Infrared_Test: MOV A,B
LCALL Send_Receive ;红外通讯
LCALL Light ;根据收接到的数据点亮8个红色发光管
INC B ;发送数据逐步递增
RET

;红外通讯数据自收自发子程序
Send_Receive: MOV R7,#60 ;检测接收标志最大次数
CLR TI
MOV SBUF,A
Send_Receive_1: JNB RI,Send_Receive_2 ;每隔0.1ms检测一次接收标志
MOV A,SBUF
CLR RI
RET
Send_Receive_2: LCALL Delay_01ms
DJNZ R7,Send_Receive_1
CLR A
RET

;点亮8个发光管
Light: CPL A ;0-亮,1-灭
MOV P1,A
RET

;延时0.1s
Delay_01ms: PUSH 07H
MOV R7,#50
DJNZ R7,$
POP 07H
RET
;延时程序
DelayTime: PUSH 05H ;延时0.5s
PUSH 06H
PUSH 07H
MOV R5,#5
DelayTime_1: MOV R6,#99
DelayTime_2: MOV R7,#100
DJNZ R7,$
DJNZ R6,DelayTime_2
DJNZ R5,DelayTime_1
POP 07H
POP 06H
POP 05H
RET

END
...全文
423 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
whoozit 2015-12-18
  • 打赏
  • 举报
回复
这段代码涉及很多硬件指令,单用 C 语言直接实现无能为力。非要用 C语言,也只能是 C 语言搭流程框架,然后具体功能还得内联汇编,或调用汇编子函数。
赵4老师 2015-11-23
  • 打赏
  • 举报
回复
为什么不将这段汇编汇编为obj,直接和调用它的C编译出来的obj连接到一起呢?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧