基于PIC单片机从24C02中读取数据到数码管显示的设计

2020-01-16来源: elecfans关键字:PIC单片机  24C02  读取数据  数码管显示

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


;本电路所使用24C02为ATMEL的,或不是该厂的,则烧写时间可能会有差异

;必须调整本程序的DELAY时间

;本实战的目的是让大家进上步熟悉I2C通信的时序,熟悉24CXX的读写,会用软件模拟I2C通信

;硬件接法:

基于PIC单片机从24C02中读取数据到数码管显示的设计
 

;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 ;源程序结束

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

关键字:PIC单片机  24C02  读取数据  数码管显示 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485868.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PIC单片机中预分频器的作用
下一篇:PIC16F87X单片机的定时器/计数器的应用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PIC单片机ADC的编程设计
#include__CONFIG(0X1F71);#define uchar unsigned char#define uint unsigned intconst uchar Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};const uchar Tab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的代码 void DisPlay(uchar date1,uchar date2,uchar date3,uchar date4);void DelayMS(uint z){uint
发表于 2020-01-09
PIC单片机ADC的编程设计
PIC单片机实现LCD1602显示字母A
PIC单片机LCD1602显示单个A字程序STATUS EQU 3H ;定义状态寄存器地址PORTA EQU 5H ;定义RA口数据寄存器地址PORTC EQU 7H ;定义RC口数据寄存器地PORTD EQU 8H ;定义RD口数据寄存器地址TRISA EQU 85H ;定义RA口方向控制寄存器地址TRISC EQU 87H ;定义RC口方向控制寄存器地址TRISD EQU 88H ;定义RD口方向控制寄存器地址ADCON1 EQU 9FH ;定义ADC模块控制寄存器1的地址;********************Z EQU 2 ;定义0状态位的位地址RP0 EQU 5 ;定义页选位RP0的位地址
发表于 2020-01-09
PIC单片机实现LCD1602显示字母A
PIC单片机定时器1的实际应用
#define uint unsigned int__CONFIG(0x3B31);void init();uint intnum;void main(){init();while(1){/*if(intnum==20){intnum=0;RD0=!RD0;}*/}#include#define uchar unsigned char#define uint unsigned int__CONFIG(0x3B31);void init();uint intnum;void main(){init();while(1){/*if(intnum==20){intnum=0;RD0=!RD0;}*/}} void init(){
发表于 2020-01-09
PIC单片机定时器1的实际应用
PIC单片机对LED数码管矩阵键盘显示的设计
#include#include “。./head/config.h”__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置单片机LED共阳极段码表(带小数点) 0~9const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X08,0X28,0x18,0x49,0x0f,0xc8,0x0d,0x1d};数码管位码表const char table[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsigned int result = 0,lastresult
发表于 2020-01-09
PIC单片机对LED数码管矩阵键盘显示的设计
PIC单片机定时器0的应用
#include#define uchar unsigned char#define uint unsigned int__CONFIG(0x3B31);void init();uint intnum;void main(){init();while(1){if(intnum==5){intnum=0;RD0=!RD0;}}}void init(){TRISD=0;PORTD=0;OPTION=0x07;INTCON=0xa0;TMR0=61;}void interrupt TIme0(){T0IF=0;TMR0=61;intnum++;}
发表于 2020-01-09
PIC单片机定时器0的应用
PIC单片机INT0中断的原理
RB0/INT0、RB1/INT1及RB2/INT2引脚的外部中断是边沿触发的;如果INTCON2 寄存器中相应的INTEDGx位被置1,则为上升沿触发;如果该 INTEDGx 位清零,则为下降沿触发。当RBx/INTx引脚上出现一个有效边沿时,相应标志位 INTxF 被置1 。在重新使能该中断前,必须在中断服务程序中先用软件将标志位INTxF 清零。通过对相应的使能位INTxE 清零,可以禁止该中断。如果INTxE 位在进入休眠状态前被置1 ,则所有的外部中断(INT0、INT1 及INT2)能把处理器从休眠状态中唤醒。如果全局中断使能位 GIE 被置1 ,则处理器将在唤醒之后转移到中断向量。INT1 和INT2 的中断
发表于 2020-01-09
PIC单片机INT0中断的原理
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved