历史上的今天
返回首页

历史上的今天

今天是:2024年10月16日(星期三)

正在发生

2019年10月16日 | PIC16C5X单片机模拟串口的源程序

2019-10-16 来源:eefocus

TITLE " TWO WIRE/I2C BUS INTERFACE WITH PIC16C5x "

;

LIST P=16C54

;

;*****************************************************************************

;**  Two wire/I2C Bus READ/WRITE Sample Routines of Microchip's

;**  24Cxx / 85Cxx serial CMOS EEPROM interfacing to a 

;**  PIC16C54 8-bit CMOS single chip microcomputer

;**  Revsied Version 2.0 (4/2/92).

;**

;**     Part use = PIC16C54-XT/JW                                           

;**  Note:  1) All timings are based on a reference crystal frequency of 2MHz

;**            which is equivalent to an instruction cycle time of 2 usec.

;**         2) Address and literal values are read in octal unless otherwise

;**            specified.

;

;

;       Program:          I2CBUS.ASM 

;       Revision Date:   

;                         12-12-95      Compatibility with MPASMWIN 1.30

;

;********************************************************************** 

;

;*****************************************************************************

;

;-----------------------------------------------------------------------------

;       Files Assignment

;-----------------------------------------------------------------------------

;

PC      EQU     2               ; Program counter

STAT    EQU     3               ; PIC status byte

FSR     EQU     4               ; File Select Register

RA      EQU     5               ; Port A use to select device address

RB      EQU     6               ; RB7 = SDA, RB6 = SCL

;

STATUS  EQU     08              ; Status register

FLAG    EQU     09              ; Common flag bits register

EEPROM  EQU     0A              ; Bit buffer

ERCODE  EQU     0B              ; Error code (to indicate bus status)

ADDR    EQU     10              ; Address register

DATAI   EQU     11              ; Stored data input register

DATAO   EQU     12              ; Stored data output register

SLAVE   EQU     13              ; Device address (1010xxx0)

TXBUF   EQU     14              ; TX buffer

RXBUF   EQU     15              ; RX buffer

COUNT   EQU     16              ; Bit counter

;

TIMER0  EQU     18              ; Delay timer0

TIMER1  EQU     19              ; Delay timer1

;

;

;-----------------------------------------------------------------------------

;                     Bit Assignments

;-----------------------------------------------------------------------------

;

; Status bits

;

Z       EQU     2

C       EQU     0

;

; FLAG Bits

;

ERR1    EQU     0               ; Error flag

;

; Instruction Destination Bits

;

F       EQU     1

W       EQU     0

;

; EEPROM Bits

;

DI      EQU     7               ; EEPROM input

DO      EQU     6               ; EEPROM output

;

; I2C Device Bits

;

SDA     EQU     7               ; RB7, data in/out

SCL     EQU     6               ; RB6, serial clock

;

;END FILES/BITS EQUATE

 PAGE

;

;-----------------------------------------------------------------------------

;       Two wire/I2C - CPU communication error status table and subroutine

;-----------------------------------------------------------------------------

;  input  :     W-reg   = error code

;  output :     ERCODE  = error code

;           FLAG(ERR1) = 1

;

;         code          error status mode

;       -------         ------------------------------------------------------

;           1   :       SCL locked low by device (bus is still busy)

;           2   :       SDA locked low by device (bus is still busy)

;           3   :       No acknowledge from device (no handshake)

;           4   :       SDA bus not released for master to generate STOP bit

;-----------------------------------------------------------------------------

;

;Subroutine to identify the status of the serial clock (SCL) and serial data

;(SDA) condition according to the error status table. Codes generated are

;useful for bus/device diagnosis.

;

ERR

BTFSS   FLAG,ERR1       ; Remain as first error encountered

MOVWF   ERCODE          ; Save error code

BSF     FLAG,ERR1       ; Set error flag

RETLW   0

;

;-----------------------------------------------------------------------------

;       START bus communication routine

;-----------------------------------------------------------------------------

