单片机程序题(3)

2019-03-10 17:31

程序如下:

ORG 0200H VAR DATA 20H FUNC DATA 21H

MOV A,VAR ;A<--(20H) CJNE A,#50H ,NEXT1 ;建立Cy

NEXT1: JNC DONE ;若X>=50,则DONE CJNE A,#20H,NEXT2 ;建立Cy

NEXT2: JC NEXT3 ;若X<20,则NEXT3 RL A ;若X>19,则A=5X RL A

ADD A,20H ;A<--5X SJMP DONE

NEXT3: RL A ;A<--2X

DONE: MOV FUNC ,A ;21H<--A SJMP $ END 实验程序: 1.存储块清零

Block equ 4000h

mov dptr, #Block ; 起始地址 mov r0, #0 ; 清 256 字节 clr a Loop:

movx @dptr, a

inc dptr ; 指向下一个地址 djnz r0, Loop ; 记数减一 ljmp $ end

1,二进制到ASCII码转换

将 A 拆为二个 ASCII 码, 并存入 Result 开始的二个单元 Result equ 20h org 0 ljmp Start ASCIITab:

db '0123456789ABCDEF' ; 定义数字对应的ASCII表 BinToHex:

mov dptr, #ASCIITab

mov b, a ; 暂存 A swap a

anl a, #0fh ; 取高四位 movc a, @a+dptr ; 查ASCII表 mov Result, a

mov a, b ; 恢复 A

anl a, #0fh ; 取低四位 movc a, @a+dptr ; 查ASCII表 mov Result+1, a ret Start:

mov sp, #40h mov a, #1ah call BinToHex ljmp $ End 2.程序跳转表

org 0 ljmp Start Func0: mov a, #0 ret

Func1: mov a, #1 ret

Func2: mov a, #2 ret

Func3: mov a, #3 ret FuncEnter:

add a, acc mov dptr, #FuncTab jmp @a+dptr FuncTab:

ajmp Func0 ajmp Func1 ajmp Func2 ajmp Func3 Start:

mov a, #0 call FuncEnter mov a, #1 call FuncEnter mov a, #2 call FuncEnter mov a, #3 call FuncEnter ljmp $ end

3.数据排序

Size equ 10 ; ajmp 为二字节指令, 调用号 X 2 ; 数据个数

Array equ 50h ; 数据起始地址 Change equ 0 ; 交换标志 Sort:

mov r0, #Array mov r7, #Size-1 clr Change Goon:

mov a, @r0 mov r2, a inc r0

mov B, @r0

cjne a, B, NotEqual sjmp Next NotEqual:

jc Next setb Change xch a, @r0 dec r0 xch a, @r0 inc r0 Next:

djnz r7, Goon jb Change, Sort ljmp $ end

4. IO口输入输出 Loop: mov a, #01h mov r2, #8 Output: mov p1,a rr a call Delay djnz r2,Output ljmp loop Delay: mov r6, #0 mov r7, #0 DelayLoop:

djnz r6, DelayLoop djnz r7, DelayLoop ret end

5. KeyLeft equ P1.0

; 前小后大, 不交换 ; 前大后小, 置交换标志 ; 交换

KeyRight equ P1.1 LedLeft equ P1.2 LedRight equ P1.3

SETB KeyLeft SETB KeyRight Loop:

MOV C,KeyLeft MOV LedLeft,C MOV C,KeyRight MOV Ledright,C LJMP Loop END

5.用74HC245输入数据 CS245 equ 8000h org 0000h Loop:

mov dptr,#CS245 movx a, @dptr ljmp Loop end

6.用74HC273输出数据 CS273 equ 8000h mov dptr, #CS273 mov a, #1 Loop:

movx @dptr, a rl a nop

ljmp Loop end

.7.八段数码管显示

OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口 IN equ 08001h ; 键盘读入口 LEDBuf equ 60h ; 显示缓冲 Num equ 70h ; 显示的数据 DelayT equ 75h ; ljmp Start

LEDMAP: ; 八段管显示码

db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序 mov r7, #0

DelayLoop:

djnz r7, DelayLoop djnz r6, DelayLoop ret DisplayLED:

mov r0, #LEDBuf

mov r1, #6 ; 共6个八段管 mov r2, #00100000b ; 从左边开始显示 Loop:

mov dptr, #OUTBIT mov a, #0

movx @dptr, a ; 关所有八段管 mov a, @r0

mov dptr, #OUTSEG movx @dptr,a

mov dptr, #OUTBIT mov a, r2

movx @dptr, a ; 显示一位八段管 mov r6, #01 call Delay

mov a, r2 ; 显示下一位 rr a mov r2, a inc r0

djnz r1, Loop

mov dptr, #OUTBIT mov a, #0

movx @dptr, a ; 关所有八段管 ret Start:

mov sp, #40h mov Num, #0 MLoop:

inc Num mov a, Num mov b, a

mov r0, #LEDBuf FillBuf:

mov a, b anl a, #0fh

mov dptr, #LEDMap

movc a, @a+dptr ; 数字转换成显示码

mov @r0,a ; 显示在码填入显示缓冲 inc r0


单片机程序题(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:连续梁直线段支架计算书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: