历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2018年01月07日 | AT93C46汇编读写示例程序

2018-01-07 来源:eefocus

AT93C46汇编读写示例程序; 说明: 软件包仅适用于93C46 8位存储器结构状态,软件包可嵌入到80C51 ROM中任一空间。 
; fosc = 12MHz 
;---------------------------------------------------------- 
    R31    EQU    1FH 

    CS    EQU    P1.0    ;片选端 
    SK    EQU    P1.1    ;模拟时钟信号输出端 
    DI    EQU    P1.2    ;串行数据输出端 
    DO    EQU    P1.3    ;串行数据输入端 
;---------------------------------------------------------- 
    ORG    0000H 
    JMP    MAIN 

    ORG    0100H 
MAIN: 
    MOV    R0,#7FH 
    CLR    A 
    MOV    @R0,A 
    DJNZ    R0,$-2 
    MOV    SP,#60H 
MAIN1: 
    MOV    R0,#30H 
    MOV    R7,#16 
    MOV    A,#1 
    MOV    @R0,A 
    INC    R0 
    INC    A 
    DJNZ    R7,$-3 
             
    CALL    EWNE        ;擦写允许 
    MOV    A,#01100000B    ;地址"11xxxxx" 
    CALL    INADR        ;输出地址 
     
    CALL    EWNE        ;片擦除(将整个存储器置为"1") 
    MOV    A,#01000000B    ;片擦除地址 
    CALL    INADREW        ;输出地址         
    CALL    DLY10ms     
     
    CALL    RD16        ;读指定地址单元的数据 
             
    CALL    WRITE        ;将数据写入指定地址单元 
     
    CALL    ERASE        ;擦除(将指定地址单元置为"1")     
    MOV    A,#01H        ;地址 
    CALL    INADREW        ;输出地址         
    CALL    DLY10ms 
     
    CALL    RD16        ;读 
     
    CALL    EWNE        ;擦/写禁止 
    MOV    A,#0        ;地址"00xxxxx" 
    CALL    INADR        ;输出地址 
         
    JMP    MAIN1 
;========================================================== 
;---------------------------------------------------------- 
;将存在80C51内RAM 30H为首地址的16字节数据依次写入93C46首址00H的EEPROM 
;注意: 93C46上电复位后,芯片处于写保护状态,所以在擦写操作前,应开启"写允许". 
;否则无法写入数据. 

WRITE:     
    MOV    A,#01100000B    ;地址"11xxxxx" 
    CALL    INADR        ;输出地址     
    MOV    R0,#30H        ;置源数据区首址 
    MOV    R1,#00H        ;置93C46写入单元首址 
    MOV    R7,#16        ;字节数 
    CALL    WRIT6     
    RET 
;---------------------------------------------------------- 
;将AT93C46 首址为00H的16字节数据读出并存入80C51以30H为首址的内RAM中 

RD16:    MOV    R0,#20H        ;置数据存储区首址 
    MOV    A,#00H        ;置93C46读出单元首地址     
    MOV    R7,#16        ;字节数送R7 
    LCALL    STATRD        ;启动读 
    LCALL    INADR        ;输出93C46读出单元首址 
RD160:     
    LCALL    READ        ;读出一个字节数据 
    MOV    @R0,A        ;存一个字节数据 
    INC    R0        ;指向下一存储单元地址 
    DJNZ    R7,RD160    ;判16字节数据读完否?未完继续 
    CLR    CS        ;16字节数据读完,置93C46低功耗备用状态 
    CALL    DLY10ms        ;延时10ms,以便进行芯片的其它功能操作 
    RET 
;---------------------------------------------------------- 
;入口: 数据区首址在R0,93C46单元地址在R1,写入的字节数在R7中 
     
WRIT6:             
    LCALL    STATWR        ;启动写 
    MOV    A,R1        ;置93C46写入单元地址 
    LCALL    INADR        ;输出93C46写入地址单元 
    MOV    A,@R0        ;读写入数据 
    LCALL    WRIT        ;写入一个字节     
    LCALL    DLY1ms        ;延时1ms 
    INC    R0        ;指向8051下一个数据地址 
    INC    R1        ;指向93C46下一个写入单元地址 
    DJNZ    R7,WR61        ;判6字节数据写完否?未完继续     
    CLR    CS        ;93C46进入备用状态,降低功耗 
    CALL    DLY10ms 
    RET 
WR61:    JB    DO,WRIT6    ;判REDAY/BUSY,DO=1,写入下一字节 
    SJMP    WR61        ;DO=0,转等待 

;========================================================== 
; 启动读子程序 
; 说明: STATRD子程序输出启动和读操作代码"110" 
;---------------------------------------------------------- 
STATRD: 
    CLR    CS    ;片选置低 
    CLR    SK    ;时钟置低 
    SETB    CS     
    SETB    DI    ;置启动"1" 
    SETB    SK    ;时钟上升沿输出启动信号"1" 
    CLR    SK 
    SETB    SK    ;时钟上升沿输出"1" 
    CLR    SK 
    CLR    DI    ;置输出"0" 
    SETB    SK    ;时钟上升沿输出"0" 
    CLR    SK    ;时钟置低 
    RET 
;----------------------------------------------------------     
; 启动写子程序 
; 说明: STATWR子程序输出启动和写操作代码"101" 
;---------------------------------------------------------- 
STATWR: 
    CLR    CS    ;片选置低 
    CLR    SK    ;时钟置低 
    SETB    CS    ;置片选 
    SETB    DI    ;置启动"1" 
    SETB    SK    ;时钟上升沿输出启动信号"1" 
    CLR    SK 
    CLR    DI    ;置输出"0" 
    SETB    SK    ;时钟上升沿输出"0" 
    CLR    SK 
    SETB    DI    ;置输出"1" 
    SETB    SK    ;时钟上升沿输出"1" 
    CLR    SK    ;时钟置低 
    RET 
;---------------------------------------------------------- 
; 擦写允许/禁止启动和操作代码 "100" 
; 该子程序可用于: 擦写允许(EWEN)、写禁止(EWDS)、片写(WRAL)、片擦除(ERAL), 
; 只是各自的地址不同而也. 
; 擦写允许/禁止操作代码"100",地址"11xxxxx"/"00xxxxx" 
;---------------------------------------------------------- 
EWNE:         
    CLR    CS    ;片选置低 
    CLR    SK    ;时钟置低 
    SETB    CS    ;置片选 
    SETB    DI    ;置启动"1" 
    SETB    SK    ;时钟上升沿输出启动信号"1" 
    CLR    SK 
    CLR    DI    ;置输出"0" 
    SETB    SK    ;时钟上升沿输出"0" 
    CLR    SK 
    CLR    DI    ;置输出"0" 
    SETB    SK    ;时钟上升沿输出"1" 
    CLR    SK    ;时钟置低 
    RET 
;---------------------------------------------------------- 
; 擦指令ERASE  启动和操作代码 "111" 
;---------------------------------------------------------- 
ERASE:         
    CLR    CS    ;片选置低 
    CLR    SK    ;时钟置低 
    SETB    CS    ;置片选 
    SETB    DI    ;置启动"1" 
    SETB    SK    ;时钟上升沿输出启动信号"1" 
    CLR    SK 
    SETB    DI    ;置输出"1" 
    SETB    SK    ;时钟上升沿输出"0" 
    CLR    SK 
    SETB    DI    ;置输出"1" 
    SETB    SK    ;时钟上升沿输出"1" 
    CLR    SK    ;时钟置低 
    RET 
;----------------------------------------------------------     
; 输出读写单元地址子程序 
; 入口: 7位地址已存在A中D6~D0 
;---------------------------------------------------------- 
INADR: 
    MOV    R2,#7    ;置写入地址位数(存储单元8位结构时,地址为7位) 
    RLC    A    ;先左移一位,地址移至D7~D1,D0无效 
IR1:    CLR    SK    ;时钟置低 
    RLC    A    ;左移一位 
    MOV    DI,C    ;存入DI端口 
    SETB    SK    ;时钟上升沿输出至93C46DI端 
    DJNZ    R2,IR1    ;判断7位地址写完否,未完继续     
    RET 
;---------------------------------------------------------- 
; 输出擦单元地址子程序 