;       input   : none

;       output  : initialize bus communication

;-----------------------------------------------------------------------------

;

;Generate START bit (SCL is high while SDA goes from high to low transition)

;and check status of the serial clock.

BSTART

MOVLW   B'00111111'     ; Put SCL, SDA line in output state

TRIS    RB

;***************************************************************************

bsf     RB,SDA          ;make sure sda is high

;***************************************************************************

BSF     RB,SCL          ; Set clock high

MOVLW   1               ; Ready error status code 1

BTFSS   RB,SCL          ; Locked?

CALL    ERR             ; SCL locked low by device

BCF     RB,SDA          ; SDA goes low during SCL high

NOP                     ; Timing adjustment

NOP

NOP

BCF     RB,SCL          ; Start clock train

RETLW   0

;

;END SUB

 PAGE

;

;-----------------------------------------------------------------------------

;       STOP bus communication routine

;-----------------------------------------------------------------------------

;       Input   :       None

;       Output  :       Bus communication, STOP condition

;-----------------------------------------------------------------------------

;

;Generate STOP bit (SDA goes from low to high during SCL high state)

;and check bus conditions.

;

BSTOP

;****************************************************************************

MOVLW   B'00111111'     ; Put SCL, SDA line in output state

TRIS    RB

;****************************************************************************

BCF     RB,SDA          ; Return SDA to low

BSF     RB,SCL          ; Set SCL high

nop

nop

nop

MOVLW   1               ; Ready error code 1

BTFSS   RB,SCL          ; High?

CALL    ERR             ; No, SCL locked low by device

BSF     RB,SDA          ; SDA goes from low to high during SCL high

MOVLW   4               ; Ready error code 4

BTFSS   RB,SDA          ; High?

CALL    ERR             ; No, SDA bus not release for STOP

RETLW   0

;

;END SUB

;

;-----------------------------------------------------------------------------

;       Serial data send from PIC to serial EEPROM, bit-by-bit subroutine

;-----------------------------------------------------------------------------

;       Input   :       None

推荐阅读

史海拾趣

Desco Tools公司的发展小趣事

随着业务的不断发展,Desco Tools公司开始积极拓展全球市场。公司利用其在防静电技术方面的优势,成功打入欧美、亚洲等多个国家和地区的市场。通过与国际知名企业的合作,Desco Tools公司的产品和解决方案得到了广泛应用,为全球电子行业的发展做出了重要贡献。

E. Dold & Söhne KG公司的发展小趣事

E. Dold & Söhne KG公司始建于20世纪初,当时只是一间小型的电子手工作坊。创始人埃德蒙德·多尔德(Edmund Dold)凭借对电子技术的热爱和精湛的手艺,开始生产简单的电子元件。随着时间的推移,公司逐渐扩大规模,引进了先进的生产设备和制造工艺,逐步转型为现代化的电子元件制造商。在这个过程中,多尔德家族始终秉持着精益求精、追求卓越的精神,为公司的持续发展奠定了坚实的基础。

AUK Contractors Co Ltd公司的发展小趣事

近年来,电子行业面临着原材料成本上升、环保要求提高等多重挑战。AUK Contractors Co Ltd积极应对这些挑战,通过优化生产流程、采用环保材料等方式降低成本、提高效益。同时,公司还加大了对新能源、智能制造等领域的研发投入,实现了从传统电子制造向高科技领域的转型升级。

DCD [Digital Core Design]公司的发展小趣事

DCD公司自创立之初,就专注于数字核心设计领域的研发。创始人们凭借对电子技术的深刻理解和市场需求的敏锐洞察,带领团队攻克了一个又一个技术难关。在产品研发初期,公司面临着资金短缺和技术难题的双重压力,但团队凭借着坚韧不拔的精神,成功研发出了首款具有竞争力的数字核心设计产品,为公司的发展奠定了坚实的基础。

BVLED公司的发展小趣事

