24c02开机计数器程序

发布者:温柔浪漫最新更新时间:2018-01-11 来源: eefocus关键字:24c02  开机计数器 手机看文章 扫描二维码
随时随地手机看文章

LED1    EQU    08H 
LED2    EQU    09H 
LED3    EQU    0AH 
LED4    EQU    0BH 

LedT0    EQU    0CH    ;0-3 轮流点亮4个数据管 

SDA    EQU    P2.0 
SCL    EQU    P2.1 
Address    EQU    0EH 
I2CData    EQU    0FH 
;================================================= 
    ORG 0000H  
    LJMP START;转入主程序 

;================================================= 
    ORG    000BH             
;定时器0中断入口 
INT_TO: 
    PUSH    ACC 
    PUSH    PSW 

    CLR    TF0        ;清定时0中断标志 
     MOV     TH0,#0F6H    ;2.5MS 
     MOV     TL0,#03DH    ; 

     MOV     A,#11110000B    ;关数码管 
    ORL    P2,A 

     MOV     A,LedT0 
    CJNE    A,#0,INT_T0_1 
     MOV     A,LED1 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.7     
     MOV     LedT0,#1 
    LJMP    INT_T0_END 
 INT_T0_1: 
       
     MOV     A,LedT0 
    CJNE    A,#1,INT_T0_2 
     MOV     A,LED2 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.6     
     MOV     LedT0,#2 
    LJMP    INT_T0_END 
 INT_T0_2: 
       
      MOV     A,LedT0 
    CJNE    A,#2,INT_T0_3 
     MOV     A,LED3 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.5     
     MOV     LedT0,#3 
    LJMP    INT_T0_END 
 INT_T0_3: 
       
     MOV     A,LED4 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.4     
     MOV     LedT0,#0 
    LJMP    INT_T0_END 
       
 INT_T0_END: 

    POP    PSW     
    POP    ACC 

RETI 

;============================================= 

START: 
     MOV     SP,#60H 

    CALL    DELAY10MS     
    CALL    DELAY10MS 
    CALL    DELAY10MS 

    CALL    AT24C01_READ_ALL 

     MOV     A,LED1 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
     MOV     A,LED2 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
     MOV     A,LED3 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
     MOV     A,LED4 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
    JMP    START_INC 
;第一次使用复位内部数值 
START_RESET_24C01: 
     MOV     LED1,#0 
     MOV     LED2,#0 
     MOV     LED3,#0 
     MOV     LED4,#0 
    JMP    START_INC_END 
;加1 
START_INC: 
    INC    LED4 
     MOV     A,LED4 
    CJNE    A,#10,START_INC_END    ;等于10,进位 
     MOV     LED4,#00 
    INC    LED3 
     MOV     A,LED3 
    CJNE    A,#10,START_INC_END 
     MOV     LED3,#00 
    INC    LED2 
     MOV     A,LED2 
    CJNE    A,#10,START_INC_END 
     MOV     LED2,#00 
    INC    LED1 
     MOV     A,LED1 
    CJNE    A,#10,START_INC_END 
     MOV     LED1,#00 
     MOV     LED2,#00 
     MOV     LED3,#00 
     MOV     LED4,#00 

START_INC_END:     
    ;储存 
    CALL    AT24C01_WRITE_ALL 
     

     MOV     TMOD,#01H    ;设定T0为十六位定时模式。 
     MOV     TH0,#0F6H    ;2MS 
     MOV     TL0,#03DH    ; 
    SETB    TR0        ;开定时器0 
    SETB    ET0        ;致能定时0中断 
    CLR    TF0        ;清定时0中断标志 
    SETB    EA        ;开总中断 

     MOV     LedT0,#00H 
     MOV     DPTR,#TABLE 


;============================================= 
SCAN:     

    ;按键扫描 
    JB    P3.2,$ 
    LCALL    DELAY10MS    ;去抖动 
    JNB    P3.2,KEY_RESET 
    LJMP    SCAN 
;============================================= 
KEY_RESET: 
     MOV     LED1,#00 
     MOV     LED2,#00 
     MOV     LED3,#00 
     MOV     LED4,#00 

    ;储存 
    CALL    AT24C01_WRITE_ALL     
    ;检测按键是否放开 
    JNB    P3.2,$ 
    JMP    SCAN 

DELAY10MS:  
     MOV  R4,#20 
DELAY10MSA: 
     MOV  R5,#247 
    DJNZ R5,$ 
    DJNZ R4,DELAY10MSA 
RET 

TABLE: 
    DB    00101000B    ;0 
    DB    11101011B    ;1 
    DB    00110010B    ;2 
    DB    10100010B    ;3 
    DB    11100001B    ;4 
    DB    10100100B    ;5 
    DB    00100100B    ;6 
    DB    11101010B    ;7 
    DB    00100000B    ;8 
    DB    10100000B    ;9 
    DB    01100000B    ;A 
    DB    00100101B    ;b 
    DB    00111100B    ;C 
    DB    00100011B    ;d 
    DB    00110100B    ;E 
    DB    01110100B    ;F 
    DB    11110111B    ;- 
    DB    11111111B    ; 
;==================================================== 
;读出全部数据 
AT24C01_READ_ALL: 
     MOV     Address,#00H 
    CALL    I2C_READ 
     MOV     LED1,A        ;读出数据 
     MOV     Address,#01H 
    CALL    I2C_READ 
     MOV     LED2,A        ;读出数据 
     MOV     Address,#02H 
    CALL    I2C_READ 
     MOV     LED3,A        ;读出数据 
     MOV     Address,#03H 
    CALL    I2C_READ 
     MOV     LED4,A        ;读出数据 
RET 
;==================================================== 
;写入全部数据 
AT24C01_WRITE_ALL: 
     MOV     Address,#00H 
     MOV     A,LED1 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
     MOV     Address,#01H 
     MOV     A,LED2 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
     MOV     Address,#02H 
     MOV     A,LED3 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
     MOV     Address,#03H 
     MOV     A,LED4 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
RET 
;==================================================== 
;写一个字节    Address地址    I2CDatata写入的数据 
;==================================================== 
I2C_WRITE: 
    I2C_WRITE_A: 
    LCALL    I2C_START 
     MOV     A,#10100000B 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK 
    JC    I2C_WRITE_A    ;=1,表示无确认,再次发送 
     
     MOV     A,Address 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK     

     MOV     A,I2CData 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK     
    LCALL    I2C_STOP 
RET     



;==================================================== 
;读一个字节    Address地址    Data读出的数据 
;==================================================== 

I2C_READ: 
    I2C_READ_A: 
    LCALL    I2C_START 
     MOV     A,#10100000B 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK 
    JC    I2C_READ_A    ;=1,表示无确认,再次发送 

     MOV     A,Address 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK     

    I2C_READ_B: 
    LCALL    I2C_START 
     MOV     A,#10100001B 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK 
    JC    I2C_READ_B 

    LCALL    I2C_RECEIVE8BIT 
     MOV     I2CData,A 
    LCALL    I2C_ACK 
    LCALL    I2C_STOP 
RET 



;发送开始信号 
I2C_START: 
    SETB    SCL 
    SETB    SDA 
    NOP 
    NOP 
    CLR    SDA 
    NOP 
    NOP 
    CLR    SCL 
RET 
;发送结束信号 
I2C_STOP: 
    CLR    SDA 
    NOP 
    NOP 
    SETB    SCL 
    NOP 
    NOP 
    SETB    SDA 
RET 

;发送接收确认信号 
I2C_ACk: 
    SETB    SDA 
    SETB    SCL 
    NOP 
    NOP 
    JB    SDA,I2C_ACK0 
    CLR    C     
    SJMP    I2C_ACK_END 
    I2C_ACK0: 
    SETB    C 
    I2C_ACK_END: 
    CLR    SCL 
