历史上的今天
返回首页

历史上的今天

今天是:2025年04月19日(星期六)

2021年04月19日 | 常用的51单片机程序

2021-04-19 来源:eefocus

51程序集


;片内RAM初始化子程序


IBCLR:MOVA,R0

MOVR1,A

CLRA

IBC1:MOV@R1,A

INCR1

DJNZR7,IBC1

RET


;片外RAM初始化子程序


EBCLR1:MOVA,ADDPL

MOVDPL,A

MOVA,ADDPH

MOVDPH,A

CLRC

EBC11:MOVX@DPTR,A

INCDPTR

DJNZR7,EBC11

RET


;片外RAM初始化子程序(双字节个单元)


EBCLR2:MOVA,ADDPL

MOVDPL,A

MOVA,ADDPH

MOVDPH,A

MOVA,R7

JZEBC21

INCR6

EBC21:CLRA

MOVX@DPTR,A

INCDPTR

DJNZR7,EBC21

DJNZR6,EBC21

RET



;内部RAM数据复制程序

;入口:R0,R7

;占用资源:A

;堆栈需求:2字节

;出口:R1


IBMOV:MOVA,R0

ADDA,R7

MOVR0,A

MOVA,R1

ADDA,R7

MOVR1,A

IBM1:DECR0

DECR1

MOVA,@R0

MOV@R1,A

DJNZR7,IBM1

RET


;外部RAM数据复制程序

;入口:ADDPH,ADDPL,R7

;占用资源:ACC

;堆栈需求:2字节

;出口:R0,R1


EBMOV1:MOVA,ADDPL

ADDA,R7

MOVDPL,A

CLRA

ADDCA,ADDPH

MOVDPH,A

MOVA,R7

ADDA,R1

XCHA,R0

ADDCA,#00H

MOVP2,A

EBM11:DECR0

CJNER0,#0FFH,EBM12

DECP2

EBM12:DECDPL

MOVA,DPL

CJNEA,#0FFH,EBM13

DECDPH

EBM13:MOVXA,@R0

MOVX@DPTR,A

DJNZR7,EBM11

RET


;外部RAM数据复制程序

;入口:ADDPH,ADDPL,R6,R7

;占用资源:ACC

;堆栈需求:2字节

;出口:R0,R1


EBMOV2:MOVA,ADDPL

ADDA,R7

MOVDPL,A

MOVA,R6

ADDCA,ADDPH

MOVDPH,A

MOVA,R7

ADDA,R1

XCHA,R0

ADDCA,R6

MOVP2,A

MOVA,R7

JZEBM21

INCR6

EBM21:DECR0

CJNER0,#0FFH,EBM22

DECP2

EBM22:DECDPL

MOVA,DPL

CJNEA,#0FFH,EBM23

DECDPH

EBM23:MOVXA,@R0

MOVX@DPTR,A

DJNZR7,EBM21

DJNZR6,EBM21

RET


;外部RAM数据复制到内部RAM程序

;入口:ADDPH,ADDPL,R7

;占用资源:ACC

;堆栈需求:2字节

;出口:R0


ITEMOV:MOVA,ADDPL

ADDA,R7

MOVDPL,A

MOVA,ADDPH

ADDCA,#00H

MOVDPH,A

MOVA,R0

ADDA,R7

MOVR0,A

ITEM1:DECR0

DECDPL

MOVA,DPL

CJNEA,#0FFH,ITEM2

DECDPH

ITEM2:MOVXA,@DPTR

MOV@R0,A

DJNZR7,ITEM1

RET




;限幅滤波程序

;入口:A,SDAT,DELTY

;占用资源:B

;堆栈需求:2字节

;出口:A


JUGFILT:MOVB,A

CLRC

SUBBA,SDAT

JNCJUGFT1

CPLA

INCA

JUGFT1:SETBA

SUBBA,#DELTY

JNCJUGFT3

MOVA,SDAT

RET

JUGFT3:MOVA,B

MOVSDAT,A

RET


;中位值滤波程序

;入口:ADDPH,ADDPL,N

;占用资源:ESELSORT

;堆栈需求:4字节

;出口:A


MEDFILT:LCALLESELSORT

MOVA,N

CLRC

RRCA

ADDA,ADDPL

MOVDPL,A

MOVA,ADDPH

MOVDPH,A

JNCMEDFT1

INCDPH

MEDFT1:MOVXA,@DPTR

RET


;N点算术平均滤波

;入口:ADDPH,ADDPL,N

;占用资源:B,R3,R4

;堆栈需求:2字节

;出口:A


AVFILT:MOVA,ADDPL

MOVDPL,A

MOVA,ADDPH

MOVDPH,A

CLRA

MOVR3,A

MOVR4,A

MOVR7,N

AVFT1:MOVXA,@DPTR

INCDPTR

ADDA,R4

MOVR4,A

JNCAVFT2

INCR3

AVFT2:DJNZR7,AVFT1

MOVR7,N

MOVR2,#00H

LCALLNDIV31

MOVA,R4

RET


;N点加权平均滤波

;入口:ADDPH,ADDPL,N

;占用资源:B,R3,R4

;堆栈需求:2字节

;出口:A


QAVFILT:CLRA

MOVR3,A

MOVR4,A

MOVR7,N

MOVP2,ADDPH

MOVR1,ADDPL

MOVDPTR,#QAVTAB

QAVFT1:MOVCA,@A+DPTR

MOVB,A

MOVXA,@R1

INCDPTR

INCR1

MULAB

ADDA,R4

MOVR4,A

MOVA,B

ADDCA,R3

MOVR3,A

DJNZR7,QAVFT1

MOVA,R4

JNBACC.7,QAVFT2

INCR3

QAVFT2:MOVA,R3

RET

QAVTAB:DB


;一阶加权滞后滤波程序

;入口:A,DELTY

;占用资源:B,R3,R4

;堆栈需求:2字节

;出口:A


BQFILT:MOVB,A

CLRA

MOVDPTR,#ABTAB

MOVCA,@A+DPTR

MULAB

MOVR4,A

MOVR3,B

MOVA,#01H

MOVCA,@A+DPTR

MOVB,DELTY

MULAB

ADDA,R4

MOVR4,A

MOVA,B

ADDCA,R3

MOVR3,A

MOVA,R4

JNBACC.7,FT1

INCR3

FT1:MOVA,R3

MOVDELTY,A

RET

BQTAB:DB80H,80H




;双字节取补程序 /(R3R4)=(R3R4)

;入口:R3,R4

;占用资源:ACC

;堆栈需求:2字节

;出口:R3,R4


CMPT:MOVA,R4

CPLA

ADDA,#01H

MOVR4,A

MOVA,R3

CPLA

ADDCA,#00H

MOVR3,A

RET


;N节取补程序 /([R0])=([R0])

;入口:R0,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R0


NCMPTN:MOVB,R0

SETBC

NCPT1:MOVA,@R0

CPLA

ADDCA,#00H

MOV@R0,A

INCR0

DJNZR7,NCPT1

MOVR0,B

RET


;双字节无符号数加法程序 (R3R4+R6R7)=(R3R4)

;入口:R3,R4,R6,R7

;占用资源:ACC

;堆栈需求:2字节

;出口:R3,R4,CF


NADD:MOVA,R4

ADDA,R7

MOVR4,A

MOVA,R3

ADDCA,R6

MOVR3,A

RET



;N字节无符号数加法程序 ([R0]+[R1])=([R0])

;入口:R0,R1,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R0,CF


NADDN:MOVB,R0

CLRC

NADN1:MOVA,@R0

ADDCA,@R1

MOV@R0,A

INCR0

INCR1

DJNZR7,NADN1

MOVR0,B

RET


;双字节无符号数减法程序 (R3R4-R6R7)=(R3R4)

;入口:R3,R4,R6,R7

;占用资源:ACC

;堆栈需求:2字节

;出口:R3,R4


NSUB:MOVA,R4

CLRC

SUBBA,R7

MOVR4,A

MOVA,R3

SUBBA,R6

MOVR3,A

RET


;N字节无符号数减法程序 ([R0]-[R1])=([R0])

;入口:R0,R1,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R0,CF


NSUBN:MOVB,R0