在电子行业的初期,BVLED公司只是众多初创企业之一,面临着资金短缺、技术不成熟和市场认可度低等问题。然而,公司的创始人凭借对LED技术的深刻理解和市场需求的敏锐洞察,决定专注于研发高效、节能的LED产品。经过数月的努力,公司成功开发出了一款具有竞争力的LED照明产品,并成功获得了第一批订单。这一突破为公司的发展奠定了坚实的基础。

EDSYN公司的发展小趣事

Econais的超低功耗Wi-Fi模块在医疗保健领域取得了广泛的应用。通过连接医疗设备,如监护仪、血糖仪等,这些模块实现了患者数据的实时传输和监控,提高了医疗服务的效率和质量。同时,Econais还针对医疗保健领域的特点,提供了定制化的软件开发工具包(SDK),帮助客户快速开发符合行业标准的物联网应用。

问答坊 | AI 解惑

美国国家半导体电源管理、放大器技术研讨会

主讲者:MartinGiles:(美国国家半导体产品应用经理)顾玮:(美国国家半导体电源产品部资深应用工程师)张传庸:(美国国家半导体通信接口产品部应用工程组主管)第一场:标题:美国国家半导体:模拟的艺术--电源管理、放大器技术研讨 ...…

查看全部问答>

急......可以将两个程序合并而互不影响吗?

下面是两个汇编程序.一个是数码管显示程序,一分钟+1;另一个是延时程序. 可不可以将两个程序合并,但是两个程序互不影响.怎么合并,请详细说说请指教.不胜感激.... ;本程序实现8段码动态显示功能 org 0000h ajmp&n ...…

查看全部问答>

四川省大学生电子设计竞赛西南科技大学赛区竞赛题目-远程温湿度测量系统

本帖最后由 paulhyde 于 2014-9-15 04:20 编辑 电子竞赛题目-远程温湿度测量系统 一、电子竞赛题目任务: 制作一个远程温湿度测量仪,该测试仪具有温湿度测量和远程显示等功能。其结构框图如下: 二、电子竞赛题目要求: 1、基本要求 ( ...…

查看全部问答>

通过CSP编程卸载的一个奇怪问题

我做了一个cab包,真机安装和卸载都是没有问题的,但现在我想搞个自动更新,所以就尝试用CSP编程卸载这个cab XmlDocument doc = new XmlDocument();             string xml = @\"      &n ...…

查看全部问答>

关于AGC(Automatic Gain Control)和ADC “100分哦”

请教各位达人,我想找一款内置AGC功能的ADC,ADC最好为12bit,20MSPS 我网络上找了一些资料都没有发现有这样的ADC,许多电路都是内置模拟AGC再加一个ADC来实现的 谁能告诉我有没有这样的ADC啊?有的话提供型号,最好能有PDF文档,立即送100分…

查看全部问答>

这样的电路有问题吗

电路经常烧坏电源,我怀疑电路有问题,请教各位? [ 本帖最后由 chenxinli 于 2010-8-12 16:41 编辑 ]…

查看全部问答>

朋友们帮忙看看这个电路什么作用啊?谢谢啊

如题,帮看看这个电路实现什么作用啊,我太菜了,实在看不懂啊   …

查看全部问答>

STM32的USB2.0的速度可以到多少?12Mor480M?

手册上说: USB 2.0 full speed interface但是文件又说:The STM32F103xC, STM32F103xD and STM32F103xE performance line embed a USBdevice peripheral c ...…

查看全部问答>

【备战2011国赛】控制类赛题方向的朋友一定要看!

本帖最后由 paulhyde 于 2014-9-15 03:18 编辑 1.历届的 “控制类赛题”        在9届电子设计竞赛中,“控制类赛题” 除了1994和1995年外,其它每届都有,共有9题:        & ...…

查看全部问答>

运放稳定性

运算放大器的稳定性设计,中文材料,不太清楚在这个论坛里有没有人上传过,要是没有会陆续更新。谢谢~~ 第一部分:环路稳定性基础 第二部分:运放网络、SPICE分析…

查看全部问答>