INADREW: 
    CALL    INADR 
    CLR    CS 
    NOP 
    SETB    CS 
    JNB    DO,$    ; DO=0,表示编程正在进行; 
            ; DO=1,表示该指定地址的寄存器单元已擦完,可以执行下一条指令。 
    RET 
;---------------------------------------------------------- 
; 读一个字节子程序 
; 出口: 8位数据存在A中 
;---------------------------------------------------------- 
READ:    CLR    SK    ;时钟置低 
    MOV    R2,#8    ;置读入位数8 
RD1:    SETB    SK    ;时钟上升沿读入一位数据 
    NOP 
    MOV    C,DO    ;存入Cy 
    RLC    A    ;左移入A中     
    CLR    SK    ;时钟置低     
    DJNZ    R2,RD1    ;判8位数据读完否?未完继续 
    RET 
;---------------------------------------------------------- 
;确良写一个字节子程序 
; 入口: 写入数据须事先存入A中. 
; 若需写入多个字节数据,须在1ms后,93C46 DO 端出现高电平后才能重新启动写入. 
;---------------------------------------------------------- 
WRIT:     
    MOV    R2,#8    ;置写入位数8 
WR1:    CLR    SK    ;时钟置低 
    RLC    A    ;A中数据移一位至Cy中 
    MOV    DI,C    ;数据传送至DI端 
    nop 
    SETB    SK    ;时钟上升沿输出至93C46 
    DJNZ    R2,WR1    ;判8位数据写完否?未完继续 
    CLR    CS    ;8位数据写完,CS下降沿启动93C46擦写 
    SETB    CS    ;CS次高位,以使DO端REDAY/BUSY状态位号有效 
    RET 
;---------------------------------------------------------- 
DLY1ms:                ;延时1ms子程序 
    MOV    R31,#29        ; 
L2:    PUSH    R31 
L3:    DJNZ    R31,L3 
    POP    R31 
    DJNZ    R31,L2          
    RET 
DLY10ms:            ;延时10ms子程序 
    MOV    R31,#100     
L20:    PUSH    R31 
L30:    DJNZ    R31,L30 
    POP    R31 
    DJNZ    R31,L20          
    RET 
;========================================================== 
END


推荐阅读

史海拾趣

艾华集团(AISHI)公司的发展小趣事

1985年,艾立华和王安安怀揣着3700元的全部家当,毅然决然地踏上了创业之路。他们租下了两间不到50平方米的废弃小平房,与几名工人一起,手工制作铝电解电容器。由于资金、技术和市场的限制,艾华集团最初只能接一些其他企业不愿意做的、用量很少但又刚需的项目。然而,即便是在这样的困境中,艾立华和王安安也始终坚持对产品品质的精益求精,他们深知,只有高品质的产品才能在市场上立足。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

Bellin公司的发展小趣事

非常抱歉,我无法提供Bellin公司在电子行业里的5个发展起来的相关故事,因为在我所掌握的信息中,Bellin公司并非一个在电子行业内广泛知名的品牌。另外,我注意到您提到的“Bellin”可能与您想要了解的“Belling”或“BellRing Brands”等公司有混淆。

首先,Belling是一家英国的厨电品牌,以其高端产品和在英国市场的卓越表现而闻名。至于其在电子行业的发展故事,我暂时无法提供,因为Belling主要专注于厨电领域,与电子行业的直接关联并不显著。

其次,BellRing Brands是一家全球便利营养品行业的领导者,其主营业务与电子行业并无直接联系。该公司主要通过提供高营养的产品来改善消费者的生活,其业务范围主要集中在营养品领域。

对于其他可能的“Bellin”公司,我无法给出确切的信息,因为“Bellin”并非一个我所熟悉的电子行业品牌。如果“Bellin”是您所知道的特定公司,建议您直接访问该公司的官方网站或查阅相关新闻报道,以获取更准确和详细的发展故事。

在描述公司的发展故事时,通常会涉及公司的创立背景、产品创新、市场竞争、扩张策略以及行业影响等方面。每个故事都应该基于事实,客观描述公司的成长历程和关键事件,避免添加主观评价或褒贬色彩。

如果您对电子行业内的其他公司或品牌的发展故事感兴趣,我可以尝试提供相关信息,但请确保提供正确的公司名称或品牌名称,以便我能够给出准确的回答。

Carling Technologies公司的发展小趣事