MOVR7,N

CLRC

NSUBN1:MOVA,@R0

SUBBA,@R1

MOV@R0,A

INCR0

INCR1

DJNZR7,NSUBN1

MOVR0,B

RET


;单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4)

;入口:R3,R4,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R2,R3,R4


NMUL21:MOVA,R4

MOVB,R7

MULAB

MOVR4,A

MOVA,B

XCHA,R3

MOVB,R7

MULAB

ADDA,R3

MOVR3,A

CLRA

ADDCA,B

MOVR2,A

CLROV

RET


;单字节无符号数乘法程序 (R2R3R4*R7)=(R5R2R3R4)

;入口:R2,R3,R4,R6,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R5,R2,R3,R4


NMUL31:MOVA,R4

MOVB,R7

MULAB

MOVR4,A

MOVA,B

XCHA,R3

MOVB,R7

MULAB

ADDA,R3

MOVR3,A

CLRA

ADDCA,B

XCHA,R2

MOVB,R7

MULAB

ADDA,R2

MOVR2,A

CLRA

ADDCA,B

MOVR5,A

CLROV

RET


;单字节无符号数乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4)

;入口:R5,R2,R3,R4,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R7,R5,R2,R3,R4


NMUL41:MOVA,R4

MOVB,R7

MULAB

MOVR4,A

MOVA,B

XCHA,R3

MOVB,R7

MULAB

ADDA,R3

MOVR3,A

CLRA

ADDCA,B

XCHA,R2

MOVB,R7

MULAB

ADDA,R2

MOVR2,A

CLRA

ADDCA,B

XCHA,R5

MOVB,R7

MULAB

ADDA,R5

MOVR5,A

CLRA

ADDCA,B

MOVR7,A

CLROV

RET


;双字节无符号数乘法程序 (R3R4*R6R7)=(R5R2R3R4)

;入口:R3,R4,R6,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R5,R2,R3,R4


NMUL22:MOVA,R4

MOVB,R7

MULAB

XCHA,R4

MOVR5,B

MOVB,R6

MULAB

ADDA,R5

MOVR5,A

CLRA

ADDCA,B

MOVR2,A

MOVA,R3

MOVB,R7

MULAB

ADDA,R5

MOVR5,A

MOVA,B

ADDCA,R2

MOVR2,A

CLRA

ADDCA,#00H

XCHA,R3

MOVB,R6

MULAB

ADDA,R2

MOVR2,A

MOVA,B

ADDCA,R3

XCHA,R5

MOVR3,A

CLROV

RET


;双字节无符号数乘法程序 (R2R3R4*R6R7)=(R1R5R2R3R4)

;入口:R2,R3,R4,R6,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口:R1,R5,R2,R3,R4


NMUL32:MOVA,R4

MOVB,R7

MULAB

XCHA,R4

MOVR5,B

MOVB,R6

MULAB

ADDA,R5

MOVR5,A

CLRA

ADDCA,B

MOVR1,A

MOVA,R3

MOVB,R7

MULAB

ADDA,R5

MOVR5,A

MOVA,B

ADDCA,R1

MOVR1,A

CLRA

ADDCA,#00H

XCHA,R3

MOVB,R6

MULAB

ADDA,R1

MOVR1,A

MOVA,B

ADDCA,R3

XCHA,R5

MOVR3,A

MOVA,R2

MOVB,R7

MULAB

ADDA,R1

MOVR1,A

MOVA,B

ADDCA,R5

MOVR5,A

CLRA

ADDCA,#00H

XCHA,R2

MOVB,R6

MULAB

ADDA,R5

MOVR5,A

MOVA,B

ADDCA,R2

XCHA,R1

MOVR2,A

CLROV

RET


;N字节无符号数乘法程序 ([R0]*[R1])=([R0])

;入口:R0,R1,M,N

;占用资源:ACC,B,R2,R5,R6,R7,NCNT

;堆栈需求:2字节

;出口:R0


NMULMN:MOVA,M

ADDA,R0

MOVR5,A

XCHA,R1

XCHA,R5

ADDA,N

XCHA,R0

MOVR6,A

MOVB,M

