单片机加法程序

单片机加法程序,第1张

1L的程序怎么看着都像是有问题。
要100以内的奇数相加,奇数就是1,3,5,7,9……99,一共50个数字,如果从1开始,那就是每次加2,重复49次到(249)+1=99,所以程序这样简单些:
ORG
0000H
CLR
A,
MOV
50H,
A
MOV
51H,
A
MOV
R2,
#01H
;从1开始
MOV
R3,#49
;重复49次
LOOP:
CLR
C
;么次进行加法前先清除C,以免出问题
MOV
A,
R2
ADD
A,
51H
MOV
51H,
A
CLR
A
ADDC
A,
50H
MOV
50H,
A
INC
R2
INC
R2
DJNZ
R3,
LOOP
SJMP
$
END

MOV
DPTR,#TAB
MOV
A,R3
;

R2R
3
=
0292H
=
0000
0010
1001
0010
(
十进制
658

CLR
C
;
C
=0
A=
1001
0010
RLC
A
;
A
=
0010
0100
C
=
1
(
左移一位)
XCH
A,R2
;
A
<=>
R2
A
=
0000
0010
C=1
RLC
A
;
A
=
0000
0101
C
=
0
(
左移一位)
XCH
AR2
;
A
<=>
R2
R2=0000
0101
A
=
0010
0100
(
十六进制
0524H)
ADD
A,DPL
;
(
十进制
1316)
MOV
DPL,A;调整DPL,DPH
MOV
A,DPH
ADDC
A,R2
MOV
DPH,A
CLR
A
MOVC
A,@A+DPTR;查表
MOV
R2,A;第一字节
CLR
A
INC
DPTR
MOVC
A,@A+DPTR;查第二字节
MOV
R3,A
RET
TAB:
DW
XXXXH;共1024个
数据项
DW
XXXXH

DW
XXXXH

hi ,你好,我是04级电子信息毕业,我的毕业论文写的是《LED显示屏设计》,可能我们选到一个题目了,包括硬件电路、信号处理、汇编语言的代码,呵呵
以下为目录,可供参考,禁止抄袭,如果觉得好,给分,我发论文给你。
目录已经发到你邮箱了
摘要: 本设计以89c51单片机为核心,采用点阵图形显示器显示汉字,通过时序控制电路,控制信号电路,显示驱动电路等完成显示。
Abstract: This design take the 89c51 monolithic integrated circuit asa core, uses the lattice graph monitor demonstration Chinesecharacter, through the sequential control electric circuit, controlsthe signal circuit, demonstrated the actuation electric circuit and soon completes the demonstration
关键字:列显示驱动、时序控制电路、串行异步通信方式、显示驱动电路、控制信号电路
目 录
绪 论……………………………………………………1
第1章 设计思想………………………………………2
第2章 设计方案………………………………………4
第3章 基本结构………………………………………5
第4章 硬件部分………………………………………9
41 微机硬件电路…………………………………9
411 显示控制电路……………………………9
412 显示驱动电路……………………………10
42 控制信号………………………………………12
421 与列显示数据有关的信号……………13
422 行号锁存器打入信号…………………13
423 区分上写部分的控制信号……………13
424 清屏信号………………………………14
第5章 软件部分………………………………………15
51 理论分析………………………………………15
52 程序设计………………………………………17
53 流程图…………………………………………22
53 1主程序流程图…………………………22
53 2 中断服务程序流程图…………………23
第6章 结论……………………………………………24
参考文献…………………………………………………25
致谢………………………………………………………26
52程序设计
ORG 0000H
SJMP MAIN :跳转到主程序MAIN
ORG 0023H
SIENTRY: AJMP1 SIS :串行通信中断入口,跳转到
:串行通信中断服务程序SIS
MAIN: MOV SP,60 :设栈
MOV R0,80H :指向RAM区
MOV R1,00 :R0,R1:RAM指针
MOV DPTR,1000H :EPROM的数据首地址
:DPTR:EPROM指针
REPROM: MOV A,00
MOVC A,@A+DPTR :从EPROM1000H读数据
INV DPTR :从EPRON读200H个字节
:数据到RAM
PUSH DPL :DPTR进栈
PUSH DPH
MOV DPH,R0 :DPTR换成RAM指针
MOV DPL,R1
MOVX @DPTR,A :数据送RAM
INC DPRT
MOV R0,DPH :存DPTR
MOV R1,DPL
POP DPH :d出DPTR(EPROM地址)
POP DPL
MOV R2,DPH :R2:判是否到1200H
CJNE R2,12H,REPROM :未传送完200H个字节转回
SINIT: MOV TMOD,21H :设T1方式2,T0方式1
MOV TH1,FAH :设T1定时651μs
SETB 8EH :置TCONBIT6,打开T1
MOV TH0,00 :置T0定时
MOV TL0,00
MOV R6,7EH
MOV R7,00H
MOV SCON,50H :设SCON为50H,方式1,REN=1
MOV PCON,00 :设PCIN为0
MOV 50H,82H
MOV 51H,00
SETB AFH :开中断
SETB ACH :允许串行通信中断
SETB 9CH :SCONBIT4,REN=1
NEXT CLRC
MOV A,R7 :R7初值为0
ADD A,00
MOV R7,A
MOV A,R6 :R6初值为7E
ADC A,02H
MOV A,51H :51初值为0
XRL A,R7 :A=R7?
JNZ DISP1 :不等,转到DISP1
MOV A,50H :等,50初值为82H
XRL A,R6 :A=R6?
JNZ 04H :不等,转到DISP1
MOV R6,#80H :等,R6=80H
MOV R7,00
DSP1: MOV R0,00
TM256 MOV R3,00
TM512 MOV R2,00
MOV DPH,R6 :80H
MOV DPL,R7 :00H
CONT2: MOV R1,00
CLR B4H :P3BIT4=T0,上下控制=0
DISPH: MOVX A@DPTR :读入RAM
INC DPTR
INC R1 :R1:字节计数
MOV P1,A :向P1输出一个RAM字节数据
CLR B3H :P3BRT3=INT1
SETB B3H :INT1是移位寄存器的打入脉冲
CLR B5H :P3BRT5=T1
SETB B5H
CLR B5H :T1一共输出8个脉冲
SETB B5H :即移位8次
CLR B5H :T1是移位寄存器的移位脉冲
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CJNE R1,10H,DISPH :R1<>10H,转到DISPH
:10H=16D,168=128
PUSH DPH :若R1=10H,则DPTR进栈
PUSH SPL
SETB B4H :P3BIT4=T0,上下控制=1
CLRC
MOV A,DPL
ADD A,P0H :跳过F0H个字节
MOV DPL,A :原DPTR已为10H,10H+F0H指向
MOV A,DPH :256字节之后
ADC A,00 : 即指向下一半
MOV DPH,A
DISPL: MOVX A,@DPTE
INC DPTR
INC R1
MOV P1,A
CLR B3H
SETB B3H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CLR B5H
SETB B5H
CJNE R1,20H,D4H :R1<>20H,转到DISPL
CLR B2H :P3BIT2=INT0
SETB B2H
MOV P1,R2 :R2输出到P1
MOV DPTR,0000
MOVX @DPTR,A :只是让地址动作
INC R2
POP DPL
POP DPH
CINE R2,10H,CONT1 :R2<>10H转到CONT1
INC R3 :R2=10H
CINE R3,FFH,TIM256 :R3<>FFH,转到TIM256
INC R0 :R3=FFH
CINE R0,02H,TIM512 :R0<>02H,TIM512
LJMP NEXT

TIM512: LJMP TM512 :$21
CONT1: LJMP CONT2
TIM256: AJMP0 TM256
ORG 0800H :串行通信服务程序
SIS: CLR AFH :IE BIT7关中断
CLR 98H :SCONBIT0RI清接收中断
MOV A,SBUF
XRL A,3FH :3FH传输起始标
JZ DTSTART :SBUF=3FH,开始
SJMP CLOSE :否则结束
DTSTART: MOV DPTR,#0001H :只是让地址动作
MOVX @DPTR,A :关00译码,开01译码
:向74LS595送清除信号SRCLR
CLR B2H :把清零的结果打入列输出锁存器
:完成关显示 *** 作
MOV DPTR,#8000H
MOV SBUF,A
WAITT: JNB 99H,WAITT :SCONB1TI=0,等待发射完成
CLR 99H :SCONB1TI=1
WAITR: JNB 98H,WAITR :SCONB0RI=0,等待接受完成
CLR 98H :SCONB0RI=1
MOV A,SBUF :传输字节计数L
MOV 50H,A
CONTINUE: MOV SBUF,A
WARTT1: JBC 99H,WARTT1 :SCONB1TI=1,发射完成
SJMP WAITT1 :SCONB1TI=0,等待发射完成
WAITTR1: JBC 98H,RDATA :SCONB0RI=1,接收完成
SJMP WarrR1 :SCONB0RI=0,等待接收完成
RDATA: MOV A,SBUF :读入显示数据
MOV @DPTR,A
INC DPTR
MOV A,DPH
XRL A,50H
JNZ CONTINUE :(A)<>(50H),继续接收
MOV A,DPL :(A)=(50H)
XRL A,51H
JNZ CONTINUE :(A)<>(51H),继续接收
MOV ASBUF,A :(A)=(51H)WAITTE: JNB 99H,WAITTE :SCONB1TI=0,等待发射完成
CLR 99H :SCONB1TI=1
MOV DPTR,8000H
MOV R0,20H
MOV R1,10H
MOV R6,80H
MOV R7,00
CLOSE: SETB AFH :IE
RETI
ORG 0800H
DISPLAYDATA:DB 00,00,00,00,00,00,00,00,00,00

51单片机
汇编
指令CLR:
CLR
A
//
累加器A
被赋零值,此时为逻辑运算指令。
CLR
C
//程序状态寄存器PSW中的CY位状态清零,此时为位 *** 作指令。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13371434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存