找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 893|回复: 1
收起左侧

我这个单片机汇编程序为什么不能做到左右移

[复制链接]
ID:248656 发表于 2019-3-25 12:27 | 显示全部楼层 |阅读模式
status equ 03h               ;定义状态寄存器的地址
portd equ 08h                ;定义端口D的寄存器的地址
trisd equ 88h                ;定义端口D的方向控制寄存器的地址
flag equ 20h                 ;定义一个左右移标志寄存器
m equ 21h                    ;定义一个计数器变量
w equ 0                      ;定义传送目标寄存器的W的指示位
f equ 1                      ;定义传送目标寄存器的RAM的指示位
rp0 equ 5                    ;定义一个状态寄存器的体选页位指示位
dly1 equ 21h                 ;定义一个延时变量
dly2 equ 22h                 ;定义另一个延时变量
;---------------------------------主程序------------------------------------
org 000h
nop
bsf status,rp0              ;将状态控制寄存器的页选位选择体1
movlw 00h                   ;将立即数00H送W
movwf trisd                 ;转送到端口D的方向控制寄存器,设定输出
bcf status,rp0              ;将状态控制寄存器的页选位选择体0
bcf status,0                ;
movlw 0ffh                  ;将立即数0FEH先送到W
movwf portd                 ;再转送到端口D,显示
k1                           ;
movlw 01h                   ;将立即数01H先送到W
xorwf flag,f                ;将左右移标志位取反
btfss flag,0                ;测试左右移标志位FLAG=1左移。否则右移
goto loop1                  ;否,右移
goto loop2                  ;是,左移
loop1                        ;右移子程序名
movlw 0ah                   ;将立即数0AH送W
movwf m                     ;将立即数0AH转送到M
s1                           ;
decfsz m,f                  ;M减一,结果送M。如果结果为0则跳一步,否则顺序执行。
goto n1                     ;转到右移
goto k1                     ;转到k1
loop2                        ;左移子程序名
movlw 08h                   ;将立即数08H先送到W
movwf m                     ;再转送到M
s2
decfsz m,f                  ;M减一,结果送M.如果结果为0则跳一步,否则顺序执行
goto l1                     ;转到右移
goto k1                     ;转到K1
n1
rrf portd,f                 ;端口D循环右移指令
call delay                  ;调延时子程序
goto s1                     ;返回到计数器S1循环
l1
rlf portd,f                 ;端口D循环左移指令
call delay                  ;调延时子程序
goto s2                     ;返回到计数器S2循环
;--------------------------------延时子程序------------------------------------
delay                        ;子程序名
movlw 01h                  ;将外层循环参数0FFH经过W
movwf dly1                  ;送入用作外部循环变量的DLY1
lp0                          ;
movlw 0ffh                  ;将内层循环参数0FFH经过W
movwf dly2                  ;送入用作内层循环变量的DLY2
lp1                          ;
decfsz dly2,f               ;内层变量DLY2内容递减,若为0跳一步
goto lp1                    ;跳到LP1处
decfsz dly1,f               ;外层变量DLY1内容递减,若为0跳一步
goto lp0                    ;跳转的LP0处
return                      ;返回主程序
end                         ;
回复

使用道具 举报

ID:248656 发表于 2019-3-25 17:32 | 显示全部楼层
找到原因了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表