MOVNCNT,B

NMLMN1:DECR0

DECR1

CLRA

XCHA,@R1

MOV@R0,A

DJNZNCNT,NMLMN1

MOVNCNT,B

NMLMN2:CLRA

XCHA,@R0

MOVR2,A

MOVA,R6

MOVR0,A

MOVA,R5

MOVR1,A

MOVR7,N

CLRC

NMLMN3:MOVA,R2

MOVB,@R1

INCR1

MULAB

ADDCA,@R0

MOV@R0,A

INCR0

MOVA,B

ADDCA,@R0

MOV@R0,A

DJNZR7,NMLMN3

INCR0

INCR6

DJNZNCNT,NMLMN2

MOVA,R0

CLRC

SUBBA,M

SUBBA,N

MOVR0,A

RET


;单字节无符号除法程序 (R2R3R4/R7)=(R2)R3R4 余数R7

;入口:R2,R3,R4,R7

;占用资源:ACC,B,F0

;堆栈需求:3字节

;出口:(R2),R3,R4,R7,OV


NDIV31:MOVA,R2

MOVB,R7

DIVAB

PUSHA

MOVR2,B

MOVB,#10H

NDV311:CLRC

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

RLCA

MOVR3,A

MOVA,R2

RLCA

MOVR2,A

MOVF0,C

CLRC

SUBBA,R7

JBF0,NDV312

JCNDV313

NDV312:MOVR2,A

INCR4

NDV313:DJNZB,NDV311

POPA

CLROV

JZNDV314

SETBOV

NDV314:XCHA,R2

MOVR7,A

RET


;单字节无符号除法程序 (R5R2R3R4/R7)=(R5)R2R3R4 余数R7

;入口:R2,R3,R4,R7

;占用资源:ACC,B,F0

;堆栈需求:3字节

;出口:(R5),R2,R3,R4,R7,OV


NDIV41:MOVA,R5

MOVB,R7

DIVAB

PUSHA

MOVR5,B

MOVB,#18H

NDV411:CLRC

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

RLCA

MOVR3,A

MOVA,R2

RLCA

MOVR2,A

MOVA,R5

RLCA

MOVR5,A

MOVF0,C

CLRC

SUBBA,R7

JBF0,NDV412

JCNDV413

NDV412:MOVR5,A

INCR4

NDV413:DJNZB,NDV411

POPA

CLROV

JZNDV414

SETBOV

NDV414:XCHA,R5

MOVR7,A

RET


;双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7

;入口:R5,R2,R3,R4,R6,R7

;占用资源:ACC,B,F0

;堆栈需求:4字节

;出口:(R2),R3,R4,R6,R7,OV


NDIV42:MOVA,R1

PUSHA

MOVB,#00H

NDV421:MOVA,R2

&, nbsp;CLRC

SUBBA,R7

MOVR1,A

MOVA,R5

SUBBA,R6

JCNDV422

MOVR5,A

MOVA,R1

MOVR2,A


推荐阅读

史海拾趣

Elprotronic Inc.公司的发展小趣事

在Elprotronic Inc.公司创立的初期,面临着电子元器件市场竞争激烈、技术更新迅速的挑战。公司创始人凭借对电子元器件市场的深刻理解和敏锐的洞察力,决定专注于提供高质量和可靠的嵌入式MCU闪存编程解决方案。他们深知,在电子行业,产品质量和技术创新是企业生存和发展的关键。因此,Elprotronic Inc.从一开始就注重技术研发和产品质量控制,逐渐在市场上树立了良好的口碑。

承兴(CX)公司的发展小趣事

进入21世纪,承兴公司不满足于现状,开始寻求跨界合作的机会。2000年,承兴成为诺基亚中国区合作伙伴,共同推出了一系列定制化的电子产品。这一合作不仅提升了承兴的品牌影响力,也为其带来了更多的商业机会。随后,承兴还与中国石油、建设银行等大型企业和金融机构建立了合作关系,进一步拓展了其业务范围。

HDK(北陆电气)公司的发展小趣事

2017年,承兴公司做出了一个大胆的决定——收购由“漫威之父”斯坦·李创立的POW!娱乐公司。这一收购不仅使承兴在泛娱乐产业获得了重要的IP资源,也为其未来的发展注入了新的动力。承兴开始将电子技术与泛娱乐产业相结合,推出了一系列具有创新性和竞争力的产品。

芯朋微电子(chipown)公司的发展小趣事

作为国内电源管理芯片的重要厂商,芯朋微电子一直致力于实现进口替代。公司不断投入研发,推出了一系列高效能、低功耗、品质稳定的电源管理集成电路产品,推动整机的能效提升和技术升级。这些努力使得芯朋微电子在国内电源管理芯片市场中的地位日益稳固。

E-Z-HOOK公司的发展小趣事

在电子产品日益复杂化的背景下,E-Z-HOOK公司不断追求技术创新。他们投入大量资源研发新型测试工具,以提高测试效率和准确性。其中一项重要的创新是开发出了可重复使用的测试钩。这种测试钩具有极高的耐用性和可靠性,可以大大降低测试成本。此外,公司还推出了一系列智能化测试解决方案,通过集成先进的传感器和软件技术,实现了对测试过程的实时监控和数据分析。

Dalian Dlicap Corporation公司的发展小趣事

面对激烈的市场竞争和行业变革,达利凯普积极推进数字化转型和产业升级。公司引入了先进的生产设备和管理系统,实现了生产过程的自动化和智能化。同时,公司还加大了对新材料、新工艺的研发力度,不断提升产品的性能和品质。这些举措使达利凯普在激烈的市场竞争中保持了领先地位,也为公司的持续发展奠定了坚实基础。

问答坊 | AI 解惑

主板的一些知识

分享一下啊!!! [ 本帖最后由 ch0823 于 2008-10-23 21:34 编辑 ]…

查看全部问答>

高质量C 编程指南

如题,对写好代码很有帮助。…

查看全部问答>

后PC时代,高校纷纷转向嵌入式专业

作为后PC时代及后网络时代的新秀,嵌入式系统凭借其在网络安全、智能家电、车载电子、消费类电子、工业控制、医疗电子等领域内日益广泛地应用和发展,已无疑成为后PC时代的擎天之柱,现在的电子技术俨然已成为嵌入式系统技术的天下。 2010年 ...…

查看全部问答>

[请问]怎样在EVC4.0SP4中引用miracl库函数?

我在工程的Header Files里添加了miracl.h和mirdef.h两个头文件,还添加了ms32.lib文件,但在编程中使用otnum()等等miracl库中的函数时仍提示错误。 Repw.obj : error LNK2019: unresolved external symbol \"int __cdecl otnum(struct bigtype *,v ...…

查看全部问答>

关于对嵌入式开发了解的问题

  小弟由于想转入到嵌入式开发的领域中来,所以需要一些最基本的了解,以便有一个更清晰的学习开端,请多多指教:      问题1:在网上查了下嵌入式开发的理解,但越看越晕,一会儿是嵌入式开发,一会儿是linux嵌入 ...…

查看全部问答>

VC开发驱动怎么设置环境啊。急。

想在VC里面写驱动 但是搭建环境完全不会  哪个好心人给我详细说明。。…

查看全部问答>

求助:c6000修改代码段代码的问题~

我想在代码中动态修改指定函数的代码,向指定函数地址写入新的代码后,用内存窗口或汇编窗口查看,新代码都是写入了的,但 是当我转到这段新代码执行时,依然执行的是原来的指令,软件仿真硬件仿真都不行~~愁死了~,我的代码段分在L2SRAM,memory ...…

查看全部问答>

MSP430中断嵌套机制

(1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT。(2)当进入中断程序时,只要不在中断中再次开中断,刚总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行。(3)若在中断A中开了总中断,刚可以响应 ...…

查看全部问答>

这个IAR调试问题怎么解决啊

本人菜鸟。今天在使用IAR出现了这个问题,以前都好好的。。怎么会出现头文件加载错误的…

查看全部问答>

LPC800 开发板 电路图

我下载到了电路图,可是没看懂如何在面包板上接线。 请高手帮忙介绍一下。这几排孔哪些已经定义好了。谢谢。…

查看全部问答>