找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2199|回复: 9
打印 上一主题 下一主题
收起左侧

关于PIC单片机汇编程序问题 MPLAB IDE rp0 equ 5h不工作

[复制链接]
跳转到指定楼层
楼主
ID:248656 发表于 2019-2-24 12:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大师好,我在学习PIC过程中遇到了一个问题我用的是MPLAB IDE再输入指令是rp0  equ  5时,单片机能工作,但是如果是rp0 equ  5h时编译成功,但是单片机不工作,为什么------请各位大师指点一下,着急啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2019-2-24 16:15 | 只看该作者
按说这是不会有问题的,我之前也是这样随便定义的,只要不是大于进制的值,rp0都是一样的呀
可能是别的地方的问题吧
回复

使用道具 举报

板凳
ID:45026 发表于 2019-2-24 19:50 | 只看该作者
编译设置问题,可以查看一下编译设置是否设置了16进制数据。一般情况是默认是16进制的,你软件是不是改过设置。
回复

使用道具 举报

地板
ID:401564 发表于 2019-2-25 00:02 | 只看该作者
eb900001 发表于 2019-2-24 19:50
编译设置问题,可以查看一下编译设置是否设置了16进制数据。一般情况是默认是16进制的,你软件是不是改过设 ...

PIC编译16进制和10进制写法是不一样的,但默认了也一样,16进制的5和8进制的5还有10进制的5,值是一样的,楼主没有完整的代码,也就不知道是什么问题了
回复

使用道具 举报

5#
ID:248656 发表于 2019-2-25 07:44 | 只看该作者
status equ 3h
portd  equ 08h
trisd  equ 88h
flag equ 25h
org 00h
nop
bsf status,5
movlw 00h
movwf trisd
bcf status,5
movlw 01h
movwf portd
bsf flag,0
loop  btfss status,0
      goto loop1
      comf flag,1
loop1 btfss flag,0
      goto loop2
      rlf portd,0
      movwf portd
      goto loop3
loop2 rrf  portd,0
      movwf portd
loop3 call delay
      goto loop
;************延时*******
delay
     movlw 0ffh
     movwf 20h
lp0  movlw 0ffh
     movwf 21h
lp1  decfsz 21h,1
     goto lp1
     decfsz 20h ,1
     goto lp0
     return
     end这是编译好的,通过了但是把rp0 equ 5单片机能工作改成rp0 equ 5h编译能成功单是下载到单片机就不工作了
回复

使用道具 举报

6#
ID:401564 发表于 2019-2-25 10:48 | 只看该作者
rp0 equ 5在哪里呀?
你是在bsf status,5中用RP0来代替吗?
很久没有用PIC汇编了
你可以直接用#define指令
我之前定义的就是这样子的
端口加一条包含指令就不用再去定义了就像这样:
#include <p16f877a.inc>        ;包含了PIC16F877A的寄存器声称文件
#define    S1        PORTB,0                ;按置S1
#define    S2        PORTB,1                ;按置S2
#define    S3        PORTB,2                ;按置S3
#define           COM0        PORTD,0                ;
#define           COM1        PORTD,1                ;
#define           COM2        PORTD,2                ;
#define           COM3        PORTD,3                ;定义几个显示的RA端口
#define            CY        STATUS,0        ;C为标志位,减法有借位=0,无借位=1
#define            SCL        PORTD,4                ;时钟信号线
#define            SDA        PORTD,7                ;数据信号线
#define            SDA_C   TRISD,7        ;数据方向控制寄存器
回复

使用道具 举报

7#
ID:401564 发表于 2019-2-25 10:54 | 只看该作者
asd-123 发表于 2019-2-25 07:44
status equ 3h
portd  equ 08h
trisd  equ 88h

而且,你应该在代码的第一行就配置了好单片机的一些配置信息:像低电压复位,使用晶振,看门狗之类的
我把我以前写的一个24C01的全部代码发给你参考一下,代码是已经验证过的,没有问题 PIC16F877A_IIC.rar (2.56 KB, 下载次数: 8)
回复

使用道具 举报

8#
ID:248656 发表于 2019-2-25 18:14 | 只看该作者
上个程序是修改过好的,以前有rp0 equ 5h,不能用
回复

使用道具 举报

9#
ID:401564 发表于 2019-2-25 20:17 | 只看该作者
asd-123 发表于 2019-2-25 18:14
上个程序是修改过好的,以前有rp0 equ 5h,不能用

不知道你用的是什么型号的单片机,5H应该是个端口的地址,而不是RP0,RP0是位5,不一样的概念呀
回复

使用道具 举报

10#
ID:401564 发表于 2019-2-25 20:19 | 只看该作者
asd-123 发表于 2019-2-25 18:14
上个程序是修改过好的,以前有rp0 equ 5h,不能用

#define            RP0        STATUS,5
你应该是这样定义的,这样的话,就可以直接清除和置位RP0位了
BCF RP0
BSF RP0
就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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