历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2020年02月12日 | PIC单片机中的bank和PC问题

2020-02-12 来源:eefocus

简介: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的值。

推荐阅读

史海拾趣

Coherent Inc公司的发展小趣事

1966年,Coherent Inc.由一群斯坦福大学的研究人员共同创立,其中包括物理学家James Hobart。初创时期的公司致力于激光技术的研究和开发,逐渐积累起了丰富的技术底蕴。这种对技术的执着追求和不断探索,为公司的后续发展奠定了坚实的基础。

Central Semiconductor公司的发展小趣事

Central Semiconductor一直致力于创新分立元器件的研发和生产。公司凭借其深厚的技术积累和市场洞察力,成功开发出一系列具有节省空间、电气规格灵活等特点的创新产品。这些产品不仅满足了客户对高性能、高可靠性的需求,也为Central在竞争激烈的市场中赢得了良好的声誉。

此外,Central还注重根据客户的特殊需求进行定制开发。无论是筛选电气规格、特殊晶圆扩散还是开发定制元器件,Central都能迅速响应并提供满足客户需求的解决方案。这种以客户为中心的服务理念也为Central赢得了众多客户的信任和合作。

Gentron Corp公司的发展小趣事
如果闪烁速度不稳定,可以尝试调整定时器的电阻和电容值,以改变振荡频率。
EBG RESISTORS LLC公司的发展小趣事

随着技术的不断进步,EBG RESISTORS LLC公司不断投入研发,致力于推动电阻器技术的创新。在XXXX年,公司成功研发出一种新型高精度电阻器,具有更高的稳定性和更低的温度系数。这一创新产品迅速在市场上获得了广泛应用,极大地提升了公司的市场竞争力。

Base Two (2) Systems公司的发展小趣事

品质是Base Two (2) Systems的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产制造的每一个环节都进行严格把控。这种对品质的执着追求,使得公司的产品在市场上赢得了客户的广泛信赖。许多客户与公司建立了长期稳定的合作关系,成为公司发展的重要支撑。

EA Elektro-Automatik公司的发展小趣事

近年来,中国市场对EA Elektro-Automatik来说变得越来越重要。公司高层认识到了中国市场的巨大潜力和重要性,并制定了在中国市场继续投资和实现增长的明确计划。EA Elektro-Automatik的代表在多个场合与中国政府和行业领导进行交流和合作,努力拓展中国市场。目前,中国市场已经占据EA Elektro-Automatik全球业务的相当一部分份额,并有望在未来继续保持增长。

问答坊 | AI 解惑

请问是否支持mmc/sdcard就能从sdcard启动呢?这个过程是怎样的

比如samxung 6410之类有从mmc/sdcard启动的寄存器定义,并且板子做了开关,这是怎么回事,叫它从sdcard启动它就从sdcard启动吗,,这个过程能给讲一下吗 其他的arm或者非arm的芯片,其他公司的arm芯片呢,又是怎样从sdcard启动的啊, sdcard上放上 ...…

查看全部问答>

请教关于S3C2440A+MDK ULINK2环境下JTAG的故障?

我的开发环境是S3C2440A+KEIL MDK ULINK2 当OM[1:0]=01时,JTAG工作是正常的,能调试;但OM[1:0]=00时就不正常了,出现“can not stop ARM device , check JTAG cable ”,我已经改了JTAG的时钟,还是不行,请高手指点。…

查看全部问答>

一个10G的硬盘分区(如: F盘),有多少个扇区(Sector)? 是怎样划分的?

一个10G的硬盘分区(如: F盘),有多少个扇区(Sector)? 是怎样划分的?…

查看全部问答>

很好很全的单片机学习资料

很好很全的单片机学习资料,个人收藏。。拿 出来晒晒。。…

查看全部问答>

cyclone IV AS 和 jtag 配置问题。求助

cyclone IV AS 和 jtag 配置问题。求助 开发环境QUARTUS II 10.1SP1 . 器件:altera        ep4ce22e22c8(144脚 QFP封装)  配置芯片M25P16(兼容EPCS16的) 下载线是USB 下载线(在c III 上用完全是O ...…

查看全部问答>

搞清扫描版---《电子示波器及其应用 》欢迎收藏!

示波器是一种用途十分广泛的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图象,便于人们研究各种电现象的变化过程。 下面给大家推荐一本学习示波器电子书,书有点老,但讲的都是基础,新童靴可以认真看看,,肯定有用,,,  &n ...…

查看全部问答>

德州仪器.郑可忠《物联网的无线连接》

德州仪器.郑可忠《物联网的无线连接》 [摘要]        TI德州仪器BD业务拓展.郑可忠:随着物联网产品在我们的生活中越来越流行,这里我将展示德州仪器的无线连接解决方案在不同领域中的应用并介绍TI的开发工具和软件 ...…

查看全部问答>

奔腾B50车身电脑通病

故障:转向灯常亮,顶灯常亮。。。 描述:下雨后出现然后跑一跑就好了。。。 车进场后接车留电话开始检修,这种问题都快修烂了不用再去检查就知道是什么问题 直接检查车身电脑绝对是进水腐蚀了,拔下板子  车设计缺陷, 解决办法把 ...…

查看全部问答>

stvd 中的extern 变量的问题

我在main.c定义了  int a=3; 但是在 it.c 中extern int a; 为什么不正确,报错如下,要是想在it.c中得到main。c的a变量怎么办 #error cpstm8 stm8s_it.c:459(9+5) missing ; #error cpstm8 stm8s_it.c:460(10+5) missing ;…

查看全部问答>