在发展过程中,Carling Technologies还通过收购其他企业来增强自身实力。例如,公司收购了Maretron品牌,将其纳入旗下,并充分利用其在船舶监控和控制解决方案方面的优势,为前沿产品和解决方案的持续开发提供支持。这种收购与品牌整合的策略不仅丰富了公司的产品线,也扩大了其在特定市场的影响力。

FILTRAN公司的发展小趣事

Carling Technologies于1920年创立,早期专注于电气和电子开关以及组件的制造。凭借创始人的远见卓识和团队的努力,公司逐渐在行业中崭露头角。在创立初期,Carling Technologies就以其高质量的产品和创新的设计赢得了客户的信赖。通过不断的研发和技术升级,公司逐渐在电气和电子开关领域建立了自己的地位。

Bridgelux公司的发展小趣事

XXXX年,Bridgelux与Cree公司爆发了一场专利纠纷。Cree公司指控Bridgelux侵犯了其LED专利技术。经过一段时间的激烈争辩,双方最终达成了和解协议。Bridgelux同意支付一定的赔偿金,并获得了部分专利的授权。这次纠纷虽然给Bridgelux带来了一定的经济损失,但也使其更加注重知识产权保护,提升了自身的技术实力。

问答坊 | AI 解惑

基于AVR的电阻测量电路设计

求助关于基于AVR或者51的电阻测量电路设计方案,十分感谢…

查看全部问答>

stm资料五STM8S和STM32技术资料

一个光盘的资料快传完了,这个是重量级资料,呵呵     …

查看全部问答>

UCF时钟约束例子

module design_top(clk, A, B, C, D, E); endmodule NET \"clk\" TNM_NET = clk; TIMESPEC TS_clk = PERIOD \"clk\" 20 ns HIGH 45% INPUT_JITTER 1 ns;  周期20ns,占空比45%,时钟抖动1ns NET \"A\" OFFSET = IN 10 ns VALID 20 ns BEFOR ...…

查看全部问答>

secWall在手机研发中的作用

通讯行业研发源代码如何保密   手机通信行业的研发部门,广泛使用各种编译器,如keil,、ADS/RealView、MPLAB、Windows Mobile…,版本不统一。相当多公司内部通过网络协作开发,各种软件生成的文件需要交叉引用,应用环境十分复杂。通常采用 ...…

查看全部问答>

CE批处理时的时间变量问题

%DATE%的格式为 2010-03-29 星期一 我不想要这个星期的显示,只要想yyyy-mm-dd这种格式 如何修改这个格式? …

查看全部问答>

GTM900数据通信问题,关于at%ipsend传输数据

前面gprs网络连接等都没问题,就是在at%ipsend发送数据,不能直接发送字符,好像要经过转换,这个方面我不太清楚,求高手解答。 at%ipsend=\"ffffffff\"是可以发送的,这是什么数据格式?有么有直接发送字符的方法?…

查看全部问答>

关于延时的疑问

各位大侠,我是个超级无敌的新手,有个关于延时的问题,理解不了,请各位大侠赐教   第一个: a=50; if (--a<=0); b++;   第二个: a=50; while (a--); b++;   同样是执行50次自减,但是延时的效果要差特别特别多,这 ...…

查看全部问答>

【EEWORLD大学堂TI教室】FAQ

新平台上线总会有这样那样的问题,我们在尽量改进,努力为大家提供更好的用户体验,还请大家多包涵啦 现将一些常见问题放上,请大家参考。   1、新用户注册信息 这个请大家一定认真填写,因为我们会有LaunchPad开发板、抽奖奖品乃至iPad2 ...…

查看全部问答>

一个简单很容易实现火炬样式LED手电筒

一个简单很容易实现火炬样式LED手电筒,从一个国外网站上看到的。下面的介绍是用gg翻译的,不通顺,,哈哈,,大家凑合着看,也不知道老外是用什么软件画出来的,,     真正的光明和持久的LED机型是相当昂贵和沉重的,廉价的传统似乎总 ...…

查看全部问答>

求高手推荐入门级开发板

各位大侠,本人想学习FPGA,哪位帮忙推荐入门级开发板。最好是Altera的,低端的就行。。。。…

查看全部问答>