写入 PIC 上的 EEPROM

2023-12-29

这里有PIC单片机编程器吗?

我正在学习一些使用 pickit2 和它附带的 16F690 芯片的 PIC 微控制器编程。我目前正在尝试各种设施。我可以成功read如果我在 MPLAB 中设置 EEPROM vaklue,则代码中来自 EEPROM 的一个字节,但我似乎无法使用 PIC 本身修改该值。根本没有发生任何事情,我也不会读回修改后的值,我总是得到原始值,这对我来说意味着写入不起作用?

这是我该部分的代码,我错过了什么吗?我知道我做了很多不必要的银行切换,我添加了其中的大部分,以确保在错误的银行上不是问题。

        ; ------------------------------------------------------
        ; Now SET the EEPROM location ZERO to 0x08
        ; ------------------------------------------------------

        BANKSEL EEADR
        CLRF    EEADR           ; Set EE Address to zero

        BANKSEL EEDAT
        MOVLW   0x08            ; Store the value 0x08 in the EEPROM
        MOVWF   EEDAT

        BANKSEL EECON1
        BSF     EECON1, WREN    ; Enable writes to the EEPROM

        BANKSEL EECON2
        MOVLW   0x55            ; Do the thing we have to do so
        MOVWF   EECON2          ; that writes can work
        MOVLW   0xAA
        MOVWF   EECON2

        BANKSEL EECON1      
        BSF     EECON1, WR      ; And finally perform the write

WAIT
        BTFSC   EECON1, WR      ; Wait for write to finish
        GOTO    WAIT

        BANKSEL PORTC           ; Just to make sure we are on the right bank

在第 122 页16F690 数据表 http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en023112,它详细介绍了写入 EEPROM 的正确方法:

BANKSEL EEADR                   ;
MOVF    DATA_EE_ADDR, W;
MOVWF   EEADR          ;Data Memory Address to write
MOVF    DATA_EE_DATA, W;
MOVWF   EEDAT                   ;Data Memory Value to write
BANKSEL EECON1                  ;
BCF     EECON1, EEPGD ;Point to DATA memory
BSF     EECON1, WREN   ;Enable writes
BCF     INTCON, GIE             ;Disable INTs.
BTFSC   INTCON, GIE             ;SEE AN576
GOTO    $-2
; BEGIN REQUIRED SEQUENCE
MOVLW   55h            ;       
MOVWF   EECON2         ;Write 55h
MOVLW   AAh                     ;
MOVWF   EECON2                  ;Write AAh
BSF     EECON1, WR              ;Set WR bit to begin write
BSF     INTCON, GIE             ;Enable INTs.
SLEEP                  ;Wait for interrupt to signal write complete
; END REQUIRED SEQUENCE
BCF     EECON1, WREN   ;Disable writes
BANKSEL 0x00           ;Bank 0

我注意到你特别错过了这一行:

 BCF     EECON1, EEPGD ;Point to DATA memory

If EEPGD总是设置的,那么您将尝试写入程序存储器(也称为覆盖闪存程序存储器),除非您特意专门启用它,否则它总是会失败。

除此之外,据我从阅读您的代码来看,其他一切看起来都很好。没关系,你可以投票EECON1.WR而不是设置中断。这比让设备进入睡眠状态会消耗更多的电量,但当然,您应该一次只担心一件事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

写入 PIC 上的 EEPROM 的相关文章

随机推荐

  • 将条纹样式添加到项目列表

    使用 KnockoutJS 对列表进行条带化的最佳方法是什么 下面的 div 上的类应该是偶数或奇数 具体取决于它在列表中的位置 并在添加或删除项目时更新 div class Headlines loader div
  • Xamarin 的 Genymotion Android 模拟器

    我在使用 Genymotion Android 模拟器进行 xamarin 开发时遇到问题 我已经安装了 Genymotion 桌面应用程序和其中的几个 Android 设备 每当我通过 Genymotion 桌面应用程序运行任何已安装的设
  • 原型混乱:父原型属性受子原型影响

    我正在读一本关于 OOP javascript 的书 并被其中一个示例困住了 在示例代码的第一个版本中 一个新实例Shape构造函数被创建并且toString方法被调用 这toString方法返回 三角形 这是name的财产Triangle
  • 为什么 write.csv 和 read.csv 不一致? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Android 中手动重新排序 ListView?

    我在 Android 中有一个 ListView 需要能够手动重新排序 Android 的音乐播放器应用程序就是一个示例 您可以更改播放列表中曲目的顺序 我知道如何以编程方式更改 ListView 的顺序 但不知道如何在音乐播放器应用程序中
  • 如何发送PDF文件到前端?

    我的系统上有一个保存的 PDF 文件 我正在尝试使用 node express 将文件发送到前端 我正在将文件作为流 二进制字符串 发送到前端 但是当在前端运行一些代码以将 PDF 下载到用户计算机上时 PDF 文件显示为空白 这是我在服务
  • 在 Spark 中对多个 DataFrame 执行 join

    我有 3 个由 3 个不同进程生成的数据帧 每个数据框都有相同名称的列 我的数据框看起来像这样 id val1 val2 val3 val4 1 null null null null 2 A2 A21 A31 A41 id val1 va
  • 如何在 postgres 数据库上切换两个 ID [PK]?

    我想更改 Postgres 上两行的 ID 以切换它们 它们已经被定义为外键 所以我不能使用第三个数字来进行切换 如何在一个 SQL 查询或事务中执行此操作 Example UPDATE mytable SET id 2 WHERE ID
  • DateTime.AddDays() 未按预期工作

    我有这个简单的程序 DateTime aux new DateTime 2012 6 12 12 24 0 DateTime aux2 new DateTime 2012 6 12 13 24 0 aux2 AddDays 1 Consol
  • 在 Rails cookie 中存储/检索值

    我创建了一个 SessionHelper 模块 它看起来或多或少像这样 module SessionHelper def create cookie cookies signed token value gt expires gt 1 ho
  • 将面向铁路的故障跟踪转换为 Rx 友好错误

    我正在使用一个库 它将结果作为双轨值 成功和失败 Observable map函数体我经常从函数的成功跟踪中得到可观察的结果 但我不知道如何处理它们 在Observable map body 换句话说 我经常陷入结果如下所示的情况 当然这是
  • 跨 gridspec 子图/轴共享 xlabel(部分行)

    我在三个子图上共享一个居中的 xlabel 时遇到一些间歇性问题 这三个子图 1 仅跨越 gridspec 行的一部分 2 其相对于彼此的宽度可能会有所不同 使用docs https matplotlib org stable tutori
  • 从两列创建一个矩阵

    我正在尝试从 Excel 工作表中的两列创建一个矩阵 第一列是具有多个重复实例的键 第二列引用与该键相关的不同值 我希望能够创建第二列中所有值的矩阵 以引用它们针对所有关键实例配对在一起的次数 a b 1 red 1 blue 1 gree
  • 使用 PHP 更改 CSS 值

    例如 我有这个 CSS 脚本 然后 我想将标题值更改为 这些值存储在数据库中 让我困惑的是哪一个应该是最好的选择 使用 PHP 脚本或 CSS 甚至 javascript 我希望它根据数据库中的 CSS 值进行更改 我可以在需要时再次更改
  • 在android中旋转图像时调整图像大小

    我正在处理 android 项目 在该项目中我想旋转图像并触摸到某个固定的枢轴点 我已经完成了所有这些事情 但我面临一个问题 当我尝试旋转图像时 图像位图被调整大小 我不知道为什么会发生 如果有人有的话请给我一个想法来帮助解决这个问题 my
  • 如何从控制台运行twisted?

    我在 Windows 7 上使用 Python 3 和 Anaconda 我安装了 Twistedconda install twisted 现在我正在尝试运行twisted or twistd 从控制台 但我收到此错误 twisted 不
  • 如何使用 Javascript 从 CDN 加载外部 css 文件?

    简而言之 我想在 a 上加载 bootstrap css 文件web page https secure helpscout net members register 13 在互联网上 不是在我的网站上 在浏览器控制台中使用 Javascr
  • 在 Internet Explorer 中添加事件监听器

    Internet Explorer 9 中的元素对象相当于什么 if Element prototype addEventListener Element prototype addEventListener function 它在 Int
  • 什么情况下需要调用两次GC.Collect

    我们有一个 WPF 应用程序 基于 Unity 具有 MMVVVM 模式 在应用程序生命周期中可以有多个项目生命周期 在每个项目生命周期之后我们都会进行手动 Tear Down 并尝试释放 ViewModel 的所有引用 对于 Unity
  • 写入 PIC 上的 EEPROM

    这里有PIC单片机编程器吗 我正在学习一些使用 pickit2 和它附带的 16F690 芯片的 PIC 微控制器编程 我目前正在尝试各种设施 我可以成功read如果我在 MPLAB 中设置 EEPROM vaklue 则代码中来自 EEP