RET 

;送八位数据 
I2C_SEND8BIT: 
     MOV     B,#08H 
I2C_SEND8BIT_A:     
    RLC    A 
     
     MOV     SDA,C 
    SETB    SCL 
    NOP 
    NOP 
    CLR    SCL 
    DJNZ    B,I2C_SEND8BIT_A 
RET 


;接收八位数据 
I2C_RECEIVE8BIT: 
     MOV     B,#08H 
    CLR    A 
    SETB    SDA 
I2C_RECEIVE8IT_A: 
    SETB    SCL 
    NOP 
    NOP 
     MOV     C,SDA 
    RLC    A 
    CLR    SCL 
    DJNZ    B,I2C_RECEIVE8IT_A 

RET 
END


关键字:24c02  开机计数器 引用地址:24c02开机计数器程序

上一篇:TLC5620 DA转换汇编程序
下一篇:93C46的读写实验程序

推荐阅读最新更新时间:2024-03-16 15:52

ATMEGA16读写24C02 C51程序
完整代码下载地址: http://www.51hei.com/f/2402avr.rar main函数: /* 程序功能:ATMEGA16读写24C02 作者:朱波 时间:2012年1月30日 说明:程序运行后会从0开始自动计数到256(对字节操作的结果) 当复位或者断电时24C02保存断电时的数据,当重新启动后 计数值会从断电时的值开始计数 */ #include iom16v.h #include macros.h #include"delay.h" #include"display.h" #include"24C02.h" #define uchar unsigned char #define uint un
[单片机]
ATMEGA16读写<font color='red'>24C02</font> C51程序
C51: 2块 24C02 的读写
/*/函数功能, 向U2写入12345,向U3写入67890,再分别读出, 在 LCD1602 显示 */ #include reg51.h #include intrins.h //变量声明 #define uchar unsigned char #define uint unsigned int //延时 1ms void delayms() { uchar i; for(i=0;i 250;i++); for(i=0;i 80;i++); } void delaynms(uint s) { uint tem; for(tem=0;tem s;tem++) { delayms(); } }
[单片机]
C51: 2块 <font color='red'>24C02</font> 的读写
ATmega16读写iic(24c02) C语言程序测试通过
简介:本程序在实验板ATMEGA16上测试通过,在示波器把SCL,SDA信号线有数据,移值到自己电路上可以放心使用,在ATMEGA32上一样使用,本人24C02的A2,A1,A0都是接地,若地址不一样,在程序相应位置改一下就可以,串口上调试单片机的基础,所以它一定要会用。 #include iom16v.h #include I2C.h #include 1602.h #include delay.h /*通过AVR往IIC写数据,并通过串口把数据读出显示出来*/ //=============================================================== void uart_i
[单片机]
STM32的I2C的原理与使用(24C02附代码)
一、IIC的定义 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS开发用于连接微控制器及其外围设备。IIC是一种多向控制总线,就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化信号传输总线。 它由数据线SDA和时钟SCL构成的串行总线,接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上,可发送接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 二、多主机I2C总线系统结构 2)多设备的使用举例
[单片机]
STM32的I2C的原理与使用(<font color='red'>24C02</font>附代码)
24C02(EEPROM)以字节读写程序(ASM)
24C02以字节读写时序 选择性读时序 .................24c02字节读写程序(已调试过 )....................... ;//////////////////////////////////////////////////// ;AT89C52与AT24C02的IIC通信 ;控制数码管显示0-P ;AT24C02采用字节写和选择性读 ;//////////////////////////////////////////////////// DAUN EQU 18 ;写入字节数,对24C02(256BK)最大为255 ADDR EQU 41H ;24C02操作数据地址 WRD
[单片机]
<font color='red'>24C02</font>(EEPROM)以字节读写程序(ASM)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved