PIC单片机中的bank和PC问题

发布者:HeavenlyWonder最新更新时间:2020-02-12 来源: eefocus关键字:PIC单片机  bank  PC问题 手机看文章 扫描二维码
随时随地手机看文章

简介:PIC单片机的bank和PC的问题往往在我们进行查表时和BANK设置时很容易出错。下面小编就大家来着重来介绍下面这俩点。希望能对大家有所帮助。


1、 BANK设置错误:

先来看一段程序:

include

PORTDB EQU 20H

……

START

movlw b‘11110000’

movwf PORTDB

clrf TRISD

MAIN

bcf STATUS,C

rlf PORTDB,1

btfsc STATUS,C

bsf PORTDB,0

movf PORTDB,W

movwf PORTD

call DELAY

goto MAIN

……

上面的是一个将D口的发光二极管循环点亮的小程序,实际运行发现并不能达到点亮的效果。通过设置断点和观察变量的手段发现,单片机在执行“clrf TRISD”这一语句后,TRISD寄存器的值为0FFH,而PORTD的值被清成了0。这是因为未设置BANK的缘故,此时BANK=0,而TRISD寄存器却是位于BAKN1的。因此,在该语句前要加上一句“bsf STATUS,RP0”,使BANK=1。


经过改动,运行后发现程序仍然不正常。同样使用设置断点和观察变量的手段来分析程序,发现同样由于BANK设置的错误,单片机并未对位于BANK0的PORTD、 PORTDB操作。因此,在该语句前要加上一句“bcf STATUS,RP0”,使BANK=0。经过这样的调整后,程序运行正常了。


实际上,这样的错误很容易发生,在编写比较复杂的需要常常切换BANK的程序时更是如此。建议初学者在写程序时在有可能的情况下,在每次对BANK0以外的寄存器操作完成后都将BANK切换回BANK0。这样做虽然会麻烦一些,但会减少错误的发生,使调试更为简单一些。


2、 PC操作错误:

在进行查表操作时需要对PCL进行操作,这项操作也比较容易出错。举个例子来说:

……

00CA bcf PCLATH,0

00CB movf RTCCSIG,W

00CC addwf PCL,1

00CD goto main

00CE goto RtccS1

00CF goto RtccS2

00D0 goto Rtccs3

00D1 goto Rtccs4

……

0130 bsf PCLATH,0

0131 movf RTCCSIG1,W

0132 addwf PCL,1

0133 goto SetHour

0134 goto SetMins

……

上面的程序是高奇ICD教学实验套件的演示程序CLKTEST.ASM编译完成之后的List文件中的一段,前面的4位数据是16进制数,代表了该程序行在单片机内程序存储器的装载位置。其中00CA句和0130句保证了执行“addwf PCL,1”语句后PC能跳转到正确的位置,感兴趣的朋友可以将这两句屏蔽后看一下结果。


在PIC16F877单片机中PCLATH寄存器是一个低5位有效的寄存器,单片机在执行“addwf PCL,1”语句时,会将PCLATH和PCL寄存器的值(PCLATH:PCL)一起送入程序计数器PC。以上面的程序0132H句为例,此时PCL=32H如果此时PCLATH=00H,RTCCSIG1=1则执行完该句后PC=PCLATH:PCL=0033H,这样在下一个指令周期到来时就发生了错误。本来该执行第0134H句的,却变成了执行第0034H句。同样的,我们能够知道第00CAH句的作用。避免发生这样错误的方法是:在调试程序的时候调出List文件,特别关注一下有这类操作的语句,再根据实际的情况来决定PCLATH的值。

关键字:PIC单片机  bank  PC问题 引用地址:PIC单片机中的bank和PC问题

上一篇:PIC单片机程序基本结构框架
下一篇:PIC单片机编程格式和风格

推荐阅读最新更新时间:2024-11-17 17:31

PIC单片机存储体0或1的选用说明(程序)
  PIC单片机中级产品PIC16C6X的数据存储器通常分为两个存储体,即存储体0(Bank0)和存储体1(Bank1)。每个存储体都是由专用寄存器和通用寄存器两部分组成的。两个存储体中的一些寄存器单元实际上是同一个寄存器单元,却又具备有不同的地址。例如本版介绍的PIC16F84的状态寄存器STATUS-Reg的两个地址是03H和83H。又如通用寄存器也是如此。   不同型号的PIC单片机,其数据存储器的组成(即功能)是不完全相同的,所以设计人员一旦选用了某个PIC单片机的型号后,常要查找该单片机的数据存储器资料,以便编程用。   笔者以PIC16F84在MPLAB集成开发软件的环境下编写的源程序中,有关RB口(RB7、RB6
[单片机]
PIC单片机入门_输入输出端口详解
1.引言: PIC单片机引脚图: 在PIC16F87X 单片机中,28引脚型号的单片机有3 个I/O端口,分别是RA、RB和RC;40引脚型号单片机有5个 I/O端口,分别是RA、RB、RC、RD和RE。其中RA有6条口线,RE有3条口线,其余都有 8条口线。 PIC16F87X端口口线既可作普通I/O引脚,又可作某些部件或外围模块的外接引脚,比如端口引脚RC.4既可用作普通I/O脚,又可以作为SPI串行通信的数据输入引脚。这里只介绍端口的基本功能和基本用法,端口的其他复合功能,在以后介绍。 2.与输入/输出端口相关的2个寄存器 PIC单片机中各个I/O端口都具备两个基本的专用寄存器:端口数据寄存器和端口方向寄存器
[单片机]
PIC单片机浮点数与十进制数转换
  重点说明浮点数的格式,十进制数与浮点之间的相互转换以及程序设计。   在我们设计的仪表中采用PIC系列单片机,碰到了浮点数的运算问题,查阅其有关资料发现,其浮点数的格式及其与十进制数之间的转换,与我们常用的MCS-51单片机所提供的三字节、四字节浮点数完全不同,本文将说明其浮点数的格式及其与十进制数之间的转换和程序设计步骤。   1 浮点数的格式   Microchip公司单片机所采用的浮点数格式是IEEE-754标准的变异型。32位浮点数格式为:      其中:×表示一位二进制数0或1;eb 为指数的偏差;S为浮点数的符号位,S=0为正数,S=1为负数;小数点“·”在符号位S的右边;BY0 BY1 BY2
[单片机]
<font color='red'>PIC单片机</font>浮点数与十进制数转换
基于PIC单片机的测温网络的开发
简介:介绍一种利用PIC单片机和DS18B20构造单总线测温网络的方法,文章给出了系统硬件结构和软件流程图。 本测温网络应用在磁致伸缩液位传感器上,利用附在不锈钢管内壁的不同位置上的三个DS18B20,测量不同液位层的温度 。 1硬件设计 整个系统由上位机和下位机组成。上位机用PC机,下位机用PIC16C63(原理框图见图1)。系统硬件部分主要有PIC16C63、AT24C01、DS18B20、显示电路、电源电路、时钟电路和通信电路。用户需要时可通过上位机下达测量命令,下位机进行测量并把结果送给上位机或显示在液晶显示模块上。三个温度点任何一路发生故障,都会传给上位机一个默认值,用户可以据此在线更换新的温度传感器,系统能够自
[单片机]
基于<font color='red'>PIC单片机</font>的测温网络的开发
PIC单片机I2C的应用(24LC02)
I2C总线特点 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 2 I2C总线工作原理 I2C总线上的数据稳定规则,SCL为高电平时SDA上的数据保持稳定,SCL为低电平时允许SDA变化。如果SCL处于高电平时,SDA上产生下降沿,则认为是起始位,
[单片机]
<font color='red'>PIC单片机</font>I2C的应用(24LC02)
PIC单片机一路AD的初始化方法
void delay(unsigned int x) { unsigned int a,b; for(a=x;a 0;a--) for(b=30;b 0;b--); } void ad() //采集函数 { INTCON=0X00; TRISA=0XFF; ADCON1=0B00000000; ADCON0=0B10000001;//AN1,RA0 delay(1); ADGO=1; delay(1); i=ADRESH; //采集到的AD值 ADRESH=0x00; } void Vad() //求AD平均值函数 { ad(); delay(1); j1=i; ad(); delay(1); j2=i; ad(); delay
[单片机]
PIC单片机实现LCD1602滚动显示字符串
初始学习单片机,LCD1602的滚动只能实现2行同时移动,就改了哈,写了个滚动的程序。在测试的时候发现了一个问题,在学习板上能正常运行的代码放到Proteus上问题出错,不能正常显示,最后在网上搜索原因时发现可能是Proteus仿真时对端口有要求,最后将商品修改到PORTB和PORTD就正常了。 这是显示效果https://v.youku.com/v_show/id_XNDI5MDEwOTg4NA==.html?spm=a2h3j.8428770.3416059.1 LCD1602.c //--------------------------------------------------------------- /
[单片机]
<font color='red'>PIC单片机</font>实现LCD1602滚动显示字符串
PIC单片机对复费率电能表时钟误差分析仪系统的设计
1 前 言 随着社会的发展,用电量增大,为提高用电效率,改善用电量不均衡的现象,国内各省市的电力部门己开始全面推出了复费率电能表,计量单位对复费率电能表检定的任务越来越繁重[1-2]。时钟的准确性是分时计量最重要的一部分。目前的计量单位对复费率电能表时钟检定的方法已经逐渐不能满足需要。为了解决目前复费率电能表时钟检定存在的问题,本文设计了一种基于PIC单片机的复费率电能表时钟误差分析仪的系统。该系统是一种便携式时钟误差检定装置,集计时检定,数据处理,数据传送等功能于一体,具有快捷、准确、有效的特点。 l频率测量原理[3-4] 系统测量频率采用的是多周期同步测量方法,这种方法是在直接测频的基础上发展测量方法,在目前的测频系统中得
[单片机]
<font color='red'>PIC单片机</font>对复费率电能表时钟误差分析仪系统的设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved