单片机的汇编程序
A. 51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H;复位启动
AJMP START;
ORG 001BH;T1中断
AJMP T1INT;
;定义变量========================
YSJSEQU 30H;延时计数器
LEDEQU 31H;LED控制缓冲器
;主程序==========================
START:MOV LED,#0FEH;初始化数据
MOV YSJS,#0;
MOV TMOD,#10H;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H;设置定时初值
MOV TH1,#3CH;定时时间=50mS
SETB ET1;使能定时器1中断
SETB TR1;启动定时器1
SETB EA;开总中断
MOV P1,LED;初始化流水灯
LOOP:JMP LOOP;循环等待中断
T1INT:PUSH PSW;定时器1中断程序
PUSH ACC;保护现场
MOV TH1,#3CH;定时时间=50mS
MOV TL1,#0B0H;
INC YSJS;
PUSH ACC;保护ACC
MOV A,YSJI;
CJNE A,#2,QT1;50mS*2=100mS
MOV P1,LED;
MOV A,LED;
RL A;累加器A的值循环左移1位
MOV LED,A;
MOV YSJS,#0;
QT1:POP ACC;恢复现场
POP PSW;
RETI;返回主程序
END;汇编程序结束
(1)单片机的汇编程序扩展阅读:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。
B. 单片机程序用什么软件转汇编程序
直接用proteus。
用c语言的程序,但转换的结果不是太理想,跟反汇编差不多,需要自己去整理,其转移的标号需要自己重新定义,转换结果里是用行地址替代的。
先将汇编语言编译成HEX或BIN文件,再通过相应的下载手段把文件下载进去,编译的话比如WAVE软件就可以,很多的,下载的话要看什么型号的单片机了,有些支持在线ISP下载,那么电脑装个软件,通过232串口连接到板子上,就可以了,有些呢,是需要买专门的烧写器的。

简单汇编程序
简单汇编程序 又称“装入并执行”式汇编程序。由于简便而得到广泛使用。这种汇编程序的特点是汇编后的机器语言程序直接放在内存之中准备执行。目标程序所占据的存储位置是在汇编时固定的,并且以后不能改变,所以这种工作方式不能将多个独立汇编的子程序合并为一个完整的程序,而且只能调用位置与目标程序不冲突的程序库中的子程序。
以上内容参考:网络-汇编程序
C. 单片机汇编程序
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 001BH
LJMP T1ISR
ORG 4000H
MAIN:
MOV TMOD,#11H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
MOV TH1,#HIGH(65536-50000)
MOV TL1,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB TR1
SETB ET1
SETB EA
MOV R2,#0
MOV R3,#0
MOV R7,#10
MOV R6,#20
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R7,T0E
MOV R7,#10
MOV A,R2
MOV DPTR,#TABL
MOVC A,@A+DPTR
ANL A,#0FH
ORL A,P1
MOV P1,A
INC R2
CJNE R2,#5,T0E
MOV R2,#0
T0E:
RETI
T1ISR:
CLR TR1
MOV TH1,#HIGH(65536-50000)
MOV TL1,#LOW(65536-50000)
SETB TR1
DJNZ R6,T0E
MOV R6,#10
MOV A,R3
MOV DPTR,#TABR
MOVC A,@A+DPTR
ANL A,#0F0H
ORL A,P1
MOV P1,A
INC R3
CJNE R3,#5,T1E
MOV R3,#0
T1E:
RETI
TABL:
DB 0FEH,0FCH,0F8H,0F0H,0FFH
TABR:
DB 0EFH,0CFH,08FH,0FH,0FFH
END
D. 关于单片机的原码,反码,补码 之 汇编程序的问题
这程序是错误的。
1. 它用的数据,并不是补码,而是原码。
因此计算起来,需要变换称为补码,相当的麻烦。
2. 原码变换成补码,先要判断正负。
负数的原码,才需要变换,正数不用变。
而这个程序并没有判断,都进行了变换,这是错误的。
3. 负数原码变换到补码,是数值部分取反加一。
而这个程序,是全部都取反了。
4. 程序中的标号,使用错误。
不应该用 ADD、SUB 这样的保留字。
5. 调用了多次子程序,都没有“返回 (RET)”。
这程序,早就跑飞了。
建议作者重新编程。
E. 单片机 汇编程序
ORG 0000H;以下汇编代码存放到ROM的0000H开始的连续单元内(主程序入口)
LJMP START;转主程序
ORG 001BH;以下汇编代码存放到ROM的001BH开始的连续单元内(中断服务程序入口)
KKKK:INC A;A加1
CJNE A,#100,KKKK;没有加到100转KKKK
RETI;加到100中断返回
ORG 0030H;主程序
START:MOV TMOD #50H;设置T1方式1计数
REPEAT: MOV TH1, #73H;
MOV TL1, #98H;设置定时初值(50ms)
MOV IE #82H;开中断,允许T1溢出中断
SETB TR1;启动T1计数
LOOP:JNB TF1,$;等待溢出中断
CLR TF1;清T1溢出中断标志位
MOV TH1, #73H
MOV TL1, #98H;设置定时初值(50ms)
SJMP LOOP;循环继续
END;汇编结束
F. 单片机汇编语言程序的三种基本结构
汇编语言程序有顺序程序、分支程序、循环程序三种。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。
分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。

(6)单片机的汇编程序扩展阅读:
注意事项:
汇编指令不区分大小写,目的操作数是存结果的,原操作数是被操作的。
二进制数后跟b,十六进制数后跟h,十进制数不需特殊标记。
汇编源程序中,数据不能以字母开头,需要在前面加上0,如0a000h。
