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

发布者:tmgouzi最新更新时间: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  读取数据  数码管显示 引用地址:基于PIC单片机从24C02中读取数据到数码管显示的设计

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

推荐阅读最新更新时间:2024-11-07 16:26

PIC单片机PICC编程实现LED闪烁控制
  在很多设计中需要有精彩而实用的 LED 闪烁来表示设备工作正常与否和工作状态。在一些实时性要求不高的设计中可以用插入延时来控制LED闪烁。      它的缺点现而易见:      1、LED闪烁方式反映慢。      2、在延时过程不能干其它工作(中断除外).浪费了资源。      3、代码雍长,真正控制LED就几个个指令,其它的延时代码占了99%的空间。      如果用TMRI或TMR2来做一个时钟,上面的种种缺点就可以避免。      下面是用TMR1作时钟的C代码(RB1、RB2、RB3控制LED)示例:   这样的框架对于基于要求实时性高的软件查询的程序是很有效的。
[单片机]
用<font color='red'>PIC单片机</font>PICC编程实现LED闪烁控制
8只数码管滚动显示8~F
程序源代码如下: /* 8只数码管循环显示8~F */ #include reg51.h typedef unsigned char uint8; typedef unsigned int uint16; code uint8 LED_CODE = {0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; void delay(uint16 x) { uint16 i,j; for(i = x; i 0; i --) for(j = 114; j 0; j --); } void main() { uint8 i; while(1) { for(i = 0; i 8; i +
[单片机]
8只<font color='red'>数码管</font>滚动<font color='red'>显示</font>8~F
PIC单片机ADC的简单应用
#include pic.h __CONFIG(0X1F71); #define uchar unsigned char #define uint unsigned int const 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(uin
[单片机]
基于PIC单片机对SC1621摇控器的控制
;*APPLICATION NOTE E6000 ICEXPLORER ****************** ;* TItle: ; ;SC6121的遥控器发射码依次为:同步头(引导码)+32位数据码 ; ;(用户码低8位+用户码高8位+键码+键码的反码) ; ;引导码是由9MS的高电平加4.5MS的低电平构成, ; ;我们接收到的刚好反相为9MS的低电平加4.5MS的高电平。 ; ;数据码‘0’是由560US的高电平加560US的低电平构成 ; ;接收时反相为560US的低电平加560US的高电平构成=1.125mS ; ;数据码‘1’是由560US的高电平加1.69MS的高电平构成 ; ;接收时反相为560US的低电平加1.6
[单片机]
基于<font color='red'>PIC单片机</font>对SC1621摇控器的控制
PIC单片机C语言程序设计(11)
  5.PIC单片机C语言程序SIM软件仿真技巧   在《PIC 单片机C 语言程序设计(10)》中,我们以C 语言程序pic07.C 为例,介绍了SIM 软件仿真调试的基本手段和方法,下面介绍SIM 软件仿真的技巧,包括用跑表直接测试C 程序运行的耗时(包括秒值)、快速观察C 程序的运行路径、显示C程序中的变量值和修改程序中的错误等等。   ⑴ 用跑表测试程序的延时量和秒计时值这里, 我们仍以pic07.C 为例, 介绍利用MPLAB IDE 提供的跑表(又称停表—stop watch 命令),测试C 程序中所要求的各种计时值的操作步骤。   该操作十分简单,同时也是实际程序调试中经常要用到的。   pic07.C 是一个
[单片机]
<font color='red'>PIC单片机</font>C语言程序设计(11)
PIC单片机基础知识之二
PIC中档单片机的寻址模式,BANK/PAGE相关 1)操作对象寻址 -9位(512字节)寻址范围 【直接寻址】 在基础知识之一里面介绍了长字指令,一条PIC16的指令是一个14位的长字,这个长字的前半部分是指令的操作码, 后半部分则是指令所需要操作的对象地址或者操作数。如下面的图示: 指令: ADDWF REG,W 机器码: 00 0111 d fffffff 在这里,前面的000111就是ADDWF的操作码,d是destination的缩写,表示运算的结果放到哪里去,如果逗号后面是0,则结果放到W里,如果逗号后面是1,则结果放到所操作的寄存器REG里。你看到这条指令逗号后面不是0或1,而是W或F,这是编
[单片机]
减少空间提高效率:PIC单片机A/D转换数据打包
PIC 单片机A/D 转换后的数据通常需要占用两个8 位宽的RAM 单元, 而PIC 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。   为此提出一种数据打包的方法, 使得相同的数据量占用较少的存储空间, 并可提高传输效率。   引言   在由单片机和PC 机构成的检测系统中, 通常会由多个单片机采集数据并将经过A/D 转换的数据通过串口送往上位PC 机进行数据处理。PIC 单片机A/D 转换后的结果大多是8 位或10 位的, 8 位的A/D转换不涉及该问题。以10 位的数据为例, 在单片机内进行存储时需要占用2 个8 位的字节, 低8 位和高2位分别存储在
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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