历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2019年12月11日 | PIC单片机的IIC接口程序

2019-12-11 来源:elecfans

PIC单片机的IIC接口程序


IniTI2CBusMaster

;************************************************************TxmtStartBit   bsf    Bus_Busy                       ; on a start condiTIon bus is busy   bsf    STATUS, RP0                    ; Select page 1   bsf    _SDA                           ; set SDA high   bsf    _SCL                           ; clock is high   call   Delay40uSec                    ; This is necessary for setup TIme   bcf    _SDA                           ; This gives a falling edge on SDA while clock is high   call   Delay47uSec                    ; Necessary for START HOLD TIme   return;************************************************************TxmtStopBit   bsf    STATUS, RP0                    ; Select page 1   bcf    _SCL                           ; clock is low   bcf    _SDA                           ; set SDA low   bsf    _SCL                           ; clock is pulled up   call   Delay40uSec                    ; Setup time for STOP condition   bsf    _SDA                           ; rising edge on SDA while CLOCK is high   call   Delay47uSec                    ; makes sure a START isn't sent immediately after a STOP   bcf    Bus_Busy                       ; The bus isn't busy anymore   return;************************************************************AbortI2C   call   TxmtStopBit                    ; Send a stop bit   bsf    Abort                          ; set the abort bit   return;************************************************************TxmtSlaveAddr   movf   SlaveAddr, w                   ; Move slave address to W   bcf    ACK_Error                      ; reset Acknowledge error bit   movwf  I2CData                        ; move W to I2C Data   bcf    I2CData, LSB                   ; Set for write   btfsc  Slave_RW                       ; If skip then write operation   bsf    I2CData, LSB                   ; Clear for read   call   SendData                       ; send the address   btfss  Txmt_Success                   ; skip if successful   goto   AddrSendFail                   ; Oops, we failed   retlw  TRUE                           ; return trueAddrSendFail   btfss  ACK_Error                      ; was there an error acknowledging   retlw  FALSE                          ; No, so return 0   call   TxmtStopBit                    ; Address not acknowleged, so send STOP bit   retlw  FALSE                          ; Unsuccessful, so return 0

