您的位置 首页 FPGA

根据PIC单片机从24C02中读取数据到数码管显现的规划

基于PIC单片机从24C02中读取数据到数码管显示的设计-该试验功能是单片机复位一次,自动从24C02中读取数据到数码管显示,然后对值加1再写入24C02,最终数码管中的数据就是开机的次数,具有一定的实用意义

该试验功用是单片机复位一次,主动从24C02中读取数据到数码管显现,然后对值加1再写入24C02,终究数码管中的数据便是开机的次数,具有必定的有用含义

;本电路所运用24C02为ATMEL的,或不是该厂的,则烧写时刻或许会有差异

;有必要调整本程序的DELAY时刻

;本实战的意图是让我们进上步了解I2C通讯的时序,了解24CXX的读写,会用软件模仿I2C通讯

;硬件接法:


 

;1.24CXX的SDA接877A的RB5口,SCLK接877A的RB4口,WP接地,A0,A1,A2接地

;2.试验本试验须将MCD-DEMO试验板上的93CXX系列芯片先取下,在试验过程中不要按动相同接在RB口的按键,避免影响通讯时序。

;3.试验板上拔码开关S4,S5要置ON,其它拔码开关都可以封闭。

;程序清单如下:

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

LIST P=16F877A, R=DEC

include ”P16F877A.inc“

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

__CONFIG _DEBUG_OFF&_CP_OFF&_WRT_HALF&_CPD_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC;

;************************************ 界说查表偏移量

#define SDA PORTB,5

#define SCLK PORTB,4

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

COUNT EQU 20H

ADDR EQU 21H

DAT EQU 23H

TEMP EQU 24H

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

ORG 000H

NOP ;放置一条ICD必需的空操作指令

GOTO MAIN

ORG 004H

RETURN

ORG 0008H

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

TABLE

ADDWF PCL,1 ;地址偏移量加当时PC值

RETLW 0C0H ;0

RETLW 0F9H ;1

RETLW 0A4H ;2

RETLW 0B0H ;3

RETLW 99H ;4

RETLW 92H ;5

RETLW 82H ;6

RETLW 0F8H ;7

RETLW 80H ;8

RETLW 98H ;9

RETLW 00H ;A

RETLW 00H ;B

RETLW 00H ;C

RETLW 00H ;D

RETLW 00H ;E

RETLW 00H ;F

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

MAIN

MOVLW 0FFH

MOVWF PORTC ;数码管先悉数平息

MOVLW 0FFH

MOVWF PORTA

MOVLW 0FFH

MOVWF PORTB ;SDT,SCLK都为高

BSF STATUS,RP0 ;界说RA口,RC,RB口悉数为输出

MOVLW 07H

MOVWF ADCON1 ;设置RA口悉数为一般数字IO口

CLRW

MOVWF TRISB ;

MOVWF TRISA

MOVWF TRISC

MOVWF OPTION_REG ;敞开RB口内部弱上拉

BCF STATUS,RP0

CLRW ;地址00H

CALL RD24 ;读地址

MOVWF DAT ;读出的值送F1

SUBLW .9 ;若读出的值大于9,则F1送为0,从0开端(由于1位数码管只能显现到0-9)

BC TT2 ;C=0就转TT2

TT1

CLRF DAT

TT2

MOVFW DAT

CALL TABLE ;取显现段码

MOVWF PORTC ;段码送C口

BCF PORTA ,1 ;点亮第一位数码管

INCF DAT ,1 ;每次上电,存入24CXX的00H地址的值加1

CLRW ;地址00H

CALL WT24 ;写24CXX

GOTO $

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

RD24

MOVWF ADDR ;地址暂存于F4中

CALL START24 ;发动I2C

MOVLW 0A0H

CALL SUBS ;写器材地址1010000+最终一位0写操作

MOVFW ADDR ;载入地址

CALL SUBS ;写地址

CALL START24 ;再发开端信号

MOVLW 0A1H ;写器材地址1010000+最终一位1读操作

CALL SUBS

BSF STATUS ,RP0

BSF TRISB ,5 ;设SDA脚为输入,预备读

BCF STATUS ,RP0

MOVLW 08H ;共读8位数据

MOVWF COUNT

RD000

NOP

NOP

NOP

BSF SCLK ;读数据

NOP

BSF STATUS,C

BTFSS SDA

BCF STATUS,C

RLF TEMP ,1

BCF SCLK

DECFSZ COUNT ,1 ;循环读完8位

GOTO RD000

BSF STATUS ,RP0

BCF TRISB ,5 ;康复SDA脚为输出

BCF STATUS ,RP0

BSF SDA

CALL DELAY2

BSF SCLK

CALL DELAY2

BCF SCLK ;应对毕,SDA置1

CALL STOP ;送中止信号

MOVFW TEMP ;将读的数据送入W中

RETURN

;******************************写入24C02程序

WT24 MOVWF ADDR ; 先将地址暂存于F4

CALL START24 ;开端条件

MOVLW 0A0H

CALL SUBS ;写器材地址1010000+最终一位0写操作

MOVFW ADDR ;载入地址

CALL SUBS ;写地址

MOVFW DAT ;载入数据

CALL SUBS ;写数据

CALL STOP ;中止信号

RETURN

START24

;开端条件

BSF SDA

BSF SCLK

CALL DELAY2

BCF SDA

CALL DELAY2

BCF SCLK

RETURN

STOP

BCF SDA ;中止条件

NOP

NOP

BSF SCLK

CALL DELAY2

BSF SDA

RETURN

SUBS ;写数据

MOVWF TEMP ;将要写的数据存于F2中

MOVLW 08H

MOVWF COUNT ;写8位数据

SH01

RLF TEMP ,1

BSF SDA

BTFSS STATUS ,C

BCF SDA

NOP

BSF SCLK

CALL DELAY2

BCF SCLK

DECFSZ COUNT ,1 ;循环写完8位

GOTO SH01

BSF SDA

NOP

NOP

BSF SCLK

BSF STATUS,RP0

BSF TRISB ,5

BCF STATUS,RP0

REP

BTFSC SDA ;判应对到否,未到则等候

GOTO REP

BCF SCLK

BSF STATUS,RP0

BCF TRISB ,5

BCF STATUS,RP0

RETURN

DELAY2

NOP

NOP

NOP

NOP

RETURN

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

end ;源程序完毕

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/346943.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部