;************************************************************SendData ; We might should make a copy of the data here, the example does but I don't see why!!!   bsf    Txmt_Progress                  ; We are in the middle of transmitting   bcf    Txmt_Success                   ; reset success bit   movlw  0x08   movwf  I2CBitCount                    ; Set I2C Bit Count to 8   bsf    STATUS, RP0                    ; Select page 1TxmtNextBit:   bcf    _SCL                           ; Set clock Low   rlf    I2CData, F                     ; MSB First, Note that I2CData is Destroyed   bcf    _SDA                           ; Set clock based on what the MSB is   btfsc  STATUS,C                       ; Was the MSB a 1   bsf    _SDA                           ; Nope set it high   call   Delay47uSec                    ; guarantee min LOW TIME tLOW & Setup time   bsf    _SCL                           ; set clock high   call   Delay40uSec                    ; guarantee min HIGH TIME tHIGH   decfsz I2CBitCount, F                 ; are we done yet   goto   TxmtNextBit                    ; nope, send the next bit;; Check For Acknowledge;   bcf    _SCL                           ; reset clock   bsf    _SDA                           ; Release SDA line for Slave to pull down   call   Delay47uSec                    ; guarantee min LOW TIME tLOW & Setup time   bsf    _SCL                           ; clock for slave to ACK   call   Delay40uSec                    ; guarantee min HIGH TIME tHIGH   bcf    STATUS, RP0                    ; Select PAGE 0 to test SDA pin   btfsc  SdaPin                         ; SDA should be pulled low by slave if OK   goto   TxmtErrorAck                   ; Uh oh, slave isn't behaving (or isn't there)   bsf    STATUS, RP0                    ; Select PAGE 1   bcf    _SCL                           ; reset clock   bcf    Txmt_Progress                  ; reset progress bit in Bus Status   bsf    Txmt_Success                   ; Transmission successful   bcf    ACK_Error                      ; ACK OK   returnTxmtErrorAck   bsf    STATUS,RP0                     ; select page 1   bsf    _SDA                           ; tristate SDA   bsf    _SCL                           ; tristate SCL   bcf    Txmt_Progress                  ; reset progress bit in Bus Status   bcf    Txmt_Success                   ; Transmission NOT successful   bsf    ACK_Error                      ; No ACK From Slave   return

推荐阅读

史海拾趣

3D PLUS公司的发展小趣事

面对日新月异的电子行业,3D PLUS公司始终保持创新精神,不断推动3D技术的升级。公司研发团队成功研发出全方位彩色人体扫描仪,这一设备能够在极短的时间内实现360度人像扫描,且清晰度极高,为互联网人体应用提供了强有力的支持。此外,公司还不断在软件、算法等方面进行优化,提升3D技术的精度和效率,满足市场的不断需求。

Crystal Clear Technology公司的发展小趣事

Crystal Clear Technology自创立之初,便专注于研发新型显示技术。面对市场上日益增长的高清显示需求,公司投入大量资源进行技术研发,成功推出了一款具有高清晰度和广视角的显示屏产品。这一创新产品迅速获得市场认可,为Crystal Clear Technology打开了新的销售渠道,并奠定了公司在行业内的技术领先地位。

FOTEK公司的发展小趣事

进入21世纪,福禄克通过一系列精明的并购活动,实现了业务的快速扩张。2000年,公司成功收购了Wavetek Wandell Goltermann的精密测量部门,这次并购不仅增强了福禄克在电气校准市场的竞争力,还为其带来了丰富的技术专利和客户资源。此后,福禄克继续通过并购方式,进入新的技术领域和市场领域,不断拓宽其业务范围。

天二科技(EVER OHMS)公司的发展小趣事

天二科技始终将产品质量视为企业的生命线。为了不断提升产品品质,公司引进了先进的自动化设备和生产工艺,并建立了严格的质量控制体系。经过多年的努力,天二科技的产品质量得到了显著提升,并先后通过了ISO9001、TS16949等多项国际质量管理体系认证。这些认证的取得不仅证明了天二科技在产品品质方面的卓越表现,更为公司赢得了客户的信任和市场的认可。

安普康(AMPCOM)公司的发展小趣事

安普康(AMPCOM)自创立之初,就致力于将品牌推向国际市场。随着公司规模的扩大和产品线的丰富,安普康开始实施全球商标注册战略。从2011年首次申请安普康AMPCOM商标,到随后的几年内在泰国、日本、新加坡、老挝、澳大利亚等多个国家成功注册,安普康的品牌影响力逐渐扩大。这一过程中,公司不仅面临着不同国家法律法规的挑战,还需应对文化差异和市场需求的差异。然而,凭借专业的团队和精准的市场定位,安普康成功地将品牌推向了全球舞台。

Anritsu公司的发展小趣事

在电子行业竞争日益激烈的背景下,安普康深知创新是企业发展的核心动力。因此,公司始终将研发投入作为重要战略之一。通过引进先进的生产设备和技术,安普康不断提升产品的品质和性能。同时,公司还积极与国内外知名企业和研究机构合作,共同开展技术研发和创新。这些努力使得安普康在光纤产品、布线产品等领域取得了多项专利,并成功推出了一系列具有市场竞争力的新产品。

问答坊 | AI 解惑

内存操作的疑问

wince6.0应用程序不能直接访问内存。这是为什么呀?什么原因呀?WINCE5可以吗?为什么不能仿问呀!用MAP成虚拟地址也不能仿问吗?…

查看全部问答>

6410 MLC 如何才能从nandflash启动

各位老大,最近我刚开始研究6410的板子,手头上现有三星6410 PM 090416的BSP包,Nandflash型号是K9GAG08U0M 2G,用PM的包现在可以采用iRom方式从SD卡启动,但下载stepldr和Eboot不能从Nandflash启动,有谁知道都会有什么原因导致出现这个情况,我曾 ...…

查看全部问答>

sqlce如何在嵌入式设备上建立数据库以及sdf文件?

sqlce能在设备上直接创建和编辑数据库、或者sdf文件么?像access和sql server企业管理器一样的编辑数据库。如果行的话,应该怎么做?不行的话,能给我发一下创建数据库的代码么?谢谢!!!!…

查看全部问答>

TXT文本生成问题

我用的是VB.NET 2003,开发一个WIN CE4.2和程序,我的界面有一个文本框,一个button按钮,我想在文本框里输入字符,然后按button按钮后生成一个UP.TXT文档,我想要每按一次按钮就生成一行数据,然后换行,等待文本档的输入,按button按钮再生成一行 ...…

查看全部问答>

QuartusII 管脚分配提示错误

no input node cannot be assigned to input pin,我已有输入node不知道为什么会这么提示,还请各位大侠提示一下,谢谢…

查看全部问答>

u-boot_smdkv210 分析三:启动代码lowlevel.s分析

u-boot_smdkv210 分析三:启动代码lowlevel.s分析_TEXT_BASE: .word TEXT_BASE .globl lowlevel_init lowlevel_init: push {lr}                        &n ...…

查看全部问答>

我来评论,太阳能光伏发电解决方案

对ADI的产品还算是比较了解的,之前用过他的DDS类的芯片,这个感觉不错,另外就是用过AD,DA,以及一个很快的比较器ADCMP600系列的,刚才太阳能伏光里面提到的有AD7606那个多通道的数模转换也很给力,ADI的前景很大,真的,就是芯片贵了点,另外指标 ...…

查看全部问答>

stm32掉电讨论

stm32掉电时发现,sram里的变量会变,例如有个变量fault=3,在掉电的过程中,fault会变为零。为了解决这个问题,我使用了掉电检测,发现PVD0在掉电的时候也会变来变去,一回为0一回为1。大家遇到过这个问题没有,怎么解决。 …

查看全部问答>

MSP430f5529音频处理

各位大牛,最近硬件课设要做一个类似于名侦探柯南里的变声蝴蝶结的东西,就是把输入的声音fft变为频域上的,在频域上搬移后再放出去,计划用msp430f5529来做,但听老师说这个计算量偏大,估计很难实现,就算实现了也不实用。他给我的建议是用音频co ...…

查看全部问答>